設定維護期間和排除項目

您可以設定維護期間和排除時段,允許或禁止系統在某個時段執行 Google Kubernetes Engine (GKE) 叢集維護作業 (例如自動升級叢集)。設定這些維護政策前,請務必先瞭解哪些變更會遵守 GKE 維護政策,哪些不會。

事前準備

開始之前,請務必先完成下列工作:

  • 啟用 Google Kubernetes Engine API。
  • 啟用 Google Kubernetes Engine API
  • 如要使用 Google Cloud CLI 執行這項工作,請安裝並初始化 gcloud CLI。如果您先前已安裝 gcloud CLI,請執行 gcloud components update 指令,取得最新版本。較舊的 gcloud CLI 版本可能不支援執行本文中的指令。

設定維護期間

如要設定維護期間,請指定開始時間、持續時間和重複頻率。舉例來說,您可以設定每週一到週五每天四小時的維護期間。

您可以使用 Google Cloud 控制台或 Google Cloud CLI 設定維護期間。

設定維護期間的注意事項

設定維護期間時,請遵循下列指引:

  • 瞭解哪些類型的維護事件會遵循 GKE 維護期間,哪些不會。詳情請參閱「自動維護作業會遵守 GKE 維護政策」和「自動維護作業不會遵守 GKE 維護政策」。
  • 一個叢集只能設定一個維護時段,設定新時段會覆寫先前的時段。
  • 在每個連續 92 天的滾動週期內,至少必須安排 48 小時執行維護作業,而且每次作業時間至少須持續 4 小時。
  • 使用 Google Cloud 控制台時,時間一律會以當地時區顯示。
  • 重複星期幾一律以世界標準時間為準。因此,我們建議您透過 gcloud CLI,以 UTC 格式設定涉及這類週期性事件的維護期。設定標記時可以使用當地時間,但系統不會儲存時區。舉例來說,如果您的時區是 UTC+6,且希望維護期間從您時區的星期三 02:00 開始,請將 UTC 值指定為星期二 20:00。詳情請參閱「維護期間的時區」。

設定維護期間

您可以使用Google Cloud 控制台或 gcloud CLI,在現有叢集上設定維護期間。維護期間會持續重複,直到你移除維護期間為止。

gcloud

為現有叢集建立或更新維護期間:

gcloud container clusters update CLUSTER_NAME \
    --maintenance-window-start START_TIME \
    --maintenance-window-duration DURATION \
    --maintenance-window-recurrence RRULE

更改下列內容:

  • CLUSTER_NAME:叢集名稱。
  • START_TIME:週期性維護期間的開始時間,以 RFC-5545 DTSTART 值表示。您也可以加入未來日期,讓維護期間在未來日期之後,才開始根據 RRULE 重複。如果只提供日期,系統會將時間預設為當天午夜。
  • DURATION:維護時段的長度,以 ISO 8601 時間長度表示,單位為小時、分鐘和秒。您必須將維護期間設為至少 4 小時 (4H)。
  • RRULE:維護期間的週期,以 RFC-5545 RRULE 表示。這種格式相當靈活,可透過多種方式指定重複規則,決定維護期間的開始日期。例如,您可以指定每週或每月重複特定次數。如果 END_TIME 日期大於 START_TIME 日期,維護期間就會跨越多天。舉例來說,如果維護期間從週日開始,就會持續到週一。

舉例來說,下列指令會編輯名為 my-cluster 的叢集,並在 2024 年 8 月 23 日星期五世界標準時間凌晨 2 點啟用維護期間。這個維護期間每週一和週五都會重複,並在 30 小時後結束。維護期間首次出現的時間為 8 月 23 日星期五凌晨 2:00,結束時間為 8 月 24 日星期六上午 8:00。您可以進一步瞭解日期和時間的格式。

gcloud container clusters update my-cluster \
    --maintenance-window-start 2024-08-23T02:00:00Z \
    --maintenance-window-duration 30H \
    --maintenance-window-recurrence 'FREQ=WEEKLY;BYDAY=MO,FR'

如需更多情境,請參閱維護期間範例。

控制台

如要為現有叢集建立或修改維護期間:

  1. 前往 Google Cloud 控制台的「Google Kubernetes Engine」頁面。

    前往「Google Kubernetes Engine」

  2. 在叢集清單中,按一下您要修改的叢集名稱。

  3. 在「Automation」(自動化) 下方,按一下「Maintenance window」(維護期間) 欄位旁的「Edit maintenance policy」(編輯維護政策)。

  4. 勾選「啟用維護期間」核取方塊。

  5. 選取開始時間和長度,然後選取維護期間的星期幾。如要直接編輯 RRule,請選取「自訂編輯器」。

  6. 按一下 [儲存變更]。

手動完成未完成的維護作業

如果升級或其他自動維護作業的完成時間超過維護期間,GKE 會嘗試停止進行中的維護工作,並在下一個維護期間恢復作業。如果取消自動升級,且您已啟用節點自動升級功能,節點可能會處於混合版本狀態,但叢集應可正常運作。

如要手動升級叢集,或取消或復原部分升級作業,請參閱「手動升級叢集」。

移除維護期間

gcloud

從叢集移除維護期間:

gcloud container clusters update CLUSTER_NAME --clear-maintenance-window

將 CLUSTER_NAME 替換為現有叢集的名稱。

控制台

如要移除維護期間:

  1. 前往 Google Cloud 控制台的「Google Kubernetes Engine」頁面。

    前往「Google Kubernetes Engine」

  2. 在叢集清單中,按一下您要修改的叢集名稱。

  3. 在「Automation」(自動化) 下方,按一下「Maintenance window」(維護期間) 欄位旁的「Edit maintenance policy」(編輯維護政策)。

  4. 取消勾選「啟用維護期間」核取方塊。

  5. 按一下 [儲存變更]。

維護期間範例

以下範例說明設定維護期間的幾種不同方式。系統只會顯示相關的旗標,因為旗標使用相同的語法建立新叢集或更新現有叢集。

2026 年 8 月 22 日起,週末

在這個範例中,開始和結束時間戳記之間相差整整兩天,因此維護期間會涵蓋整個週末,也就是週六和週日。如果想將時間範圍設為 48 小時以外的時間長度,請修改 --maintenance-window-duration 旗標設定的值。

  --maintenance-window-start 2026-08-22T00:00:00Z \
  --maintenance-window-duration 48H \
  --maintenance-window-recurrence 'FREQ=WEEKLY;BYDAY=SA'

平日每天 9:00 至 17:00 (UTC-4)

這個範例說明如何設定每日維護期間,但略過週末。這個範例指定了非世界標準時間的時區。

   --maintenance-window-start 2026-09-02T09:00:00-04:00 \
   --maintenance-window-duration 8H \
   --maintenance-window-recurrence 'FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR'

每週下午 4 點 (UTC-7) 執行 8 小時

如果未指定 --maintenance-window-start 的時區,系統會使用您 Google Cloud 帳戶中設定的當地時間。 Google Cloud 控制台一律使用當地時間。

   --maintenance-window-start 2026-08-13T16:00:00-7:00 \
   --maintenance-window-duration 8H \
   --maintenance-window-recurrence 'FREQ=WEEKLY'

平日晚上

這個範例顯示每日維護期間,會在 UTC-7 時區的工作日之間,於夜間執行。在這個範例中,時間範圍為晚上 8 點到隔天凌晨 4 點。

   --maintenance-window-start 2026-08-15T20:00:00-7:00 \
   --maintenance-window-duration 8H \
   --maintenance-window-recurrence 'FREQ=WEEKLY;BYDAY=MO,TU,WE,TH'

設定維護作業排除時段

您可以使用 GKE 設定兩種維護作業排除時段:叢集維護作業排除時段和節點集區維護作業排除時段。詳情請參閱「維護排除類型」。

下列資訊適用於叢集維護排除時段。如要進一步瞭解節點集區維護作業排除設定的相關規定,請參閱「節點集區維護作業排除設定」。

如要為叢集設定叢集維護排除項目,您必須指定下列項目:

  • 名稱:排除條件的名稱 (選填)。
  • 開始時間:排除期開始的日期和時間。 開始時間必須是現在或未來。
  • 結束時間:排除期間的結束日期和時間。請參閱下表,瞭解各適用範圍的排除期間長度限制。如要追蹤叢集次要版本的支援終止日期,您可以為特定範圍的維護排除作業設定結束時間。
  • 範圍:要限制自動升級的範圍。請參閱下表,瞭解可用的排除範圍。
範圍 控制層 節點 排除時間長度上限
自動升級子版本 自動升級修補程式 自動升級子版本 自動升級修補程式
不執行任何升級作業 (預設) 不允許 不允許 不允許 不允許 不得超過 90 天。
不執行任何次要升級作業 不允許 已允許 不允許 已允許

您可以透過下列任一方式設定維護作業排除時段:

不執行任何次要或節點升級作業 不允許 已允許 不允許 不允許

如何設定維護作業排除時段

您可以使用Google Cloud 控制台建立叢集,並排除叢集維護作業,也可以使用 Google Cloud 控制台或 gcloud CLI,為現有叢集設定叢集維護排除時段。使用 gcloud CLI 時,您可以選擇性地設定叢集維護作業排除時段的結束時間,追蹤叢集次要版本的支援結束日期。

您可以使用 gcloud CLI 建立節點集區維護排除項目。

建立叢集並排除叢集維護作業

使用 Google Cloud 控制台建立新叢集時,您可以設定叢集維護排除項目。這項工作無法透過 gcloud CLI 執行。

如要建立新叢集並設定叢集維護作業排除時段,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台的「Google Kubernetes Engine」頁面。

    前往「Google Kubernetes Engine」

  2. 按一下「建立」,然後在「標準」或「Autopilot」部分中,按一下「設定」。

  3. 設定叢集基本資訊,例如叢集名稱和位置。

  4. 在導覽窗格中,按一下「進階設定」,然後執行下列任一操作:

    • Autopilot:展開「自動化」。按一下 「Add maintenance exclusion」(新增維護作業排除時段),然後選取「Exclusion type」(排除類型)、「Start time」(開始時間) 和「End time」(結束時間)。
    • 標準:在「維護政策」列中,按一下「編輯設定」。按一下「新增維護排除條件」,選取「排除條件類型」、「開始時間」和「結束時間」,然後按一下「儲存」。
  5. 點選「建立」。

您可以參閱黑色星期五的維護作業排除範例。

為現有叢集設定叢集維護作業排除時段

您可以使用 Google Cloud 控制台或 gcloud CLI,為現有叢集設定叢集維護排除項目。使用 gcloud CLI 時,您可以選擇設定維護排除事項的結束時間,追蹤叢集次要版本的支援結束日期。

gcloud

  • 固定結束時間:為現有叢集設定固定結束時間的維護作業排除時段:

    gcloud container clusters update CLUSTER_NAME \
        --add-maintenance-exclusion-name EXCLUSION_NAME \
        [--add-maintenance-exclusion-start START_DATE_TIME \]
        --add-maintenance-exclusion-end END_DATE_TIME \
        --add-maintenance-exclusion-scope SCOPE
    

    更改下列內容:

    • CLUSTER_NAME:叢集名稱。
    • EXCLUSION_NAME:維護作業排除項目的名稱。
    • START_DATE_TIME:視需要設定排除項目的開始日期和時間,如果省略這個標記,維護作業排除時段會立即生效。
    • END_DATE_TIME:排除條件的結束日期和時間。
    • SCOPE:要排除的升級範圍,可以是下列其中一個值:no_upgrades、no_minor_upgrades 或 no_minor_or_node_upgrades。

    如要查看支援的日期和時間格式,請執行 gcloud topic datetimes。

  • 在支援結束時終止:設定維護排除項目,追蹤叢集子版本的支援結束日期:

    gcloud container clusters update CLUSTER_NAME \
        --add-maintenance-exclusion-name EXCLUSION_NAME \
        [--add-maintenance-exclusion-start START_DATE_TIME \]
        --add-maintenance-exclusion-until-end-of-support \
        --add-maintenance-exclusion-scope SCOPE
    

控制台

如要為現有叢集設定維護作業排除時段,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台的「Google Kubernetes Engine」頁面。

    前往「Google Kubernetes Engine」

  2. 在叢集清單中,按一下您要修改的叢集名稱。

  3. 在「自動化」下方,按一下「維護作業排除項目」欄位旁的 「編輯維護作業排除項目」。

  4. 在「維護作業排除時段」下方,按一下 「新增維護作業排除時段」。

  5. 選取「範圍」、「開始時間」和「結束時間」。

  6. 按一下 [儲存變更]。

建立節點集區,並排除節點集區維護作業

使用 gcloud CLI 建立節點集區,並排除節點集區維護作業:

gcloud container node-pools create POOL_NAME \
    --cluster CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION \
    --add-maintenance-exclusion-until-end-of-support

更改下列內容:

  • POOL_NAME:新節點集區的名稱。
  • CLUSTER_NAME:叢集名稱。
  • CONTROL_PLANE_LOCATION:叢集控制層的 Compute Engine 位置。提供區域叢集的區域,或可用區叢集的可用區。

如要進一步瞭解如何使用這個指令設定節點集區,請參閱 gcloud container node-pools create 參考資料。

為現有節點集區新增節點集區維護排除項目

如要為現有節點集區設定節點集區維護排除作業,請使用 gcloud CLI:

gcloud container node-pools update POOL_NAME \
    --cluster CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION \
    --add-maintenance-exclusion-until-end-of-support

更改下列內容:

  • POOL_NAME:現有節點集區的名稱。
  • CLUSTER_NAME:叢集名稱。
  • CONTROL_PLANE_LOCATION:叢集控制層的 Compute Engine 位置。如果是區域叢集,請提供區域;如果是可用區叢集,請提供可用區。

如要進一步瞭解如何使用這個指令設定節點集區,請參閱 gcloud container node-pools update 參考資料。

移除維護作業排除時段

您可以使用 Google Cloud 控制台或 gcloud CLI 移除叢集維護排除項目。如要移除節點集區維護作業排除項目,請使用 gcloud CLI。

移除叢集維護排除項目

gcloud

如要移除現有的叢集維護排除項目,請執行下列指令:

gcloud container clusters update CLUSTER_NAME \
    --remove-maintenance-exclusion EXCLUSION_NAME

更改下列內容:

  • CLUSTER_NAME:現有叢集的名稱。
  • EXCLUSION_NAME:要移除的維護排除項目名稱。

控制台

如要從現有叢集中移除維護排除項目,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台的「Google Kubernetes Engine」頁面。

    前往「Google Kubernetes Engine」

  2. 在叢集清單中,按一下您要修改的叢集名稱。

  3. 在「自動化」下方的「維護排除條件」欄位旁,按一下「編輯維護排除條件」。

  4. 在「維護排除項目」下方,找出要移除的排除項目,然後按一下「結束時間」欄位旁邊的「刪除項目」圖示 。

  5. 按一下 [儲存變更]。

如要查看叢集的所有維護作業排除項目,請查看叢集的維護政策。

移除節點集區維護排除項目

為現有節點集區移除節點集區維護排除項目:

gcloud container node-pools update POOL_NAME \
    --cluster CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION \
    --remove-maintenance-exclusion-until-end-of-support

更改下列內容:

  • POOL_NAME:現有節點集區的名稱。
  • CLUSTER_NAME:叢集名稱。
  • CONTROL_PLANE_LOCATION:叢集控制層的 Compute Engine 位置。提供區域叢集的區域,或可用區叢集的可用區。

如要進一步瞭解如何使用這個指令設定節點集區,請參閱 gcloud container node-pools update 參考資料。

維護作業排除時段範例

以下範例可避免在黑色星期五到網購星期一這四天進行維護,因為這段期間是許多零售業一年中銷售量最高的時期。以下範例說明如何防止維護期間在 2021 年黑色星期五 (2021 年 11 月 26 日) 至 2021 年網購星期一 (2021 年 11 月 29 日) 之間發生,時間為美東時間 (UTC-5) 午夜至太平洋時間 (UTC-8) 23:59:59。

gcloud container clusters update sample-cluster \
    --add-maintenance-exclusion-name black-friday \
    --add-maintenance-exclusion-start 2021-11-26T00:00:00-05:00 \
    --add-maintenance-exclusion-end 2021-11-29T23:59:59-08:00 \
    --add-maintenance-exclusion-scope no_upgrades

查看叢集的維護政策

如要查看叢集的維護政策,包括是否有維護時段和所有維護排除項目,請使用下列指令:

gcloud container clusters describe CLUSTER_NAME

找出未設定維護期間的叢集

GKE 會找出尚未設定維護期間的叢集,方便您選擇週期性時間範圍,讓 GKE 執行叢集維護作業。建議您設定維護期間,確保 GKE 在最適合叢集環境的時間,執行自動升級和其他叢集維護作業 (遵守維護政策)。

GKE 會透過 Recommender 服務,以深入分析和建議的形式提供這項指引。如要進一步瞭解如何管理 Recommender 的深入分析和建議,請參閱「運用深入分析和建議,最佳化 GKE 用量」。

如要找出未設定維護期間的叢集,請使用下列其中一種方式:

  • 使用 Google Cloud 控制台。
  • 使用 gcloud CLI 或 Recommender API,並指定 CLUSTER_MAINTENANCE_WINDOW_AND_EXCLUSIONS recommender 子類型。

如需操作說明,請參閱「查看洞察資料和建議」。

如要套用這項建議,請設定維護時段。

疑難排解

請按照下列資訊,排解維護期間和排除時段的常見問題。

維護期間,導致節點更新無法完成

如果叢集無法在排定的維護期間完成節點更新 (例如節點版本升級),升級速度可能會變慢,或節點變更作業會延遲完成。您可能需要嘗試調整設定,在速度和環境中斷之間取得最佳平衡。可能影響升級率的因素包括:

限制維護作業排除時段的範圍只能套用至發布管道

在維護排除條件中限制自動升級範圍時,叢集必須註冊發布管道,否則可能會遇到下列錯誤:

ERROR: (gcloud.container.clusters.update) INVALID_ARGUMENT: Cannot update to
STATIC channel since following maintenancePolicy.maintenanceExclusions can only
apply to release channels. Please remove those maintenance exclusions.
ERROR: (gcloud.container.clusters.update) ResponseError: code=400,
message=MaintenancePolicy.maintenanceExclusions["no"] could not apply to cluster
in STATIC channel, only no_upgrades exclusions are allowed in STATIC channel.

維護作業排除時段超過上限

您最多只能指定 3 個排除所有升級作業的維護作業排除時段 (也就是「不執行升級作業」的範圍),否則會收到下列錯誤訊息:

ERROR: (gcloud.container.clusters.update) ResponseError: code=400,
message=Number of active maintenance exclusions exceeds limit (3).

您最多只能指定 20 項維護排除項目,否則會收到下列錯誤訊息:

ERROR: (gcloud.container.clusters.update) ResponseError: code=400,
message=Number of total maintenance exclusions exceeds limit (20).

後續步驟