標準叢集升級

本文說明 Google Kubernetes Engine (GKE) Standard 叢集的自動和手動升級作業運作方式,並提供相關工作和設定的詳細資訊連結。您可以根據這項資訊更新叢集,確保穩定性和安全性,同時盡可能減少對工作負載的干擾。

如需叢集升級作業的一般總覽,請參閱「關於 GKE 叢集升級」。如要瞭解 Autopilot 叢集升級作業的運作方式,請參閱「Autopilot 叢集升級」。

控制層和節點集區升級作業的運作方式

本節說明自動或手動升級期間,叢集會發生什麼情況。如果是自動升級,GKE 會啟動自動升級。GKE 會監控所有 GKE 叢集的自動和手動升級作業,並在發現問題時介入處理。

如要升級叢集,GKE 會更新控制層和節點執行的版本。叢集會升級至較新的子版本 (例如從 1.24 升級至 1.25) 或較新的修補程式版本 (例如從 1.24.2-gke.100 升級至 1.24.5-gke.200)。詳情請參閱「GKE 版本管理和支援服務」。

如果您在發布管道中註冊叢集,節點會執行與叢集相同的 GKE 版本,但下列情況除外:在叢集控制層升級完成和節點集區升級開始之間的短暫期間 (通常為幾天,視目前版本而定),或手動升級控制層。詳情請參閱版本資訊。

控制層升級

本節說明 GKE 自動升級控制層或您手動啟動升級時,會發生什麼情況。

控制層升級期間,GKE 叢集的可用性取決於您執行的 Standard 叢集類型:

  • Zonal叢集只有一個控制層。升級期間,工作負載會繼續執行,但您無法部署新的工作負載、修改現有工作負載,或對叢集設定進行其他變更,直到升級完成為止。

  • 區域叢集有多個控制層副本,每次只會升級一個副本,順序不固定。升級期間,叢集仍會維持高可用性,只有在升級時,各個控制層副本才會無法使用。

如果您設定維護期間或排除時段,系統會盡可能在維護期間或排除時段執行自動升級。

控制層升級方法

GKE 執行控制層升級時,會使用下列方法:

  • 自動升級:GKE 會根據升級類型,使用下列方法執行自動升級:

    • 修補程式版本升級:GKE 採用一步升級,直接將控制層升級至較新的修補程式版本。
    • 子版本升級:如要升級至 GKE 子版本 1.33 以上版本,GKE 會採用兩步驟程序,讓您在一段浸泡時間內驗證新的子版本,並視需要復原。詳情請參閱「兩步驟控制層次要升級,具備復原安全性」。如要升級至較早的版本,GKE 會改用一步升級程序。
  • 手動升級:您可以根據升級類型升級叢集的控制層:

    • 修補程式版本升級:可使用一步升級。
    • 子版本升級:您可以使用一步升級或兩步升級。

節點集區升級

本節說明 GKE 自動升級節點集區,或您手動啟動節點集區升級時,會發生什麼情況。這項資訊適用於 Standard 節點集區和 Autopilot 代管的節點集區。

根據預設,GKE 會一次自動升級叢集中的一個節點集區。如要縮短具有多個節點集區的叢集整體升級時間,您可以設定並行節點集區升級 (預先發布版),讓 GKE 自動同時升級多個節點集區。或者,您也可以手動同時升級一或多個節點集區。根據預設,節點集區中的節點會以任意順序逐一升級。在分散於多個可用區的節點集區中,升級作業會逐一在各可用區進行。在可用區內,節點會以未定義的順序升級。

升級 GKE Standard 節點集區時,您可以選擇下列節點升級策略:

  • 節點數擴充升級
  • 藍綠升級
  • 自動調度資源的藍綠升級 (預先發布版)

您可以根據叢集環境的需求,調整各項節點升級策略的升級程序。Standard 叢集中由 Autopilot 管理的節點集區一律會使用激增升級,且您無法修改策略設定。

GKE 會盡可能在自動升級期間遵守維護期間和排除項目。手動升級會略過您設定的維護期間和排除時段。

對使用加速器並執行 AI/機器學習工作負載的節點集區,進行中斷性升級

由於具備加速器 (GPU 或 TPU) 的 Compute Engine 執行個體不支援即時遷移,Compute Engine 必須在主機維護期間關閉並重新建立節點。這項程序可能會中斷 AI/機器學習訓練或推論工作等工作負載。為盡可能減少服務中斷,建議您同時執行 Compute Engine 主機維護和 GKE 節點升級。詳情請參閱「對執行訓練和推論工作負載的節點執行主機維護作業」。

節點升級方式

升級節點集區時,節點的升級方式取決於節點集區升級策略和設定方式 (如果可以設定)。不過,基本步驟仍維持不變。如要升級節點,GKE 會從節點中移除 Pod,以便升級。

節點升級時,Pod 會發生下列情況:

  1. 節點會受到限制,因此 Kubernetes 不會在節點上排定新的 Pod。
  2. 接著,系統會清空節點,也就是移除 Pod。進行節點數擴充升級時,GKE 會遵循 Pod 的 PodDisruptionBudget 和 GracefulTerminationPeriod 設定,最長一小時。如果採用藍綠升級,您可以設定較長的浸泡時間,延長這段期間。
  3. 控制層會將控制器管理的 Pod 重新排程至其他節點。無法重新排程的 Pod 會維持在「Pending」階段,直到可以重新排程為止。

節點集區升級程序可能需要數小時,具體時間取決於升級策略、節點數量和工作負載設定。

影響節點升級時間長度的考量

可能導致節點升級作業需要較長時間才能完成的設定包括:

節點升級策略

GKE 提供內建的可設定策略,可決定節點集區的升級方式。如要進一步瞭解使用節點升級策略的變更類型,請參閱下列內容:

節點數擴充升級

根據預設,系統會使用激增升級策略升級節點集區。Autopilot 代管的節點集區一律會採用這項策略。激增升級會使用滾動式方法升級節點。如果應用程式可以處理漸進式、不中斷的變更,則最適合採用這項策略。這項策略會在滾動週期內升級節點。如果是 Standard 節點集區,您可以變更設定,例如一次可升級的節點數量,以及升級作業可能造成的干擾程度,找出最適合環境需求的速度和干擾程度平衡點。

藍綠升級

Standard 節點集區的替代方法是藍綠升級,也就是同時維護兩組環境 (原始環境和新環境),盡可能簡化復原作業。藍綠部署會耗用較多資源,適合對變更較敏感的應用程式。採用這項策略時,工作負載會逐步從原始的「藍色」環境遷移至新的「綠色」環境,並經過浸泡時間,以新的設定進行驗證。如有需要,工作負載可以快速復原至現有的「藍色」環境。

如要進一步瞭解節點升級策略的運作方式,請參閱「節點升級策略」。

自動調度資源的藍綠升級

自動調度資源的藍綠升級 (預先發布版) 是一種節點升級策略,可讓工作負載執行更長時間,同時盡可能降低閒置或未充分利用節點的成本。

節點升級策略的資源需求

如果 maxSurge 設為大於 0,激增升級會建立額外節點,而藍綠升級會暫時將節點集區中的節點數量加倍。這項作業需要額外資源,且須遵守 Compute Engine 配額、資源可用性和預留項目容量限制。如果節點集區資源不足,升級作業可能需要較長時間,或無法完成。

如要進一步瞭解如何確保專案有足夠的資源進行節點升級,以及環境資源受限時該如何處理,請參閱「確保節點升級所需的資源」。

自動升級

建立 Standard 叢集時,系統預設會為叢集及其節點集區啟用自動升級功能。

GKE 負責保護叢集的控制層,並在選取自動升級的新 GKE 版本時升級叢集。基礎架構安全是 GKE 的首要考量,因此控制層會定期升級,且無法停用。不過,您可以使用維護期間和排除時段,暫時停用控制層升級。

根據 GKE 共同責任模式,您必須負責保護節點、容器和 Pod。節點自動升級功能預設為啟用,您可以使用維護期間和排除時段,控管何時可以或不可以執行自動升級。如果停用節點自動升級功能,您必須確保叢集節點執行的版本與控制層版本相容,且該版本符合 GKE 版本偏差政策。無論叢集設定為何,GKE 都會在支援期結束時自動升級。

叢集的節點集區最多只能比控制層版本落後兩個子版本,才能與叢集 API 保持相容。節點集區版本也會決定每個節點上安裝的軟體套件版本。建議您將節點集區更新至叢集版本。

如果叢集持續註冊發布管道,節點通常會執行與叢集本身相同的 GKE 版本,但叢集控制層升級完成到開始升級特定節點集區之間的短暫期間 (通常為幾天,視目前版本而定) 除外。詳情請參閱版本資訊。

系統如何選取自動升級版本

GKE 會定期發布新版本,但不會立即選取版本進行自動升級。當 GKE 版本的叢集用量累積到一定程度,足以證明其穩定性時,GKE 就會將該版本設為自動升級目標,用於執行部分舊版叢集。如要取得特定叢集的自動升級目標,請參閱「取得叢集升級相關資訊」。

版本資訊會公布新的自動升級目標。在選取可用的自動升級版本之前,您可以手動升級。有時,叢集和節點自動升級的版本會在不同週選取。

新的子版本正式發布後,最舊的可用子版本通常會停止支援。如果叢集執行的子版本不再受支援,系統會自動將叢集升級至下一個子版本。

在子版本 (例如 v1.14.x) 中,叢集可以自動升級至新的修補程式版本。

發布管道可讓您根據版本的穩定性控管叢集和節點集區版本,而不必直接管理版本。

影響版本推出時間的因素

為確保新版本叢集的穩定性和可靠性,GKE 在推出版本時會遵循特定做法。

這類做法包括但不限於:

  • GKE 會逐步在各區域和可用區 Google Cloud推出變更。
  • GKE 會逐步在各發布管道推出修補程式版本。修補程式會先在「快速」發布管道中進行浸泡時間,然後在「一般」發布管道中進行,累積使用量並持續展現穩定性後,才會升級至「穩定」發布管道。如果在發布管道的浸泡時間內發現修補程式版本有問題,該版本就不會升級至下一個管道,而問題會在較新的修補程式版本中修正。
  • GKE 會逐步推出子版本,採用與修補程式版本類似的觀察程序。子版本會導入更重大的變更,因此觀察期較長。
  • 如果新版本會影響一組叢集,GKE 可能會延遲自動升級。舉例來說,如果 GKE 偵測到叢集使用已淘汰的 API 或功能,且該 API 或功能將在下一個子版本中移除,則會暫停自動升級。
  • 在尖峰時段 (例如重大節日),GKE 可能會延遲推出新版本,確保業務持續運作。

設定自動升級時間

根據預設,系統隨時可能自動升級,以維護基礎架構安全。自動升級作業造成的干擾極小,尤其是區域叢集。不過,某些工作負載可能需要更精細的控制。您可以設定維護期間和排除項目,管理自動升級作業的執行時間和禁止時間。

手動升級

您可以隨時要求手動將叢集的控制層或節點集區升級至可用且相容的版本。在 Standard 叢集中,您可以手動升級 Standard 節點集區和 Autopilot 代管的節點集區。手動升級會略過任何已設定的維護期間和維護作業排除時段。

手動升級叢集時,可用性取決於叢集是否為區域叢集:

  • 如果是可用區叢集,控制層在升級期間無法使用。在大多數情況下,工作負載會正常運作,但在升級期間無法修改。

  • 如果是區域叢集,控制層的一個副本在升級期間會暫時無法使用,但叢集在升級期間仍會保持高可用性。

您可以手動啟動節點升級,升級至與控制層相容的版本。

GKE 如何因應自動升級失敗

如果基礎 Compute Engine 執行個體或 Kubernetes 發生問題,節點集區自動升級作業可能會失敗。舉例來說,自動升級在下列情況下會失敗:

  • 您設定的 maxSurge 設定超出 Compute Engine 資源配額。
  • 新的激增節點未向叢集控制層註冊。
  • 節點耗盡或刪除時間過長。

個別節點升級發生問題時,GKE 會重試升級幾次,並逐漸增加重試間隔。如果節點集區中的節點無法升級,GKE 不會復原已升級的節點。而是會再次嘗試自動升級節點集區,直到所有節點都成功升級為止。

如果節點升級作業因激增節點要求超過 Compute Engine 配額而失敗,GKE 會減少並行激增節點數量,嘗試符合配額並繼續升級。

接收升級通知

GKE 會將與叢集相關的事件通知 (例如版本升級和安全性公告) 發布至 Pub/Sub,讓您能透過這個管道接收 GKE 提供的叢集資訊。

詳情請參閱「接收叢集通知」。

查看升級記錄

根據預設,GKE 會將控制層和節點集區升級事件記錄到 Cloud Logging。升級事件記錄可讓您瞭解升級程序,並在需要時提供有助於疑難排解的重要資訊。

控制層升級記錄

您可以使用下列篩選器查詢叢集升級事件:

resource.type="gke_cluster"
protoPayload.metadata.operationType=~"(UPDATE_CLUSTER|UPGRADE_MASTER)"
resource.labels.cluster_name="CLUSTER_NAME"

這些記錄會以結構化記錄格式記錄。您可以使用下列欄位,查看升級事件的詳細資料:

欄位 說明
protoPayload.metadata.operationType

叢集升級事件分為兩種類型:

  • UPGRADE_MASTER:升級 Kubernetes 控制層版本。
  • UPDATE_CLUSTER:不會變更 Kubernetes 控制層版本的更新。

這兩種叢集升級類型都可能導致可用區叢集的控制層可用性中斷。詳情請參閱「叢集和節點集區升級作業的運作方式」。

protoPayload.methodName

這個欄位會顯示觸發叢集升級的 API。

  • google.container.v1.ClusterManager.UpdateCluster:手動升級控制層
  • google.container.internal.ClusterManagerInternal.UpdateClusterInternal:自動升級控制層
  • google.container.v1.ClusterManager.PatchCluster:叢集設定變更
protoPayload.metadata.previousMasterVersion 這個欄位僅適用於 MASTER_UPGRADE 作業類型,包含升級前使用的控制層版本。
protoPayload.metadata.currentMasterVersion 這個欄位僅適用於 MASTER_UPGRADE 作業類型,包含升級後使用的新控制層版本號碼。

節點集區升級記錄

使用下列查詢查看節點集區升級事件:

resource.type="gke_nodepool"
protoPayload.metadata.operationType="UPGRADE_NODES"
resource.labels.cluster_name="CLUSTER_NAME"

請使用下列欄位,提供升級事件的詳細資料:

protoPayload.methodName 欄位會顯示升級作業是手動觸發,還是自動觸發,如下所示。

元件升級

GKE 會在 worker 節點上執行系統工作負載,支援叢集的特定功能。舉例來說,gke-metadata-server 系統工作負載支援 Workload Identity Federation for GKE。GKE 負責這些工作負載的健康狀態。如要進一步瞭解這些元件,請參閱相關功能的說明文件。

當元件有新功能或修正程式可用時,GKE 會指出包含這些功能或修正程式的修補程式版本。如要取得最新版本的元件,請參閱相關說明文件或版本資訊,瞭解如何將控制層或節點升級至適當版本。

後續步驟