配置 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)