配置 cgroup 驱动程序

此页面解释了如何配置 kubelet 的 cgroup 驱动程序以匹配 kubeadm 集群的容器运行时 cgroup 驱动程序。

在您开始之前

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

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

容器运行时 页面解释了为什么 systemd 驱动程序比 kubelet 的 默认 cgroupfs 驱动程序更适合基于 kubeadm 的设置,因为 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>

一次在节点上执行这些步骤,以确保工作负载有足够的时间调度到其他节点。

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

上次修改时间:2024 年 7 月 5 日下午 4:06 PST:kubeadm:在所有文档示例中使用 v1beta4 (efc1133fa4)