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

  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 的節點自動遷移至次要版本為 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. 如果您使用自動佈建節點,且叢集建立時執行的版本為 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'
    

    您也必須為手動建立的新節點集區設定這項節點設定,而不使用自動佈建節點功能。

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

後續步驟