從 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 cgroupv2
支援功能在 Kubernetes 1.18 版中以 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 模式。 - GKE 1.31 次要版本會淘汰
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
,取得最新版本。
檢查叢集節點的 cgroup 模式
預設 cgroup 模式取決於叢集或節點集區的類型和版本。如果是 1.26 以上版本,預設值為 cgroupv2
。如果是 1.25 以下版本,預設值為 cgroupv1
:
- 對於使用節點自動佈建功能建立的 Autopilot 叢集和新 Standard 叢集節點集區,cgroup 模式會以初始叢集版本為準。您無法在建立 Autopilot 叢集時設定 cgroup 模式。對於自動佈建的新節點,您無法根據次要版本,將模式設為與預設 cgroup 模式不同的模式。
- 如果是手動建立的標準叢集節點集區,且未啟用節點自動佈建功能,則 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 1.25 以下版本建立的 GKE Autopilot 叢集,在遷移前會持續執行 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
的節點自動遷移至 cgroupv2
(次要版本為 1.33 以上),請明確設定 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'
如果您手動建立節點集區,且未啟用節點自動佈建功能,也必須為新節點集區設定這個節點設定。
詳情請參閱「自訂節點系統設定」。