設定 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> 取消封鎖節點

一次在一個節點上執行這些步驟,以確保工作負載有足夠的時間排程在不同的節點上。

程序完成後,請確保所有節點和工作負載都處於健康狀態。

上次修改於 2024 年 9 月 13 日下午 4:59 PST:重新組織 kubeadm 節點任務 (c8bb00db5d)