設定 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 驅動程式。
注意
在 v1.22 及更新版本中,如果使用者未在 KubeletConfiguration
下設定 cgroupDriver
欄位,kubeadm 會將其預設為 systemd
。
在 Kubernetes v1.28 中,您可以啟用 cgroup 驅動程式的自動偵測作為 Alpha 功能。請參閱 systemd 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
注意
Kubeadm 對叢集中的所有節點使用相同的 KubeletConfiguration
。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」的章節,以瞭解如何明確指定值。
如果您希望設定容器執行期以使用 cgroupfs
驅動程式,則必須參考您選擇的容器執行期的文件。
遷移到 systemd
驅動程式
若要將現有 kubeadm 叢集的 cgroup 驅動程式從 cgroupfs
就地變更為 systemd
,則需要類似於 kubelet 升級的程序。這必須包含以下概述的兩個步驟。
注意
或者,可以將叢集中的舊節點替換為使用systemd
驅動程式的新節點。這需要在加入新節點之前僅執行以下第一個步驟,並確保工作負載可以在刪除舊節點之前安全地移動到新節點。修改 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>
取消封鎖節點
一次在一個節點上執行這些步驟,以確保工作負載有足夠的時間排程在不同的節點上。
程序完成後,請確保所有節點和工作負載都處於健康狀態。