自動修復節點

本頁面說明節點自動修復功能的運作方式,以及如何將這項功能用於 Standard Google Kubernetes Engine (GKE) 叢集。

節點自動修復功能可讓 GKE 叢集內的節點維持在運作正常的良好狀態。啟用這項功能之後,GKE 會定期檢查叢集內各個節點的健康狀態。如果節點長時間持續未通過健康狀態檢查,GKE 就會針對該節點啟動修復程序。

Autopilot 和 Standard 的設定

Autopilot 叢集一律會自動修復節點。您無法停用這項設定。

在 Standard 叢集中,系統預設會為新的節點集區啟用節點自動修復功能。雖然您可以為現有節點集區停用自動修復功能,但建議保留預設設定。停用自動修復功能可能會導致未預期的結果。舉例來說,如果您在停用自動修復功能時使用 kubectl 刪除健康狀態不良的節點,基礎 VM 執行個體可能會與叢集孤立,而您仍須支付相關費用。如需移除節點,可以改為調整節點集區大小。

修復條件

GKE 會根據節點的健康狀態來決定是否要修復節點。系統會將狀態回報為 Ready 的節點判定健康狀態良好。如果節點在指定的時間門檻內持續回報為健康狀態不佳,GKE 就會觸發修復動作。 健康狀態不佳可能代表下列意義:

  • 節點在指定時間門檻 (約 10 分鐘) 內的連續狀態檢查狀態都回報為 NotReady。
  • 節點在指定時間門檻 (約 10 分鐘) 內未回報任何狀態。
  • 節點在延長時間範圍 (約 30 分鐘) 內,開機磁碟的磁碟空間已用盡。
  • Autopilot 叢集中的節點封鎖時間超過指定時間門檻 (約 10 分鐘)。

您隨時可以使用 kubectl get nodes 指令,手動檢查節點的健康狀態信號。

節點修復程序

如果 GKE 偵測到節點需要修復,就會清空並重新建立節點。這項程序會保留節點的原始名稱。GKE 會等待一小時,讓排空作業完成。如果排空作業未完成,節點會關閉,並建立新節點。

如果有多個節點需要修復,GKE 可能會同時修復節點。GKE 會根據叢集大小和損壞節點數量,平衡維修次數。在較大的叢集中,GKE 會同時修復更多節點,但隨著異常節點數量增加,修復的節點數量會減少。

如果在修復過程中停用節點自動修復功能,系統不會取消進行中的修復作業,而是會繼續修復任何正在修復的節點。

TPU 節點中的節點自動修復功能

如果多主機 TPU 配量節點集區中的 TPU 配量節點健康狀態不良,且需要自動修復,系統會重新建立整個節點集區。如要進一步瞭解 TPU 切片節點條件,請參閱「TPU 切片節點自動修復」。

為現有 Standard 節點集區啟用自動修復功能

您可以在個別節點集區啟用節點自動修復功能。

如果標準叢集中現有節點集區的自動修復功能已停用,請按照下列操作說明啟用:

控制台

  1. 前往 Google Cloud 控制台的「Google Kubernetes Engine」頁面。

    前往「Google Kubernetes Engine」

  2. 在叢集清單中,按一下您要修改的叢集名稱。

  3. 按一下「Nodes」(節點) 分頁標籤。

  4. 在「Node Pools」(節點集區) 下方,按一下要修改的節點集區名稱。

  5. 在「Node pool details」(節點集區詳細資料) 頁面中,按一下 「Edit」(編輯)。

  6. 在「Management」(管理) 下方,勾選「Enable auto-repair」(啟用自動修復功能) 核取方塊。

  7. 按一下 [儲存]。

gcloud

gcloud container node-pools update POOL_NAME \
    --cluster CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION \
    --enable-autorepair

更改下列內容:

  • POOL_NAME:節點集區的名稱。
  • CLUSTER_NAME:Standard 叢集的名稱。
  • CONTROL_PLANE_LOCATION:叢集控制層的 Compute Engine 位置。提供區域叢集的區域,或可用區叢集的可用區。

確認 Standard 節點集區已啟用節點自動修復功能

節點自動修復功能是以節點集區為單位啟用。您可以使用 Google Cloud CLI 或 Google Cloud 控制台,確認叢集中的節點集區是否已啟用節點自動修復功能。

控制台

  1. 前往 Google Cloud 控制台的「Google Kubernetes Engine」頁面。

    前往「Google Kubernetes Engine」

  2. 在「Google Kubernetes Engine」頁面,按一下要檢查的節點集區叢集名稱。

  3. 按一下「Nodes」(節點) 分頁標籤。

  4. 在「Node Pools」(節點集區) 下方,按一下要檢查的節點集區名稱。

  5. 在「管理」下方的「自動修復」欄位中,確認已啟用自動修復功能。

gcloud

描述節點集區:

gcloud container node-pools describe NODE_POOL_NAME \
--cluster=CLUSTER_NAME

如果已啟用節點自動修復功能,指令輸出內容會包含下列幾行:

management:
  ...
  autoRepair: true

停用節點自動修復功能

您可以使用 gcloud CLI 或 Google Cloud 控制台,停用 Standard 叢集中現有節點集區的節點自動修復功能。

控制台

  1. 前往 Google Cloud 控制台的「Google Kubernetes Engine」頁面。

    前往「Google Kubernetes Engine」

  2. 在叢集清單中,按一下您要修改的叢集名稱。

  3. 按一下「Nodes」(節點) 分頁標籤。

  4. 在「Node Pools」(節點集區) 下方,按一下要修改的節點集區名稱。

  5. 在「Node pool details」(節點集區詳細資料) 頁面中,按一下 「Edit」(編輯)。

  6. 在「管理」下方,取消勾選「啟用自動修復功能」核取方塊。

  7. 按一下 [儲存]。

gcloud

gcloud container node-pools update POOL_NAME \
    --cluster CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION \
    --no-enable-autorepair

更改下列內容:

  • POOL_NAME:節點集區的名稱。
  • CLUSTER_NAME:標準叢集名稱。
  • CONTROL_PLANE_LOCATION:叢集控制層的 Compute Engine 位置。提供區域叢集的區域,或可用區叢集的可用區。

取得近期自動修復事件的相關資訊

GKE 會為自動修復事件產生記錄項目。您可以執行下列指令來查看記錄:

  1. 列出作業:

    gcloud container operations list --location=CONTROL_PLANE_LOCATION
    

    將 CONTROL_PLANE_LOCATION 替換為叢集控制層的 Compute Engine 位置。如果是區域叢集,請提供區域;如果是可用區叢集,請提供可用區。

  2. 執行下列指令,找出觸發節點自動修復作業的原因:

    gcloud container operations describe OPERATION_NAME --location=CONTROL_PLANE_LOCATION
    

    將 OPERATION_NAME 替換為前一個指令輸出內容中列出的作業名稱。

在指令的輸出內容中,查看 operationReason,瞭解觸發修復作業的原因。例如,AUTO_REPAIR_LONG_UNHEALTHY 表示節點健康狀態不良達 10 分鐘,因此觸發節點自動修復功能。

後續步驟