请仔细阅读this 文档部分。一切都清楚地解释在那里。
至于设置Unsafe Sysctls,需要额外在节点级别启用:
默认启用所有安全 sysctl。
所有不安全 sysctl 默认是禁用的,必须允许
由集群管理员在每个节点的基础上手动进行。已禁用的 Pod
将安排不安全的 sysctl,但无法启动。
考虑到上述警告,集群管理员可以允许某些
unsafe sysctl 用于非常特殊的情况,例如高性能或实时应用程序调整。 不安全 sysctl 在一个
带有 kubelet 标志的逐节点基础;例如:
kubelet --allowed-unsafe-sysctls \
'kernel.msg*,net.core.somaxconn' ...
对于 Minikube,这可以通过 extra-config 标志来完成:
minikube start --extra-config="kubelet.allowed-unsafe-sysctls=kernel.msg*,net.core.somaxconn"...
只有 namespaced sysctl 可以通过这种方式启用。
至于……
但即使是安全的 sysctls 也会抛出错误,
spec: Forbidden: pod updates may not change fields other than spec.containers[*].image, spec.initContainers[*].image, spec.activeDeadlineSeconds or spec.tolerations
这是完全不同的错误消息,它与更改 Pod 定义中的 sysctls 相关的限制无关。请注意,您不能通过kubectl edit 更改大部分Pod 规范,除了上面消息中列出的一些例外情况。具体来说,如果不重新创建 Pod 就无法更改它们,因此在这种情况下,您可以简单地运行而不是编辑它:
kubectl get pod pod-name -o yaml > my-pod.yaml
然后您可以编辑所需的 Pod 规范字段,然后重新部署它:
kubectl apply -f my-pod.yaml
或者,您可以编辑您的Deployment,正如@Arghya Sadhu 在他的回答中已经建议的那样。 Deployment controller 将使用更新的规范为您重新创建 Pods。
是操场环境限制了内核的变化吗
参数?我需要自己安装 minikube 吗?
启用更改不安全的 sysctl 参数?
不是真的。您可以通过重新配置 kubelets 在集群中的每个节点上启用它们。至于更改 kubelet 配置,可能会根据您的 kubernetes 安装而有所不同。如果它是使用 kubeadm 创建的,您只需编辑以下文件:
/etc/systemd/system/kubelet.service.d/10-kubeadm.conf
然后运行:
sudo systemctl daemon-reload
并通过运行重新启动您的 kubelet:
sudo systemctl restart kubelet.service
除了给编辑/启用的 minikube/kubelet 替代方案
不安全的 sysctls,有不同的方法吗?有什么好方法
自定义 pod 的内核参数?
上面已经回答了。
我希望它能澄清您对在 Kubernetes 集群中同时设置 safe 和 unsafe sysctl 的疑虑。