本頁面將討論可搭配 Google Kubernetes Engine (GKE) 叢集使用的節點升級策略。
在 GKE Standard 叢集中,您可以為每個節點集區設定下列其中一種節點升級策略:
- 節點數擴充升級:節點會在滾動式升級期間升級。您可以控管一次升級的節點數量,以及升級對工作負載造成的中斷程度。
- 藍綠升級:現有節點會保持可用狀態,以便在新的節點設定上驗證工作負載時進行回溯。
在下列特定情境中,GKE 會選擇以下策略:
- 在 Autopilot 叢集中,GKE 會使用突波升級。詳情請參閱「Autopilot 叢集升級」頁面的「升級期間的節點數量」一節。
- 對於採用 Dynamic Workload Scheduler 的彈性啟動節點,GKE 會使用短期升級。彈性啟動搭配佈建佇列支援新旗標,這些旗標是彈性啟動預先發布版的一部分。
您可以為標準叢集節點集區選擇升級策略,挑選合適的程序,在速度、工作負載中斷、風險降低和最佳成本效益之間達到平衡。如要進一步瞭解哪種節點升級策略適合您的環境,請參閱「選擇大量升級」和「選擇藍綠升級」。
無論採用哪種策略,您都可以設定升級設定,根據環境需求最佳化升級程序。詳情請參閱「設定所選的升級策略」。請確認您有足夠的配額、資源可用性或預訂容量,可使用所選策略升級節點。詳情請參閱「確保節點升級的資源」。
節點數擴充升級
突增升級是預設的升級策略,最適合可處理漸進式變更的應用程式。突波升級會使用滾動式方法升級節點,順序未定義。選擇可建立的新增節點數量 (使用 maxSurge
) 和可同時中斷的現有節點數量 (使用 maxUnavailable
),在速度和中斷之間取得最佳平衡。
此外,升級期間,叢集自動調整功能會一併運作,防止節點變更。
為環境選擇突波升級
如果您重視成本最佳化,且工作負載可容忍在 60 分鐘內關閉,建議為節點集區選擇突增升級。
突增升級最適合下列情境:
- 如要盡量加快升級速度。
- 如果工作負載較能容忍中斷,且可接受最多 60 分鐘的正常終止時間。
- 如要盡量減少建立新節點,以控管成本。
GKE 使用節點數擴充升級的時機
啟用後,發生下列類型的變更時,GKE 會使用節點數擴充升級:
- 版本變更 (升級)
- 變更節點機器屬性 (包括機器類型、磁碟類型和磁碟大小),垂直調度節點資源
- 圖片類型變更
- IP 輪替
- 憑證輪替
- 建立網路政策
- 啟用映像檔串流
- 網路效能設定更新
- 啟用 gVNIC
- 節點系統設定變更
- 機密節點
其他變更 (包括將更新套用至現有節點集區的節點標籤和汙點) 不會使用大量升級,因為不需要重新建立節點。
瞭解節點數擴充升級設定
使用突波升級設定,在叢集維護期間,為節點集區選取適當的速度和中斷平衡。您可以變更 Standard 節點集區的節點數擴充升級參數,藉此調整 GKE 嘗試一次升級的節點數量。
升級期間的行為取決於 maxSurge
和 maxUnavailable
設定,這些設定會決定在滾動式時間範圍內,有多少節點會同時升級,並執行上述步驟。
maxSurge
:GKE 會先建立新的節點,再移除現有節點
設定 maxSurge
,選擇在升級期間可新增至節點集區的節點數擴充上限 (每個可用區),提高現有節點上執行的工作負載立即遷移至新節點的可能性。預設值為 1。如要升級一個節點,GKE 會執行下列步驟:
- 佈建新節點。
- 等待新節點準備就緒。
- 限制現有節點。
- 排空現有節點,並遵循 PodDisruptionBudget 和 GracefulTerminationPeriod 設定,最多一小時。一小時後,系統會強制撤銷所有剩餘的 Pod,以便繼續升級。
- 刪除現有節點。
如要讓 GKE 建立突增節點,專案必須有資源可暫時建立額外節點。如果沒有額外容量,GKE 會等到資源可用時,才開始升級節點。詳情請參閱「資源:升級至尖峰時段」。
maxUnavailable
:GKE 會讓現有節點無法使用,以便重新建立節點
設定 maxUnavailable
,選擇每個區域在升級期間可同時無法使用的節點數量上限。預設值為零。
如果沒有其他節點有容量,在現有節點上執行的工作負載可能需要等待現有節點升級。如要升級單一節點,GKE 會執行下列步驟:
- 隔離現有節點。
- 排空現有節點,並遵循 PodDisruptionBudget 和 GracefulTerminationPeriod 設定,最多一小時。一小時後,系統會強制撤銷所有剩餘的 Pod,以便繼續升級。
- 使用新設定重新建立現有節點。
- 等待現有節點準備就緒。
- 取消現有升級節點的封鎖。
當 GKE 重新建立現有節點時,如果容量不是來自預留資源,GKE 會暫時釋出節點容量。也就是說,如果容量有限,您可能會失去現有容量。因此,如果環境的資源有限,只有在使用預留節點時,才建議使用這項設定。詳情請參閱「在資源受限的環境中升級」。
maxSurge
和 maxUnavailable
設定的使用範例
舉例來說,假設 GKE 叢集有一個單一區域節點集區,其中有 5 個節點,且節點數擴充升級設定如下:maxSurge=2;maxUnavailable=1
。
使用這個節點集區進行節點數擴充升級時,GKE 會在滾動式視窗中建立兩個升級節點,且一次最多中斷一個現有節點。升級節點準備就緒後,GKE 最多會關閉三個現有節點。在升級過程中,節點集區會包含四到七個節點。
節點數擴充升級設定注意事項
設定尖峰升級設定前,請先考量以下資訊:
- 擴充升級建立的節點會受到 Google Cloud 資源配額、資源可用性和保留項目容量限制,適用於具有特定保留項目相依性的節點集區。如果環境資源受限,請參閱「在資源受限的環境中升級」。
- GKE 同時升級的節點數是
maxSurge
和maxUnavailable
的總和。一次升級的節點數上限為 20 個。突波升級功能也適用於叢集自動調整程式,可防止升級中的節點發生變更。 - GKE 會一次升級多區域節點集區的一個區域。節點數擴充升級參數僅適用於區域中的節點數。可並行升級的節點數量上限不會超過
maxSurge
加maxUnavailable
的總和,也不會超過可用區中的節點數量。 - 如果節點集區使用 Spot VM,GKE 會建立具有 Spot VM 的湧現節點,但不會等待 Spot VM 準備就緒,就先封鎖並排空現有節點。詳情請參閱使用 Spot VM 升級標準節點集區。
調整節點數擴充升級設定,在速度和中斷之間取得平衡
下表列出四種不同的升級設定檔示例,協助您瞭解不同的設定:
說明 | 設定 | 常見用途 |
---|---|---|
平衡 (預設):速度較慢,但干擾程度最低 | 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_DURATION
和 NODE_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_COUNT
或 BATCH_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 會升級這些受限的執行階段節點,不會中斷現有工作負載。這項策略的運作方式如下:
- 現有節點會持續運作,直到遭到先占為止。
- 新節點會使用新的節點設定。
- 節點最多會在七天內,從執行現有設定轉換為執行新設定。
GKE 會自動為彈性啟動節點設定這項策略。這項策略沒有任何設定。
GKE 使用短期升級時機
GKE 會自動將彈性啟動節點設為使用短期升級。如果節點只使用排隊佈建,但執行於 GKE 1.32.2-gke.1652000 以上版本的叢集,也會使用短期升級。
對於使用短期升級的 Autopilot 叢集中的標準節點集區和節點群組,如果原本會使用突增升級,GKE 就會改用這項策略。除了節點升級 (版本變更) 之外,GKE 也會使用短期升級進行其他類型的節點更新,類似於節點數擴充升級。詳情請參閱「使用突增升級時機」一文。