依序推出叢集升級作業

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

最佳做法

如果是首次設定環境,請使用自訂階段的推出順序

事前準備

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

    gcloud init

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

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

必要的角色

如要建立或修改推出順序,您必須在推出順序中的每個專案,都具備 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
    

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

推出作業序列的狀態資訊

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

下表列出叢集或群組的可能狀態:

狀態 單一叢集 機群
不符合資格 這個叢集不符合升級條件 這個群組中有一或多個叢集不符合升級條件。
待處理 叢集或部分 Standard 節點集區的升級作業處於待處理狀態,或 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
  • VERSION:您要覆寫預設浸泡時間的 GKE 版本,該版本已推出至這個群組 (例如 1.25.2-gke.400)。

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 會將下游群組中的叢集升級至該升級目標。在這種情況下,您不需要手動升級叢集,即可解除封鎖序列。詳情請參閱上游群組為下游群組選定多個升級目標

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

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

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

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

後續步驟