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