本頁面說明維護期間和維護排除時段。這些政策可讓您控管 Google Kubernetes Engine (GKE) 叢集執行部分叢集維護作業 (例如自動升級) 的時間。舉例來說,零售業商家可以限制維護作業只能在平日晚上進行,並在重要產業特價活動期間禁止自動維護作業。
關於 GKE 維護政策
GKE 維護政策 (包括維護期間和排除時段) 可讓您控管叢集自動維護作業的執行時間,包括叢集升級、節點設定變更,以及叢集 Network Topology 變更。
「維護期間」是指可以自動維護 GKE 的週期性時間範圍。
「維護作業排除項目」是指禁止自動執行 GKE 維護作業的一段非週期性時間。
如果維護期間已開始,而且您未設定維護作業排除時段,GKE 就會自動變更叢集,並遵守叢集的維護政策。您可以為每個叢集設定一個週期性維護期間,以及多個維護排除時段。
其他類型的維護作業不依賴 GKE 維護政策,包括控制層修復作業,以及 GKE 依賴的服務 (例如 Compute Engine) 的維護作業。詳情請參閱「不遵循維護政策的自動維護」。
哪些變更會遵守 GKE 維護政策,哪些不會
設定 GKE 維護政策 (維護期間和排除項目) 前,請先詳閱下列章節,瞭解 GKE 和相關服務是否會遵守這些政策。
自動維護作業會遵守 GKE 維護政策
透過 GKE 維護政策,您可以控管下列事件的發生時間,避免叢集暫時中斷:
- 自動升級叢集,包括控制層升級和節點升級。如要進一步瞭解這些異動,以及異動可能導致環境暫時中斷的原因,請參閱「Autopilot 叢集升級」和「Standard 叢集升級」。
- 使用者啟動的設定變更,導致節點重新建立或大幅變更叢集的內部網路拓撲。詳情請參閱「遵循 GKE 維護政策的手動變更」。
其他類型的自動維護作業不依維護政策而定。 詳情請參閱「不遵循維護政策的自動維護」。
自動維護作業未遵守 GKE 維護政策
GKE 維護期間和排除項目不會封鎖所有類型的自動維護作業。設定 GKE 叢集的維護政策前,請務必瞭解哪些類型的變更不會遵守維護期間和排除項目。
其他 Google Cloud 維護作業
GKE 維護時段和排除項目不會阻止基礎 Google Cloud 服務 (主要是 Compute Engine) 或將應用程式安裝至叢集的服務 (例如 Cloud Deploy) 自動維護。
舉例來說,GKE 節點是 Compute Engine VM,由 GKE 為叢集管理。Compute Engine VM 有時會發生主機事件,包括維護事件或主機錯誤。VM 在這些事件期間的行為取決於 VM 的主機維護政策,根據預設,大多數 VM 都會即時遷移。這通常表示節點幾乎不會停機,而且對大多數工作負載來說,預設政策已足夠。對於某些 VM 機器系列,您可以監控及規劃主機維護事件,並觸發主機維護事件,以便配合 GKE 維護政策。
建議您查看主機事件和主機維護政策的相關資訊,並確認工作負載已做好中斷準備,尤其是執行於無法執行即時遷移的節點上的工作負載。
自動修復和調整大小
GKE 會自動修復控制層。包括將控制層擴充至適當大小,或重新啟動控制層來解決問題。大多數修復作業都會忽略維護期間和排除時段,因為如果無法執行修復作業,叢集可能會無法運作。
您無法停用控制層修復功能。不過,大多數類型的叢集 (包括 Autopilot 叢集和 標準區域叢集) 都有多個控制層副本,因此即使在維護事件期間,Kubernetes API 伺服器也能維持高可用性。標準區域叢集只有單一控制層,因此在控制層設定變更和叢集維護期間,無法修改叢集。包括部署工作負載。
節點也具備自動修復功能,您可以為 Standard 叢集停用這項功能。
修補重大安全漏洞
維護期間和排除時段可能會導致安全性修補程式延遲發布。 不過,GKE 保留權利,可針對重大安全漏洞覆寫維護政策。
維護以 Spanner 為基礎的叢集狀態資料庫
部分 GKE 叢集會使用 Spanner 鍵值資料庫,儲存 Kubernetes API 資源的狀態。這個資料庫的維護作業會忽略任何有效的維護期間和排除時段。不過,以 Spanner 為基礎的叢集狀態資料庫會經過複製,在維護事件期間仍可使用。
遵守 GKE 維護政策的手動變更
如要變更節點或網路設定,您必須重新建立節點,才能套用新設定,包括下列部分變更:
這些變更會遵守 GKE 維護政策,也就是說,GKE 會等待開放維護期間,並等待沒有任何維護作業排除時段阻止節點維護作業。如要手動將變更套用至節點,請使用 Google Cloud CLI 呼叫 gcloud container clusters
upgrade 指令,並傳遞 --cluster-version 旗標,其中包含節點集區已執行的相同 GKE 版本。
不遵守 GKE 維護政策的手動變更
部分手動變更會立即使用節點升級策略重新建立節點,而不遵循維護政策。詳情請參閱「手動變更:使用節點升級策略重建節點,但不遵守維護政策」。
維護期間
您可以透過維護期間控管適用的自動維護作業 (包括自動升級控制層和節點) 的執行時間,降低工作負載短暫中斷的可能性。維護期間適用於下列情況:
- 離峰時段:安排在流量較小的離峰時段自動升級,盡可能降低停機機率。
- 值班待命:一定要在工作時間內進行升級,以利相關人員監控升級作業並管理突發狀況。
- 多叢集升級:您想在不同區域的多個叢集中,以指定間隔一次推出升級。
除了自動升級,Google 有時也需要執行其他維護工作,並盡可能遵守叢集的維護期間。
如果工作執行時間超過維護期間,GKE 會嘗試暫停工作,並在下一個維護期間嘗試繼續執行這些工作。
GKE 保留權利在維護期間外推出非預期緊急升級。此外,如果軟體已淘汰或過時,系統可能會在維護期間外自動執行強制升級。
如要瞭解如何為新叢集或現有叢集設定維護期間,請參閱「設定維護期間」。
如要進一步使用,您也可以透過叢集 disruption budget 自訂特定類型叢集升級作業 (包括修補程式或子版本升級) 之間的最短時間間隔。
維護期間的時區
設定及查看維護期間時,時間的顯示方式會因您使用的工具而異:
設定維護期間時
時間一律以世界標準時間儲存。不過,設定維護時段時,您可以使用世界標準時間或當地時區。
使用較通用的 --maintenance-window 旗標設定維護期間時,無法指定時區。使用 gcloud CLI 或 API 時,系統會採用 UTC; Google Cloud 控制台則會以當地時區顯示時間。
使用更精細的旗標 (例如 --maintenance-window-start) 時,您可以將時區指定為值的一部分。如果省略時區,系統會使用當地時區。
查看維護期間時
查看叢集相關資訊時,維護期間的時間戳記可能會以世界標準時間或當地時區顯示,具體取決於您查看資訊的方式:
- 使用 Google Cloud 控制台查看叢集相關資訊時,系統一律會以您所在時區顯示時間。
- 使用 gcloud CLI 查看叢集相關資訊時,時間一律會以 UTC 顯示。
無論是哪種情況,RRULE一律採用世界標準時間。也就是說,如果指定星期幾,則這些日期會以世界標準時間為準。
維護作業排除時段
透過維護作業排除項目,您可以防止適用的自動維護作業在特定時間範圍內執行。舉例來說,許多零售業的業務指南會禁止在年底節慶期間變更基礎架構。再舉一例,如果公司使用的 API 預計將淘汰,他們可以利用維護排除條件暫停次要升級,爭取時間遷移應用程式。
對於已知的高影響事件,建議您將任何內部變更限制與維護排除項目進行比對,該排除項目應在事件發生前一週開始,並持續到事件結束。
排除條件不會重複。請改為分別建立每個週期性排除條件的執行個體。
如果排除時段和維護期間重疊,系統會優先採用排除時段。
如要瞭解如何為新叢集或現有叢集設定維護作業排除時段,請參閱「設定維護作業排除時段」。
維護作業排除時段類型
您可以為整個叢集設定維護排除時段,也可以只為個別節點集區設定維護排除時段,以取得更精細的控制權。請參閱下列各節,瞭解不同類型的維護排除條件運作方式。
叢集維護作業排除時段
在叢集層級,您可以指定時間,防止叢集自動維護,以及可能發生的自動更新範圍。請參閱下列叢集維護排除範圍,以及相關情境示例:
- 不升級 - 避免任何維護作業:您想在特定時間內暫時避免對叢集進行任何變更。這是預設範圍。
- 不進行子版本升級 - 維持目前的 Kubernetes 子版本:您想維持叢集的子版本,例如避免 API 變更或驗證下一個子版本。
- 不執行子版本或節點升級作業 - 避免節點中斷:您希望避免因節點升級而導致工作負載遭到淘汰和重新排程。
下表列出各個範圍如何限制叢集控制層或節點的子版本或修補程式升級作業。
| 範圍 | 控制層 | 節點 | 排除時間長度上限 | ||
|---|---|---|---|---|---|
| 自動次要升級 | 自動修補程式升級 | 自動升級子版本 | 自動升級修補程式 | ||
| 不執行任何升級作業 (預設) | 不允許 | 不允許 | 不允許 | 不允許 | 不得超過 90 天。 |
| 不執行任何次要升級作業 | 不允許 | 已允許 | 不允許 | 已允許 |
您可以透過下列任一方式設定維護作業排除時段:
|
| 不執行任何次要或節點升級作業 | 不允許 | 已允許 | 不允許 | 不允許 | |
GKE 升級叢集時,控制層和節點的 VM 會重新啟動。對於控制層,Autopilot 和區域 Standard 叢集會維持 Kubernetes API 伺服器可用性。可用區叢集只有一個控制層節點,因此 VM 重新啟動時,控制層會暫時無法使用。如果是節點,VM 重新啟動會觸發 Pod 重新排程,這可能會暫時中斷現有工作負載。您可以使用 Pod 中斷預算 (PDB)設定工作負載中斷容許度。
節點集區維護作業排除時段
如要防止 Standard 叢集中的部分 (而非全部) 節點集區自動升級叢集節點,可以使用節點集區維護排除項目。舉例來說,如果叢集中的某些節點集區需要 GKE 自動升級節點,但其他節點集區需要您自行管理升級作業,則可只針對需要手動控制的節點集區設定排除項目。
啟用這類維護作業排除時段後,只有在節點集區的次要版本支援期結束時,GKE 才會視需要自動升級叢集。詳情請參閱「支援終止時自動升級」。
下表說明維護作業排除時段如何避免節點集區自動升級:
| 維護作業排除時段類型 | 節點 | 排除時間長度上限 | |
|---|---|---|---|
| 自動次要升級 | 自動升級修補程式 | ||
| 節點集區 | 不允許 | 不允許 | 結束時間會追蹤叢集子版本的支援終止時間。 如果您未在支援期結束前,手動將叢集升級至下一個子版本,GKE 會在支援期結束時執行必要的自動升級,然後重新啟用維護作業排除時段,並將結束時間設為新子版本的支援期結束時間。詳情請參閱「維護作業排除設定如何追蹤支援終止時間」。 |
如要使用這類維護排除條件,請採取下列任一做法:
- 建立節點集區,並設定節點集區維護排除項目。
- 為現有節點集區新增節點集區維護排除項目。
- 在 custom
ComputeClass 中設定
nodePoolConfig.maintenanceExclusion欄位。 設定這個欄位後,GKE 會在建立新的 Standard 節點集區或 Autopilot 模式的節點群組時,新增節點集區維護排除項目。詳情請參閱 ComputeClass 規格的「nodePoolConfig」一節。
排除條件到期和啟用
叢集維護作業排除時段會立即生效,或在您設定排除時段時指定的日期和時間生效。
維護作業排除時段會在下列時間過期或停用:
- 固定結束時間:您為排除項目指定的固定結束時間已過。
追蹤支援服務終止日期:如果叢集尚未升級至下一個子版本,且您透過下列任一方式使用維護作業排除時段,則維護作業排除時段會在支援服務終止日期開始時暫時停用:
- 設定叢集維護排除項目的結束時間,追蹤叢集子版本的支援終止日期。
- 設定節點集區維護作業排除時段。
在下列任一情況發生後,GKE 會重新啟用維護作業排除時段:
- GKE 會在支援期限結束時自動升級。
- 您手動升級叢集至下一個子版本。
維護作業排除時段到期 (也就是說,目前時間已超過排除時段的結束時間) 或暫時停用後,該排除時段就不會再阻止 GKE 更新。其他仍有效的排除項目會繼續阻止 GKE 更新。
如果沒有排除項目或其他因素會阻礙叢集升級,GKE 就會逐步將叢集升級至符合資格的自動升級目標。
如果叢集因排除時段而錯過多次子版本升級,GKE 會安排每月升級一次子版本,包括叢集控制層和節點,確保叢集執行支援的版本。您隨時可以執行手動升級,讓叢集更快升級至特定子版本。
維護作業排除設定如何追蹤支援期結束時間
您可以將叢集維護作業排除時段的範圍設為「不執行子版本升級作業」或「不執行子版本或節點升級作業」,追蹤叢集子版本的支援期限,不必手動設定結束時間。節點集區維護作業排除設定也會追蹤支援期結束時間。
如果您設定這類維護排除事項來追蹤支援終止日期,在下列情況下,GKE 會更新維護排除事項的結束時間,以反映新的支援終止日期:
- 您或 GKE 將叢集升級至新的子版本。
- 將叢集註冊至延長版管道,或從延長版管道取消註冊。
- GKE 會更新叢集子版本的支援期限。
如果設定這類維護作業排除時段,但未手動將叢集升級至下一個子版本,GKE 會在支援期結束時執行必要的自動升級,然後重新啟用維護作業排除時段,並根據新子版本的支援期結束時間,設定排除時段的結束時間。
如要進一步瞭解終止支援服務,請參閱「GKE 次要版本生命週期」。如要查看叢集子版本的支援終止日期,請參閱「找出叢集子版本的支援終止日期」。
在支援結束時暫時緊急防止自動升級
做為臨時措施,只有在沒有其他選項的緊急情況下,您可以在支援結束日期後最多 90 天內,設定維護作業排除時段,並將預設範圍設為「不執行任何升級作業」,延後自動升級作業。由於執行不支援的版本會帶來風險,因此我們不建議這麼做。維護排除期限到期後,GKE 會升級叢集。
如果叢集使用的 GKE 版本不受支援,就會有重大安全性、穩定性和相容性風險,因為 GKE 不會為支援終止版本提供安全性修補程式或修正錯誤。GKE 無法保證會為支援終止的版本提供修補程式或更新。
詳情請參閱「支援終止時自動升級」。
維護排除項目如何搭配設定推出作業序列的範圍運作
如果使用自訂階段的推出作業排序功能,您可以指定 GKE 執行自動叢集升級的範圍,類似於維護排除項目。不過,使用推出順序時,您會為推出順序中的所有叢集設定這些範圍,而不是為具有維護排除項目的個別叢集設定。如果叢集位於推出作業序列中,且您也設定了維護排除項目,GKE 會在執行叢集自動升級作業時,遵守限制較嚴格的範圍。舉例來說,如果您允許 GKE 在維護作業排除時段執行控制層修補程式升級,但不允許在推出序列的範圍內執行,GKE 就不會執行這類升級。詳情請參閱「選擇 GKE 在推出序列中執行的升級類型」。
設定維護作業排除時段的限制
叢集維護作業排除時段有下列限制:
- 您只能在維護排除項目中,限制已註冊發布管道的叢集自動升級範圍。對於未註冊發布管道的叢集 (已淘汰),您只能建立具有預設「不執行升級作業」範圍的維護作業排除時段。
- 您最多可以新增三項維護排除條件,排除所有升級作業 (也就是「不執行升級作業」的範圍)。這些排除項目必須經過設定,才能在 92 天的滾動週期內,至少保留 48 小時的維護時間。
- 每個叢集最多可有 20 個叢集維護排除項目。
- 如未在排除項目中指定範圍,系統會預設為「不升級」。
您無法設定維護作業排除時段,使其包含或超過與叢集發布管道註冊項目對應的子版本支援期限,除非是以「不執行升級作業」範圍做為臨時緊急措施。如要在支援終止前後設定固定結束時間,請參閱下列範例:
- 叢集在 Stable 通道中執行子版本,而 GKE 發布時間表指出該版本的標準支援服務終止日期為 2025 年 6 月 5 日。維護作業排除時段的結束時間必須設為
2025-06-05T00:00:00Z或更早。 - 叢集在 Extended 管道中執行子版本,而 GKE 發布時間表指出延長支援服務將於 2026 年 4 月 5 日結束。維護作業排除時段的結束時間必須設為
2026-04-0500:00:00Z或更早。如要將叢集的發布管道變更為其他管道,如果維護排除時間超過標準支援期結束時間,就必須變更維護排除時間的結束時間。詳情請參閱「變更擴充版叢集」。
排除設定可以選擇追蹤支援期結束日期,並在支援期結束日期開始時暫時停用,直到叢集升級至下一個子版本為止。
- 叢集在 Stable 通道中執行子版本,而 GKE 發布時間表指出該版本的標準支援服務終止日期為 2025 年 6 月 5 日。維護作業排除時段的結束時間必須設為
節點集區維護作業排除時段有下列限制:
- 叢集必須在發布管道中註冊。
- 每個節點集區只能設定一個節點集區維護排除項目。
- 您無法將節點集區維護作業排除時段設在未來。啟用維護排除作業後,系統會立即開始排除作業。
- 您無法在 Autopilot 叢集使用節點集區維護排除項目,因為 GKE 會管理 Autopilot 叢集的節點。
- 節點集區維護作業排除項目只會禁止節點升級 (版本更新),不會禁止其他類型的節點更新。
維護作業排除時段不會影響手動升級和新節點的版本
視維護作業排除項目的範圍而定,維護作業排除項目可防止現有控制層和節點自動升級。不過,維護排除項目不會阻止下列變更:
- 手動升級叢集的控制層或節點。
- 建立新的 Standard 節點集區,版本比現有 Standard 節點集區更新,且維護排除規則會禁止自動升級。
- 自動佈建節點功能建立的下列資源版本高於現有節點,且維護作業排除項目會禁止自動升級:
- 新的標準節點集區。
- Autopilot 叢集中的新節點。
假設您為叢集建立維護作業排除時段,範圍是 GKE 自動升級控制層,但不會升級節點,在這種情況下,GKE 可能會建立新的節點集區,或透過自動佈建建立節點,這些節點會執行控制層的後續修補程式版本。
叢集節點只能執行與控制層相同或較舊的 GKE 版本。維護作業排除項目可防止現有節點自動升級。如果控制層的版本高於現有節點,則新建立或手動升級的節點,執行的 GKE 版本可能會高於因維護排除項目而無法自動升級的節點。
多項排除條件
您可以為叢集設定多個排除項目,包括節點集區排除項目。這些排除項目可以有不同的範圍和重疊的日期範圍。年終節慶季節使用案例是重疊排除項目的範例,其中「不升級」和「不執行子版本升級作業」範圍都在使用中。
如果排除項目重疊,且有任何有效的排除項目 (即目前時間在排除時間範圍內) 封鎖升級,升級作業就會延後。
以年終節慶季節應用情境為例, 叢集指定了下列排除條件:
- 不執行子版本升級作業:9 月 30 日至 1 月 15 日
- 不執行升級作業:11 月 19 日至 12 月 4 日
- 無法升級:12 月 15 日至 1 月 5 日
由於這些排除時段重疊,叢集將無法執行下列升級作業:
- 11 月 25 日節點集區的修補程式升級 (因「不執行任何升級作業」 排除條件而遭拒)
- 12 月 20 日控制層微幅升級 (因「不執行子版本升級作業」和「不執行升級作業」排除條件而遭拒)
- 12 月 25 日對控制層進行修補程式升級 (因「不升級」排除條件而遭拒)
- 1 月 1 日節點集區的次要升級 (因「不執行子版本升級作業」和「不執行升級作業」排除項目而遭拒)
叢集可進行下列維護作業:
- 11 月 10 日對控制層執行修補程式升級 (「不執行子版本升級」排除項目允許這項作業)
- 12 月 10 日因 GKE 維護作業導致 VM 中斷 (「不得執行子版本升級作業」排除項目允許)
使用範例
以下列舉幾個限制更新範圍的用途。
範例:零售商準備迎接年末節慶檔期
在這個例子中,零售商不希望在銷售量最高的時期發生中斷,也就是從黑色星期五到網購星期一的四天,以及 12 月到新年開始。為了因應購物季,叢集管理員設定了下列排除條件:
- 不執行子版本升級:9 月 30 日至 1 月 15 日期間,只允許在控制層和節點上執行修補程式更新。
- 不執行升級作業:11 月 19 日至 12 月 4 日期間,暫停所有升級作業。
- 不執行升級作業:12 月 15 日至 1 月 5 日期間,凍結所有升級作業。
如果維護作業排除時段到期時,沒有其他排除時段適用,且 9 月 30 日至 1 月 6 日之間有新的 GKE 子版本發布,叢集就會升級至該版本。
範例:公司在 Kubernetes 中使用即將移除的 Beta 版 API
在這個範例中,某公司使用 CustomResourceDefinition
apiextensions.k8s.io/v1beta1 API,該 API 將在 1.22 版中移除。如果公司執行的版本低於 1.22,叢集管理員會設定下列排除項目:
- 不執行子版本升級作業:在將客戶應用程式從
apiextensions.k8s.io/v1beta1遷移至apiextensions.k8s.io/v1的期間,暫停三個月的子版本升級作業。
示例:公司舊版資料庫無法因應節點集區升級
在這個範例中,某公司執行的資料庫無法妥善回應節點集區升級期間發生的 Pod 驅逐和重新排程作業。叢集管理員會設定下列排除項目:
- 不執行子版本或節點升級作業:凍結節點升級作業三個月。當公司準備好接受資料庫停機時,就會觸發手動節點升級。
示例:公司同時執行一般用途和容錯工作負載
在這個範例中,某公司使用一個叢集執行混合工作負載,其中有些工作負載可容許節點自動升級,有些則不行。叢集管理員希望 GKE 處理部分節點集區的節點升級作業,但其他節點集區則不處理。叢集管理員會針對只能手動升級的節點集區,使用節點集區維護排除項目。