本頁面說明如何確保您可以使用節點升級策略變更叢集節點。建議您確認專案是否有足夠資源,可根據所選策略更新 Google Kubernetes Engine (GKE) Standard 節點集區。
節點升級所需的資源
視您選擇的節點策略和設定而定,GKE 可能需要暫時建立額外節點,才能升級節點。因此,GKE 可能需要額外資源才能升級節點集區。
GKE 建立的所有節點 (包括用於升級的節點) 都受限於專案的資源配額、資源可用性,以及預留容量 (適用於具有特定預留項目相似度的節點集區)。
如果您有特殊機型需求和容量限制,強烈建議您確認資源是否充足。您可能需要設定資源需求較少的策略,確保能升級節點,或採取其他動作,例如建立預留項目。詳情請參閱「在資源受限的環境中升級」。
不同升級策略所需的資源
以下章節說明使用可用升級策略時所需的額外資源。如果遇到升級問題,請查看升級作業,並按照操作說明解決升級錯誤。
節點數擴充升級的資源
預設的節點升級策略是升級期間增加節點。節點數擴充升級會建立額外的 VM (如果 maxSurge 設為大於零),然後才會清空及刪除舊節點,因此如果專案資源不足,升級可能會失敗。
如果可用資源少於 maxSurge 中指定的節點數量,則平行升級數量會少於 maxSurge 加上 maxUnavailable。如果沒有額外容量,請參閱「在資源受限的環境中升級」。
下表列舉不同升級行為的範例:
| 升級設定 | 可用資源允許的額外節點數量 | 結果 |
|---|---|---|
| maxSurge:5 maxUnavailable:0 | 5 | 平行升級 5 個節點。 |
| maxSurge:5 maxUnavailable:0 | 2 | 僅平行升級 2 個節點。 |
| maxSurge:5 maxUnavailable:0 | 0 | 升級失敗,因為無法啟動其他節點,且升級設定禁止重新啟動現有節點。GKE 會持續嘗試自動升級,直到作業成功為止。 |
| maxSurge:5 maxUnavailable:1 | 5 | 平行升級 6 個節點,同時確保節點集區只會因升級作業暫時失去一個節點。 |
| maxSurge:5 maxUnavailable:1 | 2 | 僅平行升級 3 個節點,同時確保節點集區不會因升級作業而少去超過一個節點。 |
| maxSurge:5 maxUnavailable:1 | 0 | 一次只升級 1 個節點,方法是以滾動式升級方式重新建立每個節點。 |
藍綠升級資源
藍綠升級會暫時將節點集區中的節點數量增加一倍,這表示節點集區暫時需要兩倍的資源。如果可用資源不足,且您已將節點集區設定為使用這項策略,請改為設定大量升級,以解除升級封鎖。設定這項策略時,請務必設定節點數擴充升級參數,以便與節點集區節點的可用資源搭配使用。詳情請參閱上一節「節點數擴充升級的資源」。
檢查升級作業,確認是否有資源相關的失敗情形
您可以檢查升級作業物件,進一步瞭解升級作業,以及升級失敗情況與原因的相關資訊。如要列出升級作業物件,請執行下列指令:
gcloud container operations list \
--filter="STATUS=DONE AND TYPE=UPGRADE_NODES AND targetLink:https://container.googleapis.com/v1/projects/PROJECT_ID/zones/COMPUTE_ZONE/clusters/CLUSTER_NAME"
更改下列內容:
PROJECT_ID:專案的 ID。 Google CloudCOMPUTE_ZONE:叢集的 Compute Engine 可用區。CLUSTER_NAME:叢集名稱。
如果最近一次升級因資源配額不足而失敗,輸出內容會類似於下列內容:
gcloud container operations describe operation-1234567891234-1abc2d3e
detail: "Insufficient quota to satisfy the request: waiting on IG: instance https://www.googleapis.com/compute/v1/projects/my-project-123/zones/us-central1-a/instances/gke-my-cluster-default-pool-123ab45c-de67\
\ is still CREATING. Last attempt errors: [QUOTA_EXCEEDED] Instance 'gke-my-cluster-default-pool-123ab45c-de67'\
\ creation failed: Quota 'IN_USE_ADDRESSES' exceeded. Limit: 50.0 in region us-central1.\
...
如果原因是預留項目不足,輸出內容會與下列內容相似:
gcloud container operations describe operation-1234567891234-1abc2d3e
detail: "Reservation does not have enough resources for the request: waiting on IG:\
\ instance https://www.googleapis.com/compute/v1/projects/my-project-123/zones/us-central1-a/instances/gke-my-cluster-default-pool-123ab45c-de67\
\ is still CREATING. Last attempt error: [CONDITION_NOT_MET] Instance 'gke-my-cluster-default-pool-123ab45c-de67'\
\ creation failed: Specified reservation 'foo' does not have available resources\
\ for the request."
如果原因是容量不足,您會看到資源可用性錯誤訊息。
出現升級錯誤時的處理方式
如果資源不足導致升級失敗,請嘗試下列步驟:
- 建議您採用較不耗用資源的升級策略。如果您使用的是藍綠升級,請考慮改用激增升級。
- 檢查專案中是否有任何耗用資源且不再需要的 Compute Engine 資源。如果有,請移除那些資源,然後再次進行升級作業。
- 如果前兩個步驟無法解除升級封鎖,請要求提高配額,或增加特定預訂的規模。
- 如果您在資源受限的環境中運作,例如有特殊機型需求和容量限制,請參閱下一節,瞭解如何解除升級封鎖。
在資源受限的環境中升級
如果 Google Cloud 的特定資源容量有限,而節點集區正在使用該資源,建議您預留 GPU 和 TPU。 如果節點集區僅含 CPU,建議您使用固定容量升級 CPU。
這兩種策略有助於確保您有足夠的資源執行版本升級。如果資源不足,您可能需要取得更多容量,才能升級節點。
如果沒有額外容量,就無法使用藍綠升級。
在資源受限的環境中使用激增升級時,請注意下列事項:
- 使用節點數擴充升級時,需要額外節點,這在資源受限的環境中可能難以實現。如要進一步瞭解這項設定,請參閱「
maxSurge:GKE 會先建立新的超額節點,再移除現有節點」。 - 如果將
maxUnavailable欄位設為大於零的值,且容量不是來自預留項目,在某些情況下,GKE 會在升級節點時暫時釋出節點容量。也就是說,如果容量有限,您可能會失去容量。詳情請參閱「maxUnavailable:GKE 會讓現有節點無法使用,以便重新建立節點」。
請根據您是否為需要升級的節點集區預留資源,採取下列指引。
升級並採用固定容量
如果是 CPU,如要在資源受限的環境中升級,請使用固定容量。如要這麼做,請使用激增升級,並將 maxUnavailable 設定設為大於零的值。詳情請參閱「maxUnavailable:GKE 會讓現有節點無法使用,以便重新建立節點」。
使用固定容量升級時,您可以在無法取得任何額外容量的情況下執行升級,並避免在升級期間失去現有容量。
透過預留項目升級,但容量有限
如要在容量受限的環境中升級 GPU 和 TPU,請使用預留項目,並調整激增升級設定,以提升速度和穩定性。
如果預留項目還有額外容量,可以使用 maxSurge 建立激增節點。請根據一次要中斷的節點數量,以及額外容量多寡,設定 maxSurge。舉例來說,如果您一次只想中斷一個節點,或是只能建立一個額外節點,請設定 maxSurge=1;maxUnavailable=0。
如果沒有額外運算資源,您可以使用 maxUnavailable 搭配 maxSurge=0;maxUnavailable=1 等設定,因為運算資源已預留。這項設定會一次中斷一個節點,並重新建立節點來進行更新。建議您採用這種方法,為執行訓練和推論工作負載的節點執行主機維護作業。