依序推出叢集升級作業

本文說明如何透過推出作業排序功能管理 GKE 叢集升級作業。如要進一步瞭解這項功能的運作方式,請參閱「關於透過推出順序升級叢集」。

事前準備

  • 安裝 Google Cloud CLI。 安裝完成後,請執行下列指令,初始化 Google Cloud CLI:

    gcloud init

    若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI

  • 請確認您已建立 Autopilot 或 Standard 叢集。如要建立新叢集,請參閱「建立 Autopilot 叢集」。
  • 確認已啟用車隊所需的 API。如要建立任何類型的推出順序,必須在機群主專案中啟用這些 API。
  • 如需 Terraform 操作說明,請務必使用 google 供應程式 5.13.0 以上版本。

必要的角色

如要建立或修改推出順序,您必須在推出順序中的每個專案中,獲派 roles/gkehub.editor IAM 角色。機群編輯者 (原稱 GKE Hub 編輯者) 角色提供 gkehub.features.creategkehub.fleet.update 權限,可存取及修改專案間的機群相關資源。這個角色提供必要的權限,可定義升級策略、存取及修改相關資源,並啟動及管理推出程序。

如要註冊叢集至機群或從機群取消註冊,您必須具備下列所有權限:

如要進一步瞭解不同工作所需的最低權限 IAM 角色,請參閱「透過 Gemini 輔助取得預先定義的角色建議」。

設定推出作業序列

本文說明如何使用按機群排序的叢集群組,建立推出作業序列。

您最多可以建立五組叢集序列,並在完成一組叢集的升級後,選擇要進行浸泡測試的時間 (最多 30 天)。您可以同時加入 Autopilot 和 Standard 叢集。

如要建立推出作業順序,叢集必須整理成機群群組。如要瞭解如何整理叢集,請參閱社群銀行範例。將叢集歸入群組後,請定義上游群組關係和各群組的過渡時間,藉此建立推出順序。在推出作業序列中,「上游」是指前一個群組,「下游」是指下一個群組。

將叢集整理成群組

在推出順序中,所有群組中的所有叢集都必須註冊同一個發布版本,並使用相同的子版本。如果未符合這些規定,且叢集之間有版本差異,可能會導致版本推出時發生問題。詳情請參閱「車隊式推出資格」。

如果您已將叢集整理為機群,可以略過下列步驟,直接建立推出順序

  1. 將叢集分組到機群中。您可以依部署環境 (例如測試、預備和正式環境) 整理叢集,如以機群為基礎的推出作業排序範例所示。

  2. 根據所選分組,將每個叢集註冊至機群

建立推出作業序列

推出順序會整理為連結清單,最多包含五個元素。

建立推出作業序列時,您會為各叢集機群設定下列屬性:

  • 上游群組:上游機群,會限定下游群組的新版本。您不會為序列中的第一個群組設定上游群組。
  • 過渡時間:群組的過渡時間是指升級完成 (或推出作業已執行 30 天) 到下游群組開始升級之間的時間。詳情請參閱「推出順序中的版本資格運作方式」。

控制台

  1. 前往 Google Cloud 控制台的「推出順序」頁面。

    前往「推出作業排序功能」

  2. 按一下「建立推出作業序列」

  3. 在「建立推出序列」窗格中,選取序列中的前兩個車隊:

    1. 在「機群 1」部分中,選取序列中的第一個機群。
    2. 在「Soak time for upstream fleet」(上游車隊的浸泡時間) 區段,使用「Days」(天)、「Hours」(小時) 和「Minutes」(分鐘) 欄位,設定第一個車隊的浸泡時間。
    3. 在「車隊 2」部分中,選取序列中的第二個車隊。
    4. 點選「建立」
  4. 選用:如要在這次的推出程序中加入三個以上的車隊,請完成下列額外步驟:

    1. 在「推出作業圖表」中,按一下第二個機群的元素。
    2. 按一下 「新增下游機群」
    3. 在「上游機群的浸泡時間」部分,使用「天數」、「時數」和「分鐘數」欄位,設定第二個機群的浸泡時間。
    4. 在「序列中的下一個機群」部分,選取序列中的第三個機群。
    5. 按一下 [儲存]
    6. 如要新增第四或第五支車隊,請重複上述步驟。

gcloud

下列操作說明使用 gcloud container fleet clusterupgrade update 指令,但您也可以使用 gcloud container fleet clusterupgrade create 指令設定相同屬性。

請將下列每個指令中的 SOAK_TIME 替換為要更新的機群浸泡時間。

建立推出作業序列:

  1. 為序列中的第一個機群設定浸泡時間:

    gcloud container fleet clusterupgrade update \
        --default-upgrade-soaking=SOAK_TIME \
        --project=FIRST_FLEET_PROJECT_ID
    

    FIRST_FLEET_PROJECT_ID 替換為車隊主專案的專案 ID。

  2. 設定上游機群,以及序列中第二個機群的浸泡時間:

    gcloud container fleet clusterupgrade update \
        --upstream-fleet=FIRST_FLEET_PROJECT_ID \
        --default-upgrade-soaking=SOAK_TIME \
        --project=SECOND_FLEET_PROJECT_ID
    

    FIRST_FLEET_PROJECT_ID 替換為第一個車隊託管專案的專案 ID,並將 SECOND_FLEET_PROJECT_ID 替換為車隊託管專案的專案 ID。

  3. 選用步驟:如要在推出序列中加入超過兩個機群,請為序列中的下一個機群設定上游機群。

    下列指令會為序列中的第三個機群設定上游機群。如要新增第四或第五個機群,請重複這個步驟,並按照相同模式,將變數替換為相應機群主機專案的專案 ID (前一個機群和下一個機群)。

    為序列中的下一個機群設定上游機群:

    gcloud container fleet clusterupgrade update \
        --upstream-fleet=SECOND_FLEET_PROJECT_ID \
        --default-upgrade-soaking=SOAK_TIME \
        --project=THIRD_FLEET_PROJECT_ID
    

    SECOND_FLEET_PROJECT_ID 替換為第二個車隊主專案的專案 ID,並將 THIRD_FLEET_PROJECT_ID 替換為車隊主專案的專案 ID。

Terraform

本節說明如何使用 Terraform 建立以車隊為基礎的序列。您也可以使用這項資源更新序列。詳情請參閱 google_gke_hub_feature 的參考說明文件。

請將下列每個指令中的 SOAK_TIME 替換為要更新的機群浸泡時間。

建立推出作業序列:

  1. 在 Terraform 設定中新增下列區塊,為序列中的第一個機群設定浸泡時間:

    resource "google_gke_hub_feature" "feature" {
      name = "clusterupgrade"
      location = "global"
      spec {
        clusterupgrade {
          upstream_fleets = []
          post_conditions {
            soaking = "SOAK_TIME"
          }
        }
      }
      project = "FIRST_FLEET_PROJECT_ID"
    }
    

    FIRST_FLEET_PROJECT_ID 替換為車隊主專案的專案 ID。

  2. 在 Terraform 設定中新增下列區塊,為序列中的第二個車隊設定上游車隊和浸泡時間:

    resource "google_gke_hub_feature" "feature" {
      name = "clusterupgrade"
      location = "global"
      spec {
        clusterupgrade {
          upstream_fleets = ["FIRST_FLEET_PROJECT_ID"]
          post_conditions {
            soaking = "SOAK_TIME"
          }
        }
      }
      project = "SECOND_FLEET_PROJECT_ID"
    }
    

    FIRST_FLEET_PROJECT_ID 替換為第一個車隊託管專案的專案 ID,並將 SECOND_FLEET_PROJECT_ID 替換為車隊託管專案的專案 ID。

  3. 選用:如要在推出順序中加入三個機群,請在 Terraform 設定中新增下列區塊,為順序中的機群設定上游機群:

    resource "google_gke_hub_feature" "feature" {
      name = "clusterupgrade"
      location = "global"
      spec {
        clusterupgrade {
          upstream_fleets = ["SECOND_FLEET_PROJECT_ID"]
          post_conditions {
            soaking = "SOAK_TIME"
          }
        }
      }
      project = "THIRD_FLEET_PROJECT_ID"
    }
    

    SECOND_FLEET_PROJECT_ID 替換為第二個車隊託管專案的專案 ID,並將 THIRD_FLEET_PROJECT_ID 替換為車隊託管專案的專案 ID。

    如要新增第四或第五支車隊,請重複這個步驟。

查看推出作業序列的狀態

您可以透過下列任一方法,查看推出序列的狀態:

  • 在 Google Cloud 控制台 (預覽版) 中,監控發布順序的視覺化呈現方式。
  • 使用 gcloud CLI 或 GKE Hub API 檢查推出作業序列的狀態。

如要使用上述任一方法查看推出順序,請確保您擁有每個機群主機專案的 roles/gkehub.viewer IAM 角色,尤其是當順序包含不同專案中的機群時。如果沒有專案的必要權限,檢查序列狀態時會發生錯誤。

在 Google Cloud 控制台中監控推出作業序列

  1. 前往 Google Cloud 控制台的「推出順序」頁面。

    前往「推出作業排序功能」

  2. 在「監控推出作業序列」一節中查看序列。如果沒有看到推出順序,請改用其他推出順序,或建立推出順序 (如尚未建立)。

如何使用控制台監控推出作業序列

這個頁面會顯示與專案車隊相關聯的發布順序。如要查看推出作業序列的進度,請按照下列步驟操作:

  • 查看整個推出順序,或查看機群和機群內叢集的狀態,以及機群之間的浸泡時間。如要查看序列的設定,您也可以查看沒有有效升級的序列。
  • 按照升級類型 (控制層或節點升級) 和特定版本 (例如 1.31.6-gke.500) 篩選。

GKE 升級序列中的所有叢集時,您可以透過視覺化方式監控整個推出作業序列,在升級正式環境叢集之前,先在各個環境中檢驗新版本。監控期間,您可以使用 gcloud CLI 管理推出順序,並視需要進行變更。

切換至其他推出作業序列

如果Google Cloud 控制台中的現有專案是已註冊推出作業序列的機群主機專案,這個頁面就會顯示推出作業序列。

如要查看其他推出作業序列,請從頁面頂端的專案挑選器中,選取與其他推出作業序列相關聯的機群主機專案。

使用 gcloud CLI

您可以查看推出作業序列、序列中的機群,或機群中的個別叢集狀態。

  • 如要檢查以車隊為準的推出順序狀態,請執行下列指令:

    gcloud container fleet clusterupgrade describe \
        --show-linked-cluster-upgrade --project=FLEET_PROJECT_ID
    

    FLEET_PROJECT_ID 替換為序列中任何車隊的託管專案專案 ID。如需完整旗標清單,請參閱 gcloud container fleet clusterupgrade describe 參考資料。

  • 如要只檢查序列中一個車隊的狀態,請在上述指令中將 --show-linked-cluster-upgrade 旗標替換為 --show-cluster-upgrade 旗標。

  • 如要查看機群中個別叢集的狀態,請在機群主機專案中執行下列指令,並查看 membershipStates 區段:

    gcloud container fleet features describe clusterupgrade
    

以下章節說明輸出結果中的狀態資訊。

推出作業序列的狀態資訊

查看版本推出狀態時,您可以瞭解每個群組的進度,以及該群組內叢集的進度。

叢集或群組的可能狀態如下表所示:

狀態 單一叢集 車隊
不符合資格 這個叢集不符合升級條件 這個群組中有一或多個叢集不符合升級條件。
待處理 叢集或部分標準節點集區,或 Autopilot 叢集中的節點群組,升級作業處於待處理狀態。 群組中的任何叢集都尚未開始升級。
IN_PROGRESS 叢集正在升級。 至少有一個叢集已開始升級,但所有叢集尚未完成升級。
SOAKING 叢集已完成升級,但尚未完成浸潤。 所有叢集都已完成升級,但尚未完成浸潤測試。
FORCED_SOAKING 升級作業超過最長升級時間 (30 天),因此我們強制進入過渡期。叢集仍可繼續升級。 升級作業超過最長升級時間 (30 天),因此我們強制進入過渡期。叢集仍可繼續升級。
完成 升級作業會視為「完成」,也就是說,這個叢集已完成升級過渡期。 升級作業會視為「完成」,並可供下游群組使用,也就是升級作業已完成浸潤。

在這些指令的輸出內容中,clusterUpgrade(s).specclusterUpgrade(s).state 屬性包含叢集升級的其他資訊,例如浸泡時間、叢集升級覆寫和升級狀態。

管理推出作業序列

您可以透過推出作業排序功能,以多種方式控管叢集自動升級作業,詳情請參閱以下章節。

變更群組的浸泡時間

您可以變更群組的預設浸泡時間,也可以變更群組升級至特定版本時的浸泡時間。最長不得超過 30 天。

更新預設浸泡時間

您可以在 Google Cloud 控制台 (預覽版) 或使用 gcloud CLI 更新預設浸泡時間。

控制台

  1. 前往 Google Cloud 控制台的「推出順序」頁面。

    前往「推出作業排序功能」

  2. 在「監控推出作業序列」一節中查看序列。如果沒有看到推出順序,請改用其他推出順序,或建立推出順序 (如尚未建立)。

  3. 在「推出圖表」中,按一下要更新浸泡時間的機群元素後方的「浸泡時間」元素。

  4. 按一下 「編輯浸泡時間」

  5. 在「設定新的浸泡時間」部分,使用「天」、「時」和「分」欄位輸入新的浸泡時間。

  6. 如要儲存設定,請按一下「儲存」

gcloud

如要變更群組的預設浸泡時間,請使用「建立推出程序」操作說明中的 gcloud CLI 指令,並省略設定上游群組的標記。

覆寫預設浸泡時間

您可以變更特定版本發布的浸泡時間,與群組的預設浸泡時間不同。舉例來說,如果您已檢驗新版本,並準備好開始升級下一個群組,可以將浸泡時間設為零。如果需要比預設浸泡時間更長的時間,才能符合特定版本資格,也可以使用這項功能。

由於浸泡時間是依群組設定,如要覆寫這個序列中其他群組的浸泡時間,請使用這個相同指令更新,並替換機群名稱。

如要按照本節的操作說明執行,請替換下列變數:

  • SOAK_TIME:要使用的浸泡時間 (預設值除外),例如「0d」(如要略過一個版本推出程序的浸泡時間)。
  • UPGRADE_NAME:升級類型,控制層升級為 k8s_control_plane,節點升級為 k8s_node
  • :您希望在版本 (例如 1.25.2-gke.400) 推出至這個群組後,覆寫預設浸泡時間的 GKE 版本。VERSION

gcloud

在要覆寫特定版本推出時所用浸泡時間的車隊主機專案中,執行下列指令。

gcloud container fleet clusterupgrade update
    --add-upgrade-soaking-override=SOAK_TIME \
    --upgrade-selector=name=UPGRADE_NAME,version=VERSION

Terraform

clusterupgrade 區塊中,將下列 gke_upgrades_overrides 區塊新增至 Terraform 設定,即可覆寫特定版本推出時使用的浸泡時間:

gke_upgrade_overrides {
    upgrade {
      name = "UPGRADE_NAME"
      version = "VERSION"
    }
    post_conditions {
      soaking = "SOAK_TIME"
    }
  }

更新推出作業序列中的群組

您可以更新現有的推出作業序列,在序列中新增、移除或變更群組順序。如要進行這些變更,請更新群組之間的關聯。

您可以在 Google Cloud 控制台 (預覽版) 或使用 gcloud CLI 執行這些步驟。

控制台

  1. 前往 Google Cloud 控制台的「推出順序」頁面。

    前往「推出作業排序功能」

  2. 在「監控推出作業序列」一節中查看序列。如果沒有看到推出順序,請改用其他推出順序,或建立推出順序 (如尚未建立)。

  3. 在「推出圖表」中,按一下序列中現有車隊的元素。點選這些元素後,您可以執行下列部分動作來進行變更:

    • 按一下 「新增下游機群」
    • 按一下「新增上游機群」圖示
    • 按一下「移除機群」

你可以執行下列動作:

  • 在發布序列結尾新增另一個機群,方法是在序列中的最後一個機群新增下游機群。
  • 在發布序列開頭新增另一個機群,方法是在序列中的第一個機群新增上游機群。
  • 如要變更推出作業序列中的機群順序,請移除機群,然後使用不同的上游或下游機群重新新增機群。
  • 移除推出序列中的第一個機群。
  • 移除推出序列中的最後一個機群。
  • 移除序列中的第一個或最後一個機群後,即可移除序列中的中間機群。

gcloud

如要新增或變更上游車隊,請使用 gcloud container fleet clusterupgrade update 指令並加上 --upstream-fleet 旗標。如要移除上游車隊,請使用 --reset-upstream-fleet 旗標。

你可以執行下列動作:

  • 在發布序列開頭新增另一個機群,方法是在序列中的第一個機群新增上游機群。
  • 如要變更推出作業序列中的機群順序,請變更上游機群關聯。
  • 移除第二個機群的上游機群,即可移除推出序列中的第一個機群。

延遲完成群組的版本推出作業

如要暫時禁止群組完成將新版本推出至叢集的作業,可以將維護排除項目新增至尚未升級至目標版本的任何叢集。這項操作最多可暫停群組 30 天,避免群組進入浸泡時間或下游群組。30 天後,群組就會開始過渡。

您也可以變更該群組的浸泡時間為 30 天,盡量延長推出順序的等待時間,再繼續下一個群組。

如要進一步延後下一個群組的升級作業,可以為下一個群組中的叢集設定維護排除條件。

刪除序列

如要刪除序列,請移除每個群組的上游關聯 (第一個群組除外)。第一個群組沒有上游群組。

您可以在 Google Cloud 控制台 (預覽版) 或使用 gcloud CLI 執行這些步驟。

控制台

  1. 前往 Google Cloud 控制台的「推出順序」頁面。

    前往「推出作業排序功能」

  2. 在「監控推出作業序列」一節中查看序列。如果沒有看到推出順序,請改用其他推出順序,或建立推出順序 (如尚未建立)。

  3. 在「推出圖表」中,按一下最後一個機群的元素。

  4. 按一下「移除機群」

  5. 如要移除車隊,請按一下「移除」

  6. 重複上述三個步驟,直到只剩下第一個車隊為止。

gcloud

在推出順序中,除了第一個車隊以外,請在每個車隊的車隊主機專案中執行下列指令:

gcloud container fleet clusterupgrade update --reset-upstream-fleet

疑難排解

排解推出資格問題

如果推出順序中的所有叢集升級目標不同,GKE 可能無法繼續升級叢集。如果上游群組未限定升級目標,就無法將目標傳遞至下游群組,自動升級作業也無法繼續。如果上游群組中的叢集為下游群組中的叢集限定無效的升級目標,自動升級作業也無法繼續。

如要檢查推出序列是否有任何推出資格問題,請查看推出序列的狀態。如果群組不符合資格,請按照操作說明查看群組中個別叢集的狀態。

如要立即推進叢集升級作業,請按照「推進部分符合資格的推出作業」一文的說明,移除所有狀態為 INELIGIBLE 的叢集。

修正群組中的資格問題

在群組中,如果叢集版本較舊而不符合資格 (例如,群組中的大多數叢集要從 1.23 升級至 1.24,但某個叢集是 1.22 版),您可以手動將叢集升級至 1.24,解決版本不一致的問題。

在群組中,如果叢集版本高於自動升級目標,GKE 會忽略這些叢集。這些叢集不會阻礙升級作業繼續進行至下游群組。

修正群組間的資格條件

如果群組間的升級目標不一致,下游群組的版本較新 (例如上游群組從 1.23 升級至 1.24,而下游群組中的叢集為 1.25),您可以手動將上游群組中的叢集升級至 1.25,確保升級作業順利進行。

如果群組之間的升級目標不一致,導致下游群組使用較舊版本 (例如上游群組從 1.24 升級至 1.25,而下游群組中的叢集使用 1.23),您可以手動將下游群組中的叢集升級至 1.24 或 1.25,確保升級作業順利進行。如果 GKE 將上游群組升級至下游群組適用的任何版本,GKE 會將下游群組中的叢集升級至該升級目標。在這種情況下,您不需要手動升級叢集,即可解除封鎖序列。詳情請參閱「上游群組為下游群組選定多個升級目標」一文。

進展至下一個推出階段 (部分符合資格)

如果群組中的叢集升級作業因推出作業資格問題 (例如群組內版本不一致) 而無法完成,您可以從群組中移除不符合群組升級目標資格的叢集,完成版本推出作業並開始浸泡時間,或繼續推出作業序列中的下一個群組。您也可以基於其他原因從群組中移除叢集,例如這個叢集的使用情形與群組中的其他叢集不再相關。

按照操作說明從機群中取消註冊叢集

移除所有阻礙群組版本推出作業的叢集後,群組版本推出作業就會完成。請按照這篇文章的指示操作,確認版本推出狀態。

後續步驟