將節點遷移至 Linux cgroupv2


從 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 子系統有兩種模式:cgroupv1cgroupv2。 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 的節點,請按照下列步驟操作:

  1. 檢查節點的 cgroup 模式。如果叢集的節點已使用 cgroupv2,則無須採取任何動作。
  2. 請參閱「遷移至 cgroup v2」一文,瞭解遷移作業的注意事項,確保工作負載已準備好使用新版 API。
  3. 遷移叢集的節點。

    Autopilot

    明確將叢集節點設為使用 cgroupv2

    gcloud container clusters update CLUSTER_NAME \
        --autoprovisioning-cgroup-mode=v2
    

    CLUSTER_NAME 替換為叢集名稱。

    標準

    1. 如果叢集使用節點自動佈建功能,請執行下列指令,確保透過節點自動佈建功能建立的現有和未來節點集區都使用 cgroupv2

      gcloud container clusters update CLUSTER_NAME \
          --autoprovisioning-cgroup-mode=v2
      

      CLUSTER_NAME 替換為叢集名稱。

    2. 如果是未啟用節點自動佈建功能而建立的現有節點集區,請更新節點集區,在節點系統設定中新增下列項目:

      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. 如果您使用節點自動佈建,且叢集是使用 1.25 版或更早版本建立,請使用下列指令,確保透過節點自動佈建功能建立的現有和未來節點集區都使用 cgroupv1。如果叢集是在執行 1.26 以上版本時建立,則無法將 cgroup 模式設為 cgroupv1

    gcloud container clusters update CLUSTER_NAME \
        --autoprovisioning-cgroup-mode=v1
    

    CLUSTER_NAME 替換為叢集名稱。

  2. 如果是現有的 Standard 節點集區,請更新節點集區,在節點系統設定中新增下列項目:

    linuxConfig:
      cgroupMode: 'CGROUP_MODE_V1'
    

    如果您手動建立節點集區,且未啟用節點自動佈建功能,也必須為新節點集區設定這個節點設定

    詳情請參閱「自訂節點系統設定」。