配置 cgroup 驱动程序

本页面介绍如何配置 kubelet 的 cgroup 驱动程序,以使其与 kubeadm 集群的容器运行时 cgroup 驱动程序匹配。

准备工作

你应该熟悉 Kubernetes 的容器运行时要求

配置容器运行时 cgroup 驱动程序

容器运行时页面解释说,对于基于 kubeadm 的设置,推荐使用 systemd 驱动程序,而不是 kubelet 的默认 cgroupfs 驱动程序,因为 kubeadm 将 kubelet 作为 systemd 服务进行管理。

该页面还提供了如何默认使用 systemd 驱动程序设置多个不同容器运行时的详细信息。

配置 kubelet cgroup 驱动程序

kubeadm 允许你在 kubeadm init 期间传递一个 KubeletConfiguration 结构体。此 KubeletConfiguration 可以包含 cgroupDriver 字段,该字段控制 kubelet 的 cgroup 驱动程序。

显式配置该字段的最小示例

# kubeadm-config.yaml
kind: ClusterConfiguration
apiVersion: kubeadm.k8s.io/v1beta4
kubernetesVersion: v1.21.0
---
kind: KubeletConfiguration
apiVersion: kubelet.config.k8s.io/v1beta1
cgroupDriver: systemd

然后可以将这样的配置文件传递给 kubeadm 命令

kubeadm init --config kubeadm-config.yaml

使用 cgroupfs 驱动程序

要使用 cgroupfs 并防止 kubeadm upgrade 在现有设置中修改 KubeletConfiguration cgroup 驱动程序,你必须明确指定其值。这适用于你不希望未来版本的 kubeadm 默认应用 systemd 驱动程序的情况。

有关如何明确指定该值的详细信息,请参阅下面关于“修改 kubelet ConfigMap”的部分。

如果你希望将容器运行时配置为使用 cgroupfs 驱动程序,你必须参考所选容器运行时的文档。

迁移到 systemd 驱动程序

要将现有 kubeadm 集群的 cgroup 驱动程序从 cgroupfs 原地更改为 systemd,需要执行类似于 kubelet 升级的过程。这必须包括下面列出的两个步骤。

修改 kubelet ConfigMap

  • 调用 kubectl edit cm kubelet-config -n kube-system

  • 修改现有的 cgroupDriver 值或添加一个新字段,如下所示

    cgroupDriver: systemd
    

    此字段必须存在于 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
  • 使用 kubectl uncordon <node-name> 解禁节点

逐个节点执行这些步骤,以确保工作负载有足够的时间调度到不同的节点上。

流程完成后,确保所有节点和工作负载都处于健康状态。

最后修改时间:2025 年 7 月 4 日太平洋标准时间晚上 11:28:添加 NodeLocalCRISocket 升级到 Beta 版的文档 (0135b1b08b)