本頁面說明節點自動修復功能的運作方式,以及如何將這項功能用於 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 節點集區啟用自動修復功能
您可以在個別節點集區啟用節點自動修復功能。
如果標準叢集中現有節點集區的自動修復功能已停用,請按照下列操作說明啟用:
控制台
前往 Google Cloud 控制台的「Google Kubernetes Engine」頁面。
在叢集清單中,按一下您要修改的叢集名稱。
按一下「Nodes」(節點) 分頁標籤。
在「Node Pools」(節點集區) 下方,按一下要修改的節點集區名稱。
在「Node pool details」(節點集區詳細資料) 頁面中,按一下 edit「Edit」(編輯)。
在「Management」(管理) 下方,勾選「Enable auto-repair」(啟用自動修復功能) 核取方塊。
按一下 [儲存]。
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 控制台,確認叢集中的節點集區是否已啟用節點自動修復功能。
控制台
前往 Google Cloud 控制台的「Google Kubernetes Engine」頁面。
在「Google Kubernetes Engine」頁面,按一下要檢查的節點集區叢集名稱。
按一下「Nodes」(節點) 分頁標籤。
在「Node Pools」(節點集區) 下方,按一下要檢查的節點集區名稱。
在「管理」下方的「自動修復」欄位中,確認已啟用自動修復功能。
gcloud
描述節點集區:
gcloud container node-pools describe NODE_POOL_NAME \
--cluster=CLUSTER_NAME
如果已啟用節點自動修復功能,指令輸出內容會包含下列幾行:
management:
...
autoRepair: true
停用節點自動修復功能
您可以使用 gcloud CLI 或 Google Cloud 控制台,停用 Standard 叢集中現有節點集區的節點自動修復功能。
控制台
前往 Google Cloud 控制台的「Google Kubernetes Engine」頁面。
在叢集清單中,按一下您要修改的叢集名稱。
按一下「Nodes」(節點) 分頁標籤。
在「Node Pools」(節點集區) 下方,按一下要修改的節點集區名稱。
在「Node pool details」(節點集區詳細資料) 頁面中,按一下 edit「Edit」(編輯)。
在「管理」下方,取消勾選「啟用自動修復功能」核取方塊。
按一下 [儲存]。
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 會為自動修復事件產生記錄項目。您可以執行下列指令來查看記錄:
列出作業:
gcloud container operations list --location=CONTROL_PLANE_LOCATION將
CONTROL_PLANE_LOCATION替換為叢集控制層的 Compute Engine 位置。如果是區域叢集,請提供區域;如果是可用區叢集,請提供可用區。執行下列指令,找出觸發節點自動修復作業的原因:
gcloud container operations describe OPERATION_NAME --location=CONTROL_PLANE_LOCATION將
OPERATION_NAME替換為前一個指令輸出內容中列出的作業名稱。
在指令的輸出內容中,查看 operationReason,瞭解觸發修復作業的原因。例如,AUTO_REPAIR_LONG_UNHEALTHY 表示節點健康狀態不良達 10 分鐘,因此觸發節點自動修復功能。