自動修復節點

節點自動修復功能會持續監控節點集區中每個節點的健康狀態。如果節點健康狀態不良,節點自動修復功能會自動修復。這項功能可降低叢集發生中斷和效能下降的機率,並盡量減少叢集的手動維護需求。

建立或更新節點集區時,您可以啟用節點自動修復功能。請注意,您是在節點集區上啟用或停用這項功能,而不是在個別節點上。

健康狀態不良的節點

節點自動修復功能會檢查每個節點的健康狀態,判斷是否需要修復。如果節點回報 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."
    }
  ],
}

節點集區健康狀態摘要可協助您瞭解節點集區的目前狀態。在本範例中,摘要包含錯誤訊息,指出節點集區中的其中一個節點狀況不佳。並回報目前沒有任何節點正在進行修復程序。