節點升級策略


本頁面將討論可搭配 Google Kubernetes Engine (GKE) 叢集使用的節點升級策略。

在 GKE Standard 叢集中,您可以為每個節點集區設定下列其中一種節點升級策略:

  • 節點數擴充升級:節點會在滾動式升級期間升級。您可以控管一次升級的節點數量,以及升級對工作負載造成的中斷程度。
  • 藍綠升級:現有節點會保持可用狀態,以便在新的節點設定上驗證工作負載時進行回溯。

在下列特定情境中,GKE 會選擇以下策略:

  • 在 Autopilot 叢集中,GKE 會使用突波升級。詳情請參閱「Autopilot 叢集升級」頁面的「升級期間的節點數量」一節。
  • 對於採用 Dynamic Workload Scheduler 的彈性啟動節點,GKE 會使用短期升級。彈性啟動搭配佈建佇列支援新旗標,這些旗標是彈性啟動預先發布版的一部分。

您可以為標準叢集節點集區選擇升級策略,挑選合適的程序,在速度、工作負載中斷、風險降低和最佳成本效益之間達到平衡。如要進一步瞭解哪種節點升級策略適合您的環境,請參閱「選擇大量升級」和「選擇藍綠升級」。

無論採用哪種策略,您都可以設定升級設定,根據環境需求最佳化升級程序。詳情請參閱「設定所選的升級策略」。請確認您有足夠的配額、資源可用性或預訂容量,可使用所選策略升級節點。詳情請參閱「確保節點升級的資源」。

節點數擴充升級

突增升級是預設的升級策略,最適合可處理漸進式變更的應用程式。突波升級會使用滾動式方法升級節點,順序未定義。選擇可建立的新增節點數量 (使用 maxSurge) 和可同時中斷的現有節點數量 (使用 maxUnavailable),在速度和中斷之間取得最佳平衡。

此外,升級期間,叢集自動調整功能會一併運作,防止節點變更。

為環境選擇突波升級

如果您重視成本最佳化,且工作負載可容忍在 60 分鐘內關閉,建議為節點集區選擇突增升級。

突增升級最適合下列情境:

  • 如要盡量加快升級速度。
  • 如果工作負載較能容忍中斷,且可接受最多 60 分鐘的正常終止時間。
  • 如要盡量減少建立新節點,以控管成本。

GKE 使用節點數擴充升級的時機

啟用後,發生下列類型的變更時,GKE 會使用節點數擴充升級:

其他變更 (包括將更新套用至現有節點集區的節點標籤和汙點) 不會使用大量升級,因為不需要重新建立節點。

瞭解節點數擴充升級設定

使用突波升級設定,在叢集維護期間,為節點集區選取適當的速度和中斷平衡。您可以變更 Standard 節點集區的節點數擴充升級參數,藉此調整 GKE 嘗試一次升級的節點數量。

升級期間的行為取決於 maxSurgemaxUnavailable 設定,這些設定會決定在滾動式時間範圍內,有多少節點會同時升級,並執行上述步驟。

maxSurge:GKE 會先建立新的節點,再移除現有節點

設定 maxSurge,選擇在升級期間可新增至節點集區的節點數擴充上限 (每個可用區),提高現有節點上執行的工作負載立即遷移至新節點的可能性。預設值為 1。如要升級一個節點,GKE 會執行下列步驟:

  1. 佈建新節點。
  2. 等待新節點準備就緒。
  3. 限制現有節點。
  4. 排空現有節點,並遵循 PodDisruptionBudgetGracefulTerminationPeriod 設定,最多一小時。一小時後,系統會強制撤銷所有剩餘的 Pod,以便繼續升級。
  5. 刪除現有節點。

如要讓 GKE 建立突增節點,專案必須有資源可暫時建立額外節點。如果沒有額外容量,GKE 會等到資源可用時,才開始升級節點。詳情請參閱「資源:升級至尖峰時段」。

maxUnavailable:GKE 會讓現有節點無法使用,以便重新建立節點

設定 maxUnavailable,選擇每個區域在升級期間可同時無法使用的節點數量上限。預設值為零。 如果沒有其他節點有容量,在現有節點上執行的工作負載可能需要等待現有節點升級。如要升級單一節點,GKE 會執行下列步驟:

  1. 隔離現有節點。
  2. 排空現有節點,並遵循 PodDisruptionBudgetGracefulTerminationPeriod 設定,最多一小時。一小時後,系統會強制撤銷所有剩餘的 Pod,以便繼續升級。
  3. 使用新設定重新建立現有節點。
  4. 等待現有節點準備就緒。
  5. 取消現有升級節點的封鎖。

當 GKE 重新建立現有節點時,如果容量不是來自預留資源,GKE 會暫時釋出節點容量。也就是說,如果容量有限,您可能會失去現有容量。因此,如果環境的資源有限,只有在使用預留節點時,才建議使用這項設定。詳情請參閱「在資源受限的環境中升級」。

maxSurgemaxUnavailable 設定的使用範例

舉例來說,假設 GKE 叢集有一個單一區域節點集區,其中有 5 個節點,且節點數擴充升級設定如下:maxSurge=2;maxUnavailable=1

使用這個節點集區進行節點數擴充升級時,GKE 會在滾動式視窗中建立兩個升級節點,且一次最多中斷一個現有節點。升級節點準備就緒後,GKE 最多會關閉三個現有節點。在升級過程中,節點集區會包含四到七個節點。

節點數擴充升級設定注意事項

設定尖峰升級設定前,請先考量以下資訊:

調整節點數擴充升級設定,在速度和中斷之間取得平衡

下表列出四種不同的升級設定檔示例,協助您瞭解不同的設定:

說明 設定 常見用途
平衡 (預設):速度較慢,但干擾程度最低 maxSurge=1 maxUnavailable=0 大部分的工作負載
快速、無尖峰資源、最擾亂 maxSurge=0 maxUnavailable=20 工作完成後的大型節點集區
速度快、資源充足,且干擾較少 maxSurge=20 maxUnavailable=0 大型節點集區
最慢、中斷、沒有尖峰資源 maxSurge=0 maxUnavailable=1 資源受限的節點集區 (含預留項目)

平衡 (預設)

如要以最簡單的方式善用升級尖峰,請使用預設設定 maxSurge=1;maxUnavailable=0.。使用這項設定時,升級作業會緩慢進行,一次只會新增一個尖峰節點,也就是一次只升級一個節點。Pod 可立即在新節點上重新啟動。這項設定只需要資源暫時建立一個新節點。

快速且無尖峰資源

如果節點集區很大,且工作負載不會因中斷而受到影響 (例如已完成的批次工作),請使用下列設定盡量提高速度,且不使用任何額外資源:maxSurge=0;maxUnavailable=20。這項設定不會啟動額外的突增節點,且允許同時升級 20 個節點。

快速且干擾較少

如果工作負載容易中斷,且您已設定 PodDisruptionBudgets (PDB),但未使用 externalTrafficPolicy: Local (不適用於平行節點排空),則可使用 maxSurge=20;maxUnavailable=0 加快升級速度。這項設定會平行升級 20 個節點,而 PDB 會限制在特定時間可排空的 Pod 數量。雖然 Pod 中斷預算的設定可能有所不同,但如果您為節點集區中執行的一或多個工作負載建立 Pod 中斷預算,並將 maxUnavailable=1 設為 1,則一次只能逐出這些工作負載的一個 Pod,進而限制整個升級作業的平行處理能力。這項設定需要資源暫時建立 20 個新節點。

緩慢但沒有尖峰資源

如果無法使用任何額外資源,可以透過 maxSurge=0;maxUnavailable=1 一次重建一個節點。

控制進行中的節點數擴充升級

使用突波升級時,您可以在升級過程中透過指令進行部分控制。如要進一步控管升級程序,建議使用藍綠升級

取消 (暫停) 節點數擴充升級

升級期間,您隨時可以取消進行中的升級作業。取消升級會暫停升級作業,GKE 不會升級新節點,但不會自動將已升級的節點還原為舊版。取消升級後,您可以繼續復原

取消升級時,GKE 會對每個節點執行下列動作:

  • 已開始升級作業的節點會完成升級。
  • 尚未開始升級的節點不會進行升級。
  • 已成功完成升級的節點不受影響,也不會復原到之前的版本。

也就是說,節點集區可能最終會處於節點執行兩個不同版本的狀態。如果節點集區已啟用自動升級功能,系統可以再次排定節點集區的自動升級作業,將節點集區中執行舊版的所有節點升級。

瞭解如何取消節點集區升級作業

繼續節點數擴充升級程序

如果節點集區升級作業已取消,且部分節點已升級,您可以繼續升級,完成節點集區的升級程序。這會升級原始作業中未升級的任何剩餘節點。瞭解如何繼續升級節點集區

復原節點數擴充升級

如果節點集區只升級了一部分,您可以將節點集區復原到先前的狀態。節點集區成功升級後就不能復原。尚未開始升級的節點不受影響。 瞭解如何復原節點集區升級

如果想在升級完成後將節點集區降級回先前的版本,請參閱降級節點集區

藍綠升級

藍綠升級是預設的突增升級策略以外的替代策略。使用藍綠升級時,GKE 會先建立一組新的節點資源 (「綠色」節點),並採用新的節點設定,然後再將原始資源 (「藍色」節點) 上的工作負載逐出。如果需要回溯工作負載,GKE 會保留「藍色」資源,直到達到浸泡時間為止。您可以根據環境需求調整升級步調和浸泡時間。

採用這項策略時,您可進一步掌控升級程序。如有需要,您可以復原正在進行的升級作業,因為升級期間會保留原始環境。不過,這種升級策略也需要更多資源。由於系統會複製原始環境,因此節點集區在升級期間會使用兩倍的資源。

為環境選擇藍綠升級

如果您有高可用性的生產工作負載,且工作負載無法容忍升級,因此需要能夠快速復原,而且可以接受暫時增加費用,建議您為節點集區選擇藍綠升級。

藍綠升級最適合下列情境:

  • 如果想逐步推出,以盡量降低風險,且需要超過 60 分鐘的正常終止時間。
  • 如果工作負載較無法容忍中斷。
  • 如果可接受因資源用量增加而導致的暫時性費用增加。

GKE 何時會使用藍綠升級

對於 GKE 節點,有不同類型的設定變更需要重新建立節點。啟用後,如果發生下列類型的變更,GKE 會使用藍綠升級:

如果其他功能需要重新建立節點,系統會使用 Surge 升級。詳情請參閱「使用升級尖峰期」。

藍綠升級的階段

透過藍綠升級,您可以透過下列方式自訂及控管程序:

本節說明升級程序的各個階段。您可以透過升級設定調整階段的運作方式,並使用指令控管升級程序

階段 1:建立綠色集區

在這個階段,系統會為目標集區下的每個區域建立一組新的代管執行個體群組 (MIG),稱為「綠色」集區,並採用新的節點設定 (新版本或映像檔類型)。

系統會先檢查配額,再開始佈建新的綠色資源。

在這個階段,叢集自動配置器會停止擴大或縮減原始 MIG (稱為藍色集區)。綠色集區只能在這個階段擴充。

在這個階段,您可以視需要取消升級。取消藍綠升級時,升級作業會在目前階段暫停。取消後,你可以恢復回溯。在這個階段,回溯作業會刪除綠色集區。

階段 2:隔離藍色集區

在這個階段,藍色集區 (現有 MIG) 中的所有原始節點都會遭到隔離 (標示為無法排程)。現有工作負載會繼續執行,但系統不會在現有節點上排定新的工作負載。

在這個階段,您可以視需要取消升級。取消藍綠升級時,升級作業會在目前階段暫停。取消後,你可以恢復回溯。在這個階段,回溯作業會取消藍色集區的封鎖,並刪除綠色集區。

階段 3:排空藍色集區

在這個階段,藍色集區 (現有 MIG) 中的原始節點會分批排空。Kubernetes 清空節點時,會將驅逐要求傳送至節點上執行的所有 Pod。系統會重新排定 Pod 的時間。如果 Pod 違反 PodDisruptionBudget,或在排空期間 terminationGracePeriodSeconds 過長,系統會在刪除節點時,於「Delete blue pool」階段刪除這些 Pod。您可以使用 BATCH_SOAK_DURATIONNODE_POOL_SOAK_DURATION 延長 Pod 刪除前的時間,詳情請參閱本文和下一節。

您可以透過下列任一設定控制批次大小:

  • BATCH_NODE_COUNT:批次作業中要排除的節點數量絕對值。
  • BATCH_PERCENT:批次作業中要排除的節點百分比,以介於 0 到 1 (含) 之間的小數表示。如果百分比不是節點的整數,GKE 會向下捨入至最接近的節點百分比,最低值為 1 個節點。

如果這兩項設定的任一項設為零,GKE 就會略過這個階段,並繼續進行「浸泡節點集區」階段。

此外,您可以使用 BATCH_SOAK_DURATION 控制每批排水管浸泡的時間長度。這段時間以秒為單位,預設為零秒。

在這個階段,您仍可視需要取消升級。取消藍綠升級時,升級作業會在目前階段暫停。取消後,你可以恢復回溯。在此階段,回溯作業會停止排空藍色集區,並取消藍色集區的封鎖。然後,工作負載可以重新排定在藍色集區上 (不保證),綠色集區則會遭到刪除。

階段 4:浸泡節點集區

這個階段是用來驗證藍色集區節點排空後,工作負載的健康狀態。

浸泡時間以秒為單位,並使用 NODE_POOL_SOAK_DURATION 設定。預設為一小時 (3600 秒)。如果總浸泡時間達到 7 天 (604,800 秒),系統會立即開始刪除藍色集區階段

總浸泡時間是 NODE_POOL_SOAK_DURATION 的總和,加上 BATCH_SOAK_DURATION 乘以批次數,批次數由 BATCH_NODE_COUNTBATCH_PERCENT 決定。

在這個階段,您可以完成升級,略過剩餘的測試時間。系統會立即開始移除藍色集區節點。

如有需要,您仍可取消升級。 取消藍綠升級時,升級作業會在目前階段暫停。取消後,你可以恢復回溯

在這個階段,叢集自動配置器現在可以正常擴充或縮減綠色集區。

階段 5:刪除藍色集區

浸泡時間到期後,藍色集區節點會從目標集區中移除。這個階段無法暫停。此外,這個階段不會使用驅逐功能,而是嘗試刪除 Pod。與逐出不同,刪除作業不會遵守 PDB,而是強制刪除 Pod。刪除作業會將 Pod 的 terminationGracePeriodSeconds 時間上限設為 60 分鐘。最後一次嘗試刪除剩餘 Pod 後,系統會從節點集區中刪除藍色集區節點。

這個階段完成後,節點集區就只會留下採用更新設定 (版本或映像檔類型) 的新節點。

叢集自動配置器如何搭配藍綠升級運作

在藍綠升級的各個階段中,原始「藍色」集區不會向上或向下擴充。建立新的「綠色」集區後,只能擴充至「浸泡節點集區階段」,之後才能擴充或縮減。如果回溯升級,原始的「藍色」集區可能會在這個程序中擴充,以因應額外容量需求。

控制進行中的藍綠升級

採用藍綠升級時,您可以在升級期間使用指令控管升級作業。舉例來說,如果您判斷工作負載需要回溯至舊節點設定,就能高度掌控這個程序。

取消 (暫停) 藍綠升級

取消藍綠升級時,升級作業會在目前階段暫停。除了「刪除藍色集區」階段外,這個指令可用於所有階段。取消後,節點集區會根據發出要求時的階段,暫停在中間狀態。

瞭解如何取消節點集區升級

取消升級後,您可以選擇以下兩種做法:繼續回溯

繼續藍綠升級

如果確定可以繼續升級,請恢復升級作業。

如果繼續升級,升級程序會從暫停時的中間階段繼續進行。如要瞭解如何繼續升級節點集區,請參閱「繼續升級節點集區」。

復原藍綠升級

如果您判斷升級不應繼續進行,並想將節點集區恢復原狀,可以執行復原作業。如要瞭解如何復原節點集區升級,請參閱復原節點集區升級

透過回溯工作流程,系統會反向執行程序,將節點集區還原至原始狀態。藍色集區會解除封鎖,以便重新排定工作負載。在此期間,叢集自動配置器可能會視需要擴充藍色集區。綠色集區會排空並刪除。

如果想在升級完成後將節點集區降級回先前的版本,請參閱降級節點集區

完成藍綠升級

浸泡階段,如果您判斷工作負載不需要在新節點設定上進行進一步驗證,且可以移除舊節點,即可完成升級。完成升級後,系統會略過其餘的浸泡階段,並繼續進行刪除藍色集區階段

如要進一步瞭解如何使用 complete 指令,請參閱「完成藍綠節點集區升級」。

短期升級 (僅適用於彈性啟動和佇列佈建)

短期升級是節點升級策略,僅適用於使用彈性啟動節點和使用排隊佈建的節點 (1.32.2-gke.1652000 以上版本),這兩者都採用 Dynamic Workload Scheduler。如要進一步瞭解使用短期升級的節點,請參閱「使用 Dynamic Workload Scheduler 取得 GPU」一文。

GKE 會對 Standard 節點集區和 Autopilot 叢集中的節點群組,採用短期升級策略。

採用這項策略時,GKE 會升級這些受限的執行階段節點,不會中斷現有工作負載。這項策略的運作方式如下:

  1. 現有節點會持續運作,直到遭到先占為止。
  2. 新節點會使用新的節點設定。
  3. 節點最多會在七天內,從執行現有設定轉換為執行新設定。

GKE 會自動為彈性啟動節點設定這項策略。這項策略沒有任何設定。

GKE 使用短期升級時機

GKE 會自動將彈性啟動節點設為使用短期升級。如果節點只使用排隊佈建,但執行於 GKE 1.32.2-gke.1652000 以上版本的叢集,也會使用短期升級。

對於使用短期升級的 Autopilot 叢集中的標準節點集區和節點群組,如果原本會使用突增升級,GKE 就會改用這項策略。除了節點升級 (版本變更) 之外,GKE 也會使用短期升級進行其他類型的節點更新,類似於節點數擴充升級。詳情請參閱「使用突增升級時機」一文。

後續步驟