自動修復節點
節點自動修復功能會持續監控節點集區中每個節點的健康狀態。如果節點健康狀態不良,節點自動修復功能會自動修復。這項功能可降低叢集發生中斷和效能下降的機率,並盡量減少叢集的手動維護需求。
建立或更新節點集區時,您可以啟用節點自動修復功能。請注意,您是在節點集區上啟用或停用這項功能,而不是在個別節點上。
健康狀態不良的節點
節點自動修復功能會檢查每個節點的健康狀態,判斷是否需要修復。如果節點回報 Ready
狀態,系統就會將其判定為健康狀態良好。否則,如果節點在特定時間內持續回報健康狀態不佳,系統就會啟動修復程序。
如果連續檢查約 15 分鐘後,發現節點處於 NotReady
狀態,就會出現健康狀態不佳的情況。或者,健康狀態不佳可能是因為開機磁碟空間不足,且這種情況持續約 30 分鐘。
您可以隨時執行 kubectl get nodes
指令,手動檢查節點的健康狀態信號。
節點修復策略
節點自動修復功能會採用特定策略,確保叢集的整體健康狀態,以及應用程式在修復期間的可用性。本節說明節點自動修復功能如何遵守 PodDisruptionBudget
設定、尊重 Pod Termination
Grace Period
,以及採取其他措施,在修復節點時盡量減少叢集的中斷。
榮耀 PodDisruptionBudget
30 分鐘
如果節點需要修復,系統不會立即排除並重新建立節點。節點自動修復功能會遵守 PodDisruptionBudget (PDB) 設定最多 30 分鐘,之後會刪除節點上的所有 Pod。(PDB 設定定義的內容包括特定 Pod 的備用資源數量下限,確保隨時都有足夠的備用資源)。
節點自動修復功能會遵守 PodDisruptionBudget
約 30 分鐘,提供 Pod 安全地重新排程,並在叢集中其他健全節點之間重新分配的機會。這有助於在修復過程中維持所需的應用程式可用性。
超過 30 分鐘的時間限制後,節點自動修復功能會繼續進行修復程序,即使這表示違反 PodDisruptionBudget
也是如此。如果沒有時間限制,且 PodDisruptionBudget
設定會阻止維修所需的逐出作業,維修程序可能會無限期停滯。
遵守 Pod 終止寬限期
節點自動修復功能也會遵守約 30 分鐘的 Pod 終止寬限期。Pod 終止寬限期可讓 Pod 在終止期間安全關機。在寬限期間,節點上的 kubelet 負責執行清理工作,並釋放與該節點上 Pod 相關聯的資源。節點自動修復功能最多會等待 30 分鐘,讓 kubelet 完成這項清理作業。如果超過 30 分鐘,節點就會強制終止,無論 Pod 是否已正常終止。
其他節點修復策略
節點自動修復功能也會實作下列策略:
- 如果有多個節點需要修復,系統會一次修復一個節點,以減少叢集服務中斷的情況,並保護工作負載。
- 如果在修復過程中停用節點自動修復功能,系統仍會繼續修復,直到修復作業成功或失敗為止。
如何啟用及停用節點自動修復功能
建立或更新節點集區時,您可以啟用或停用節點自動修復功能。您可以在節點集區上啟用或停用這項功能,而不是在個別節點上。
為新節點集區啟用自動修復功能
gcloud container azure node-pools create NODE_POOL_NAME \
--cluster CLUSTER_NAME \
--location GOOGLE_CLOUD_LOCATION \
--node-version 1.32.4-gke.200 \
--vm-size VM_SIZE \
--max-pods-per-node 110 \
--min-nodes MIN_NODES \
--max-nodes MAX_NODES \
--azure-availability-zone AZURE_ZONE \
--ssh-public-key SSH_PUBLIC_KEY" \
--subnet-id SUBNET_ID \
--enable-autorepair
更改下列內容:
NODE_POOL_NAME
:節點集區的專屬名稱,例如node-pool-1
CLUSTER_NAME
:Azure 中 GKE 叢集的名稱GOOGLE_CLOUD_LOCATION
:管理叢集的Google Cloud 位置NODE_VERSION
:要在節點集區的每個節點上安裝的 Kubernetes 版本 (例如 「1.32.4-gke.200」)VM_SIZE
:a 支援的 Azure VM 大小MIN_NODES
:節點集區中的節點數量下限。詳情請參閱「叢集自動調度」。MAX_NODES
:節點集區中的節點數量上限AZURE_ZONE
:Azure 可用性區域,GKE on Azure 會在其中啟動節點集區,例如3
SSH_PUBLIC_KEY
:安全殼層公開金鑰的文字。SUBNET_ID
:節點集區子網路的 ID。
為現有節點集區啟用自動修復功能
如要為現有節點集區啟用節點自動修復功能,請執行下列指令:
gcloud container azure node-pools update NODE_POOL_NAME \
--cluster CLUSTER_NAME \
--location GOOGLE_CLOUD_LOCATION \
--enable-autorepair
更改下列內容:
NODE_POOL_NAME
:節點集區的專屬名稱,例如node-pool-1
CLUSTER_NAME
:叢集名稱GOOGLE_CLOUD_LOCATION
:管理叢集的 Google Cloud 區域
停用現有節點集區的自動修復功能
gcloud container azure node-pools update NODE_POOL_NAME \
--cluster CLUSTER_NAME \
--location GOOGLE_CLOUD_LOCATION \
--no-enable-autorepair
更改下列內容:
NODE_POOL_NAME
:節點集區的專屬名稱,例如node-pool-1
CLUSTER_NAME
:叢集名稱GOOGLE_CLOUD_LOCATION
:管理叢集的 Google Cloud 區域
請注意,Azure 上的 GKE 會自動停用節點自動修復功能。停用現有節點集區的節點自動修復功能時,Azure 上的 GKE 會啟動更新節點集區作業。作業會等待現有節點修復作業完成,再繼續進行。
檢查是否已啟用節點自動修復功能
執行下列指令,檢查節點自動修復功能是否已啟用:
gcloud container azure node-pools describe NODE_POOL_NAME \
--cluster CLUSTER_NAME \
--location GOOGLE_CLOUD_LOCATION
更改下列內容:
NODE_POOL_NAME
:節點集區的專屬名稱,例如node-pool-1
CLUSTER_NAME
:叢集名稱GOOGLE_CLOUD_LOCATION
:管理叢集的 Google Cloud 區域
節點修復記錄
如要查看節點集區的修復記錄,請執行下列指令:
gcloud container azure operations list \
--location GOOGLE_CLOUD_LOCATION \
--filter="metadata.verb=repair AND metadata.target=projects/PROJECT_ID/locations/GOOGLE_CLOUD_LOCATION/azureClusters/CLUSTER_NAME/azureNodePools/NODEPOOL_NAME
更改下列內容:
GOOGLE_CLOUD_LOCATION
:管理叢集的支援 Google Cloud 區域,例如us-west1
PROJECT_ID
:您的 Google Cloud 專案CLUSTER_NAME
:叢集名稱NODE_POOL_NAME
:節點集區的專屬名稱,例如node-pool-1
節點集區健康狀態摘要
啟用節點自動修復功能後,您可以執行下列指令,產生節點集區健康狀態摘要:
gcloud container azure node-pools describe NODE_POOL_NAME \
--cluster CLUSTER_NAME \
--location GOOGLE_CLOUD_LOCATION
節點集區健康狀態摘要類似於以下範例:
{ "name": "some-np-name", "version": "some-version", "state": "RUNNING", ... "errors": [ { "message": "1 node(s) is/are identified as unhealthy among 2 total node(s) in the node pool. No node is under repair." } ], }
節點集區健康狀態摘要可協助您瞭解節點集區的目前狀態。在本範例中,摘要包含錯誤訊息,指出節點集區中的其中一個節點狀況不佳。並回報目前沒有任何節點正在進行修復程序。