從 1.33 版開始,Google Kubernetes Engine (GKE) 會將執行 cgroupv1 的叢集遷移到 cgroupv2。本頁說明如何執行下列操作:
- 檢查叢集節點執行的 cgroup 模式,以及工作負載是否可能受到 cgroup 模式轉換影響。
- 將 GKE Autopilot 叢集節點或 Standard 叢集節點集區遷移至
cgroupv2。 - 暫時選擇不讓 GKE 使用
cgroupv1至cgroupv2自動遷移節點。如果叢集執行的工作負載可能會受到 cgroup 模式轉換的影響,請按照下列操作說明進行。
如果您知道工作負載在 cgroupv2 上正常運作,或不受 cgroup 模式設定影響,可以略過本頁。從 1.33 版開始,GKE 會自動將執行 cgroupv1 的叢集遷移到 cgroupv2。
關於 Linux 控制群組
kubelet 和容器執行階段會使用 Linux 核心控制群組 (cgroups) 進行資源管理,例如限制 Pod 中每個容器可存取的 CPU 或記憶體用量。核心中的 cgroup 子系統有兩種模式:cgroupv1 和 cgroupv2。Kubernetes 於 1.18 版推出 cgroupv2 的 Alpha 版,1.22 版推出 Beta 版,1.25 版則推出正式發布。詳情請參閱 Kubernetes cgroups v2 說明文件。
如要瞭解如何為 Standard 叢集設定 cgroup 模式,請參閱「Linux cgroup 模式設定選項」。
GKE 如何轉換至 cgroupv2
請參閱下列時間表,瞭解 GKE 如何將現有叢集轉換為使用 cgroupv2:
- 如果是 1.26 之前的版本,節點預設會使用
cgroupv1。如果是 1.26 以上版本,新節點預設會使用cgroupv2。現有節點不會有任何變更。如要進一步瞭解 GKE 叢集預設執行的 cgroup 模式,請參閱「檢查叢集節點的 cgroup 模式」。 - 在 1.31 子版本中,GKE 會淘汰
cgroupv1。 - 從 1.33 版開始,GKE 會將執行
cgroupv1的叢集遷移至cgroupv2。如要暫時避免自動遷移,請明確指定節點集區使用cgroupv1。 - GKE 1.35 子版本將移除
cgroupv1的支援。
如要瞭解自動升級至後續子版本 (例如 1.31 和 1.33) 的大致時間,請參閱「發布管道預估時程」。
事前準備
開始之前,請確認您已執行下列工作:
- 啟用 Google Kubernetes Engine API。 啟用 Google Kubernetes Engine API
- 如要使用 Google Cloud CLI 執行這項工作,請安裝並初始化 gcloud CLI。如果您先前已安裝 gcloud CLI,請執行
gcloud components update指令,取得最新版本。較舊的 gcloud CLI 版本可能不支援執行本文件中的指令。
檢查叢集節點的 cgroup 模式
預設 cgroup 模式取決於叢集或節點集區的類型和版本。如果是 1.26 以上版本,預設值為 cgroupv2。如果是 1.25 以下版本,預設值為 cgroupv1:
- 如果是 Autopilot 叢集和透過自動佈建節點建立的新 Standard 叢集節點集區,cgroup 模式會依據初始叢集版本而定。建立 Autopilot 叢集時,無法設定 cgroup 模式。對於新自動佈建的節點,您無法根據子版本,將模式設為與預設 cgroup 模式不同的模式。
- 如果手動建立 Standard 叢集節點集區,但未啟用自動佈建節點功能,cgroup 模式會依據初始節點集區版本或自訂節點系統設定而定。
如要查看 cgroup 模式,請按照叢集模式的操作說明進行。
Autopilot
執行下列指令:
gcloud container clusters describe CLUSTER_NAME \
--format='value(nodePools[0].config.effectiveCgroupMode)'
將 CLUSTER_NAME 替換為叢集名稱。
如果輸出內容為 EFFECTIVE_CGROUP_MODE_V2,表示叢集正在 cgroupv2 上執行。
如果輸出內容為 EFFECTIVE_CGROUP_MODE_V1,表示叢集正在 cgroupv1 上執行。
如果 GKE Autopilot 叢集最初是使用 GKE 1.25 以下版本建立,則在遷移前會執行 cgroupv1。
標準
使用 GKE Standard 叢集時,cgroup 模式是在節點集區層級設定。如要檢查個別節點集區的模式,請按照操作說明驗證 cgroup 設定。如果叢集的節點已使用 cgroupv2,則無須採取進一步行動。
將節點遷移至 cgroupv2
建議您在 GKE 於 1.33 以上版本自動遷移現有節點前,先自行遷移。
如要遷移執行 cgroupv1 的節點,請按照下列步驟操作:
- 檢查節點的 cgroup 模式。如果叢集的節點已使用
cgroupv2,則無須採取任何行動。 - 請參閱「遷移至 cgroup v2」一文,瞭解遷移作業的注意事項,確保工作負載已準備好使用新版 API。
遷移叢集的節點。
Autopilot
明確將叢集的節點設為使用
cgroupv2:gcloud container clusters update CLUSTER_NAME \ --autoprovisioning-cgroup-mode=v2將
CLUSTER_NAME替換為叢集名稱。標準
如果您對叢集使用自動佈建節點功能,請執行下列指令,確保透過自動佈建節點功能建立的現有和未來節點集區使用
cgroupv2:gcloud container clusters update CLUSTER_NAME \ --autoprovisioning-cgroup-mode=v2將
CLUSTER_NAME替換為叢集名稱。如果是未啟用自動佈建節點功能而建立的現有節點集區,請更新節點集區,在節點系統設定中新增下列項目:
linuxConfig: cgroupMode: 'CGROUP_MODE_V2'詳情請參閱「自訂節點系統設定」。
手動建立新節點集區時,如果未啟用節點自動佈建功能,GKE 預設會使用
cgroupv2。
暫時停用自動遷移至 cgroupv2
如要暫時避免執行 cgroupv1 的節點自動遷移至次要版本為 1.33 以上的 cgroupv2,您必須明確設定 cgroupv1。如果將節點遷移至 cgroupv2 導致叢集工作負載發生問題,您也可以按照這些操作說明暫時還原至 cgroupv1。
Autopilot
如果叢集原本是使用 1.25 以下版本建立,請執行下列指令。如果叢集是在執行 1.26 以上版本時建立,則無法將 cgroup 模式設為 cgroupv1。
明確將叢集的節點設為使用 cgroupv1:
gcloud container clusters update CLUSTER_NAME \
--autoprovisioning-cgroup-mode=v1
將 CLUSTER_NAME 替換為叢集名稱。
標準
如要繼續使用搭載 1.33 以上版本的 GKE Standard 叢集節點集區執行 cgroupv1,請按照下列步驟操作:
如果您使用自動佈建節點,且叢集建立時執行的版本為 1.25 以下,請使用下列指令,確保透過自動佈建節點建立的現有和未來節點集區都使用
cgroupv1。如果叢集是在執行 1.26 以上版本時建立,則無法將 cgroup 模式設為cgroupv1:gcloud container clusters update CLUSTER_NAME \ --autoprovisioning-cgroup-mode=v1將
CLUSTER_NAME替換為叢集名稱。如果是現有的 Standard 節點集區,請更新節點集區,在節點系統設定中新增下列項目:
linuxConfig: cgroupMode: 'CGROUP_MODE_V1'您也必須為手動建立的新節點集區設定這項節點設定,而不使用自動佈建節點功能。
詳情請參閱「自訂節點系統設定」。
後續步驟
- 瞭解如何自訂節點系統設定。
- 進一步瞭解節點集區自動建立功能。
- 瞭解如何在 GKE 中設定 Pod 爆量。
- 瞭解如何輪替叢集憑證。
- 進一步瞭解節點集區升級策略。