配置 cgroup 驱动
你应该熟悉 Kubernetes 的容器运行时需求。
容器运行时页面提到: 由于 kubeadm 把 kubelet 视为一个系统服务来管理,所以对基于 kubeadm 的安装, 我们推荐使用 systemd
驱动,不推荐 cgroupfs
驱动。
此页还详述了如何安装若干不同的容器运行时,并将 systemd
设为其默认驱动。
kubeadm 支持在执行 kubeadm init
时,传递一个 KubeletConfiguration
结构体。 KubeletConfiguration
包含 cgroupDriver
字段,可用于控制 kubelet 的 cgroup 驱动。
说明: 在版本 1.22 中,如果用户没有在 KubeletConfiguration
中设置 cgroupDriver
字段, kubeadm init
会将它设置为默认值 systemd
。
这是一个最小化的示例,其中显式的配置了此字段:
说明:
Kubeadm 对集群所有的节点,使用相同的 。 KubeletConfiguration
存放于 kube-system
命名空间下的某个 ConfigMap 对象中。
执行 init
、join
和 upgrade
等子命令会促使 kubeadm 将 KubeletConfiguration
写入到文件 /var/lib/kubelet/config.yaml
中, 继而把它传递给本地节点的 kubelet。
使用 cgroupfs
驱动
如仍需使用 cgroupfs
且要防止 kubeadm upgrade
修改现有系统中 KubeletConfiguration
的 cgroup 驱动,你必须显式声明它的值。 此方法应对的场景为:在将来某个版本的 kubeadm 中,你不想使用默认的 systemd
驱动。
参阅以下章节“修改 kubelet 的 ConfigMap ”,了解显式设置该值的方法。
如果你希望配置容器运行时来使用 驱动, 则必须参考所选容器运行时的文档。
说明: 还有一种方法,可以用已配置了 systemd
的新节点替换掉集群中的老节点。 按这种方法,在加入新节点、确保工作负载可以安全迁移到新节点、及至删除旧节点这一系列操作之前, 只需执行以下第一个步骤。
运行
kubectl edit cm kubelet-config -n kube-system
。修改现有
cgroupDriver
的值,或者新增如下式样的字段:该字段必须出现在 ConfigMap 的
kubelet:
小节下。
更新所有节点的 cgroup 驱动
对于集群中的每一个节点:
- 执行命令
kubectl drain <node-name> --ignore-daemonsets
,以 腾空节点 - 执行命令
systemctl stop kubelet
,以停止 kubelet - 修改容器运行时 cgroup 驱动为
systemd
- 在文件
/var/lib/kubelet/config.yaml
中添加设置cgroupDriver: systemd
- 启动容器运行时
- 执行命令
systemctl start kubelet
,以启动 kubelet - 执行命令 ,以
在节点上依次执行上述步骤,确保工作负载有充足的时间被调度到其他节点。