本文說明 Google Kubernetes Engine (GKE) Autopilot 叢集的自動升級運作方式,並提供相關工作和設定的詳細資訊連結。您可以運用這項資訊,在盡可能不中斷工作負載的情況下,更新叢集以確保穩定性和安全性。
如需叢集升級作業的一般總覽,請參閱「關於 GKE 叢集升級」。如要瞭解 Standard 叢集 (包括由 Autopilot 管理的節點集區) 的叢集升級作業運作方式,請參閱「Standard 叢集升級」。
自動升級控制層和節點
所有 Autopilot 叢集都已啟用自動升級功能。當 GKE 版本獲選為自動升級版本時,GKE 會啟動自動升級、監控所有叢集的自動升級作業,並在發生節點健康狀態不佳等問題時介入處理。您無法停用自動升級功能,但可以透過維護期間和排除時段控管升級時間。
如要升級叢集,GKE 會更新控制層和節點執行的版本。叢集會升級至較新的子版本 (例如從 1.24 升級至 1.25) 或較新的修補程式版本 (例如從 1.24.2-gke.100 升級至 1.24.5-gke.200)。詳情請參閱「GKE 版本管理和支援服務」。
所有 Autopilot 叢集都會註冊發布管道,因此 GKE 會自動升級控制層和節點,以執行相同的 GKE 版本。
自動升級控制層
所有 Autopilot 叢集都是區域性叢集。區域叢集有多個控制層副本,每次只會升級一個副本,順序不固定。這種做法有助於確保叢集在自動升級期間維持高可用性。只有在升級期間,各個控制層副本才會無法使用。
如果您設定維護期間或排除時段,GKE 會盡可能遵循設定。
控制層升級期間,GKE 無法建立新節點。如果在控制層升級期間部署需要新節點類型的 Pod,可能會發生延遲,直到控制層升級完成為止。
GKE 會根據升級類型,使用下列方法自動升級控制層:
- 修補程式版本升級:GKE 採用一步升級,直接將控制層升級至較新的修補程式版本。
- 子版本升級:如要升級至 GKE 子版本 1.33 以上版本,GKE 會採用兩步驟程序,讓您在一段浸泡時間內驗證新的子版本,並視需要復原。詳情請參閱「兩步驟控制層微幅升級,可安全復原」。如要升級至較早的版本,GKE 會改用一步升級程序。
自動節點升級功能
GKE 升級 Autopilot 叢集控制層後,會將節點升級至相同的 GKE 版本。
在 Autopilot 中,GKE 會將具有相似特性的節點分組。GKE 會對 Autopilot 節點使用激增升級,一次最多可升級群組中的 20 個節點。同時升級的節點數量不盡相同,以確保節點和工作負載持續維持高可用性。
視節點數量和節點中執行的工作負載設定而定,節點升級可能需要數小時。舉例來說,下列設定可能會導致升級時間延長:
- Pod 設定中的
terminationGracePeriodSeconds值偏高。 - 保守的
PodDisruptionBudget。 - 節點相依性互動。
- 已附加「
PersistentVolumes」檔案。
如果您設定維護期間或排除時段,GKE 會盡可能遵循設定。
GKE 升級節點時,會執行下列步驟:
- GKE 會建立新的激增節點,並等待激增節點向控制層註冊。
- GKE 會選取現有的節點 (即「目標節點」) 進行升級。
- GKE 會封鎖目標節點,防止新的 Pod 放置在目標節點上。
- GKE 會排空目標節點,並從目標節點中剔除現有的 Pod。
PodDisruptionBudget:系統會套用覆寫設定 1 小時。- 除了Spot Pod 限制為 25 秒外,大多數 Pod 的
terminationGracePeriodSeconds限制為 10 分鐘 (600 秒)。
GKE 會將工作負載控制器管理的 Pod 重新排程至其他可用節點。無法重新排程的 Pod 會維持在
PENDING狀態,直到 GKE 重新排程為止。GKE 會刪除目標節點。
如果大量自動升級至特定 GKE 版本,導致 GKE 機群中的節點健康狀態不良,GKE 會停止升級至該版本,並調查問題。
系統如何選取自動升級版本
GKE 會定期發布新的子版本,但不會立即選取發布版本進行自動升級。GKE 版本必須累積足夠的使用量,證明其穩定性,才能成為自動升級目標。
Google Cloud 然後將該版本設為自動升級目標,用於執行特定舊版 GKE 子集的叢集。舉例來說,新的子版本推出後不久,最舊的可用子版本通常會停止支援。GKE 會將執行不支援子版本的叢集,升級至自動升級目標版本。
GKE 會在版本資訊中,宣布新的自動升級目標版本。有時,系統會在不同週選取控制層和節點自動升級的版本。GKE 會自動升級至子版本 (例如 v1.21.x) 中的新修補程式版本。如要取得特定叢集的自動升級目標,請參閱「取得叢集升級相關資訊」。
如要瞭解版本生命週期和版本管理配置,請參閱「GKE 版本管理和支援」。
影響版本推出時間的因素
為確保新版本叢集的穩定性和可靠性,GKE 在推出版本時會遵循特定做法。
這類做法包括但不限於:
- GKE 會逐步在各區域和可用區 Google Cloud推出變更。
- GKE 會逐步在各發布管道推出修補程式版本。修補程式會先在「快速」發布管道中進行浸泡時間,然後在「一般」發布管道中進行,累積使用量並持續展現穩定性後,才會升級至「穩定」發布管道。如果在發布管道的浸泡時間內發現修補程式版本有問題,該版本就不會升級至下一個管道,而問題會在較新的修補程式版本中修正。
- GKE 會逐步推出子版本,採用與修補程式版本類似的觀察程序。子版本會導入更重大的變更,因此觀察期較長。
- 如果新版本會影響一組叢集,GKE 可能會延遲自動升級。舉例來說,如果 GKE 偵測到叢集使用已淘汰的 API 或功能,且該 API 或功能將在下一個子版本中移除,則會暫停自動升級。
- 在尖峰時段 (例如重大節日),GKE 可能會延遲推出新版本,確保業務持續運作。
設定自動升級時間
根據預設,自動升級作業隨時可能執行。自動升級作業對服務的影響極小,尤其是 Autopilot 叢集。不過,某些工作負載可能需要更精細的控制。您可以設定維護期間和排除項目,管理自動升級作業的執行時間。
如果您設定維護期間和排除時段,系統會等到目前時間在維護期間內,才會執行升級作業。如果維護期間在升級完成前到期,GKE 會嘗試暫停升級。GKE 會在下一個可用的維護期間繼續升級。
手動升級 Autopilot 叢集
您可以手動將叢集控制層的 GKE 版本,升級至相同發布管道中支援的子版本或修補程式版本,或升級至其他發布管道中與叢集相同子版本的修補程式版本。
舉例來說,假設 Autopilot 叢集在穩定版發布管道中執行 GKE 1.35.6-gke.1250000 版。系統會按照以下方式運作:
- 您可以升級至標準發布版本中的任何修補程式版本。
- 您可以透過搶鮮版升級至 1.35 的任何修補程式版本。如要進一步瞭解如何升級至版本群組以外的版本,請參閱「執行較新版本群組中的修補程式版本」。
- 您可以升級至一般版本中可用的新子版本。例如,您可以升級至 1.36。
您可以根據升級類型,使用下列方法升級控制層版本:
- 修補程式版本升級:可使用一步升級。
- 子版本升級:您可以使用一步升級或兩步升級。
如要進一步瞭解這些方法和使用方式,請參閱「升級叢集的控制層」。
GKE 會根據維護可用性,盡快自動升級節點,使其與控制層版本相符。您無法手動管理 Autopilot 叢集的節點版本。
節點數擴充升級
Autopilot 叢集會使用激增升級,同時升級多個節點。GKE 透過激增升級功能,為執行中的工作負載保留足夠的運算能力,減少版本升級對工作負載造成的干擾。Autopilot 會管理升級期間新增至叢集的激增節點數量。這個數字會因叢集總大小而異。GKE 也會管理升級期間可同時無法使用的目標節點總數。
新激增節點和無法使用的目標節點數量會有所不同,確保叢集一律有足夠的運算能力,可處理所有執行中的工作負載。升級期間,GKE 會將工作負載從目標節點遷移至節點數擴充節點,因此您可能會遇到輕微中斷。
如要瞭解激增升級的運作方式,請參閱「自動升級節點」。
節點數擴充升級的配額需求
與節點重新建立不同,節點數擴充升級需要額外的 Compute Engine 資源。資源分配取決於可用的 Compute Engine 配額。視設定而定,這項配額可能會限制平行升級數量,甚至導致升級失敗。為避免資源調度問題,並確保升級作業更可預測,建議您確保 Compute Engine 執行個體配額不超過 90%。
如要進一步瞭解配額,請參閱「確保節點升級作業有足夠資源」。
接收升級通知
GKE 會將升級通知發布至 Pub/Sub,讓您能透過這個管道接收 GKE 叢集相關資訊。
詳情請參閱「接收叢集通知」。
元件升級
GKE 會在 worker 節點上執行系統工作負載,支援叢集的特定功能。舉例來說,gke-metadata-server 系統工作負載支援 Workload Identity Federation for GKE。GKE 負責這些工作負載的健康狀態。如要進一步瞭解這些元件,請參閱相關功能的說明文件。
當元件有新功能或修正程式可用時,GKE 會指出包含這些功能或修正程式的修補程式版本。如要取得最新版本的元件,請參閱相關說明文件或版本資訊,瞭解如何將控制層或節點升級至適當版本。
後續步驟
- 設定維護期間和排除時段。
- 瞭解如何使用推出作業排序功能,管理不同環境中的叢集自動升級作業。
- 觀看「GKE 叢集升級:確保 GKE 叢集穩定性、安全性和效能的最佳做法」