本頁說明 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 自動升級節點集區,或您啟動手動節點集區升級時,會發生哪些情況。
GKE 會自動升級叢集中的節點集區,一次升級一個。或者,您也可以手動平行升級一或多個節點集區。根據預設,節點集區中的節點會一次升級一個,順序不限。在跨多個區域的節點集區中,升級作業會逐一在各個區域進行。在可用區內,節點會以未定義的順序升級。
透過 GKE 節點集區升級,您可以選擇兩種可設定的內建升級策略,根據叢集環境的需求調整升級程序。如要進一步瞭解節點數擴充和藍綠升級策略,請參閱「升級策略」。
節點集區升級期間,您無法變更叢集設定,除非取消升級。
GKE 會盡可能在自動升級期間,遵守維護期間和排除項目。手動升級會略過您設定的維護期間和排除項目。
節點升級方式
在節點集區升級期間,節點的升級方式取決於節點集區升級策略和設定方式。不過,基本步驟仍維持不變。如要升級節點,GKE 會從節點移除 Pod,以便升級。
節點升級時,Pod 會發生下列情況:
- 節點已設為封鎖,因此 Kubernetes 不會將新 Pod 排程至該節點。
- 接著,系統會清空節點,也就是移除 Pod。在突波升級期間,GKE 最多會遵循 Pod 的 PodDisruptionBudget 和 GracefulTerminationPeriod 設定一小時。採用藍綠升級策略時,如果設定較長的浸泡時間,這個時間可以延長。
- 控制層會將控制器管理的 Pod 重新排程到其他節點。 無法重新排程的 Pod 會停留在 Pending 階段,直到可以重新排程為止。
視升級策略、節點數量和工作負載設定而定,節點集區升級程序可能需要幾小時。
影響節點升級時間的注意事項
可能導致節點升級時間變長的設定包括:
- Pod 設定中的 terminationGracePeriodSeconds 值偏高。
- 保守的 Pod disruption budget。
- 節點相依性互動。
- 已連結的 PersistentVolumes。
節點升級策略
GKE 提供內建的可設定策略,決定節點集區的升級方式。如要進一步瞭解使用節點升級策略的變更類型,請參閱「GKE 何時使用大量升級」和「GKE 何時使用藍綠升級」。
節點數擴充升級
根據預設,節點集區升級會使用大量升級策略。升級節點時,突波升級會採用輪流升級法。這項策略最適合可處理漸進式非中斷變更的應用程式。採用這項策略時,節點會在滾動式時間範圍內升級。您可以透過這些設定變更一次可升級的節點數量,以及升級作業的干擾程度,找出最符合環境需求的升級速度和干擾程度。
藍綠升級
另一種做法是藍綠升級,同時維護兩組環境 (原始環境和新環境),盡可能簡化回溯程序。藍綠部署需要更多資源,適合對變更較為敏感的應用程式。採用這項策略時,工作負載會從原始的「藍色」環境逐步遷移至新的「綠色」環境,並經過一段時間的測試,以驗證新設定。如有需要,工作負載可快速回復至現有的「藍色」環境。
如要進一步瞭解節點升級策略的運作方式,請參閱「節點升級策略」。
節點升級策略的資源需求
如果 maxSurge
設為大於 0,節點數擴充升級功能會建立額外節點;藍綠升級功能則會暫時將節點集區中的節點數量加倍。這需要額外資源,因此會受到
Compute Engine 配額、資源可用性和預留容量的限制。如果節點集區的資源不足,升級作業可能需要較長時間,或甚至會失敗。
如要進一步瞭解如何確保專案有足夠的資源可供節點升級,以及環境資源不足時該怎麼做,請參閱「確保節點升級有足夠的資源」。
自動升級
建立標準叢集時,系統預設會為叢集及其節點集區啟用自動升級功能。
GKE 負責保護叢集的控制層安全,並在選取自動升級時升級叢集。基礎架構安全是 GKE 的首要任務,因此控制層會定期升級,且無法停用。不過,您可以套用維護期間和排除時段,暫時停止升級控制層和節點。
根據 GKE 共同責任模式,您負責保護節點、容器和 Pod。節點自動升級功能預設為啟用。雖然不建議這麼做,但您可以停用節點自動升級功能。選擇停用節點自動升級功能,不會阻礙叢集控制層升級。如果停用節點自動升級功能,您應確保叢集節點執行的版本與叢集的版本相容,且版本符合 GKE 版本差異政策。
如要進一步控管自動升級的時間 (或禁止自動升級),可以設定維護期間和排除的時段。
叢集的節點集區版本最多只能比控制層版本落後兩個次要版本,才能維持與叢集 API 的相容性。節點集區版本也會決定每個節點上安裝的軟體套件版本。建議將節點集區更新至叢集版本。
如果叢集註冊於發布版本,節點一律會執行與叢集相同的 GKE 版本,但完成叢集控制層升級,並開始升級特定節點集區之間,會有短暫的期間 (通常為幾天,視目前發布版本而定)。詳情請參閱版本資訊。
如何選取自動升級的版本
GKE 會定期發布新版本,但不會立即選取版本進行自動升級。當 GKE 版本累積足夠的叢集使用量,證明長期穩定性後,GKE 會將該版本選為執行舊版子集的叢集自動升級目標。如要取得特定叢集的自動升級目標,請參閱「取得叢集升級相關資訊」。
版本資訊會公布新的自動升級目標版本。在選取可用版本進行自動升級前,您可以手動升級。有時,系統會在不同週選取叢集自動升級和節點自動升級的版本。
新次要版本正式發布後不久,最舊的次要版本通常就會停止支援。如果叢集執行的子版本不再受支援,系統會自動升級至下一個子版本。
在子版本 (例如 v1.14.x) 中,叢集可以自動升級至新的修補程式版本。
發布版本可讓您根據版本的穩定性控管叢集和節點集區版本,而非直接管理版本。
影響版本推出時間的因素
為確保新版叢集的穩定性和可靠性,GKE 會在推出新版本時遵循特定做法。
這類做法包括但不限於:
- GKE 會逐步在各個 Google Cloud地區和可用區推出變更。
- GKE 會透過發布版本,逐步推出修補程式版本。修補程式會在「快速版」發布管道中經過一段時間的測試,然後在「一般版」發布管道中經過一段時間的測試,累積使用量並持續展現穩定性後,才會升級至「穩定版」發布管道。如果在發布管道的浸泡期間發現修補程式版本有問題,該版本就不會升級至下一個管道,且問題會在較新的修補程式版本中修正。
- GKE 會逐步推出子版本,並採用與修補程式版本類似的浸泡程序。次要版本會導入更重大的變更,因此浸泡期較長。
- 如果新版本會影響一組叢集,GKE 可能會延後自動升級。舉例來說,如果 GKE 偵測到叢集使用已淘汰的 API 或功能,且這些項目會在下一個子版本中移除,就會暫停叢集的自動升級作業。
- 為確保業務持續運作,GKE 可能會在尖峰時段 (例如重大節慶) 延後推出新版本。
設定自動升級的發生時間
根據預設,系統會隨時自動升級,確保基礎架構安全無虞。自動升級的干擾程度最低,尤其是區域叢集。不過,部分工作負載可能需要更精細的控制。您可以設定維護期間和排除項目,管理自動升級作業的執行時間。
手動升級
您可以隨時要求手動升級叢集或節點集區至可用的相容版本。手動升級會略過所有已設定的維護期間和維護排除項目。
手動升級叢集時,叢集的可用性取決於叢集是否為區域叢集:
區域叢集:升級期間無法使用控制層。在大多數情況下,工作負載會正常執行,但升級期間無法修改。
對於區域叢集,控制層的一個副本會在升級時無法使用,但叢集在升級期間仍維持高可用性。
您可以手動啟動節點升級,升級至與控制層相容的版本。
GKE 如何處理自動升級失敗
節點集區自動升級可能會因基礎 Compute Engine 執行個體或 Kubernetes 發生問題而失敗。舉例來說,在下列情況下,自動升級會失敗:
- 您設定的
maxSurge
超出 Compute Engine 資源配額。 - 新湧現節點未向叢集控制層註冊。
- 節點排空或刪除時間過長。
如果個別節點升級時發生問題,GKE 會重試升級幾次,每次重試的間隔會越來越長。如果節點集區中的節點無法升級,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 和 UPDATE_CLUSTER 。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
欄位會顯示升級是手動或自動觸發,如下所示。
google.container.v1.ClusterManager.UpdateNodePool
:手動升級節點集區google.container.internal.ClusterManagerInternal.UpdateClusterInternal
:自動升級節點集區
元件升級
GKE 會在工作站節點上執行系統工作負載,以支援叢集的特定功能。舉例來說,gke-metadata-server
系統工作負載支援 Workload Identity Federation for GKE。GKE 會負責這些工作負載的健康狀態。如要進一步瞭解這些元件,請參閱相關功能的說明文件。
如果元件推出新功能或修正內容,GKE 會指出包含這些項目的修補程式版本。如要取得元件的最新版本,請參閱相關說明文件或版本說明,瞭解如何將控制層或節點升級至適當版本。
後續步驟
- 進一步瞭解叢集設定選項。
- 進一步瞭解如何升級叢集或節點。
- 設定維護期間和排除時段。
- 瞭解如何使用推出作業排序功能,管理各環境的叢集自動升級作業。
- 升級叢集的最佳做法。
- 觀看「GKE 叢集升級:確保 GKE 叢集穩定性、安全性和效能的最佳做法」