依序推出叢集升級作業

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

最佳做法:

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

事前準備

  • 安裝 Google Cloud CLI,然後 使用聯合身分登入 gcloud CLI。登入後,執行下列指令來初始化 Google Cloud CLI:

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

必要的角色

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

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

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

設定推出作業序列

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

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

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

將叢集分組

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

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

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

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

建立推出作業序列

推出序列會以連結清單的形式組織,最多可包含五個元素。

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

  • 上游群組:上游機群,會限定下游群組的新版本。序列中的第一個群組不會設定上游群組。
  • 浸泡時間:群組的浸泡時間是指從升級完成 (或推出作業已執行 30 天),到下游群組可以開始升級之間的時間。詳情請參閱「如何透過推出順序進行版本資格認證」。

控制台

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

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

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

  3. 在「建立推出順序」窗格中,選取順序中的前兩個機群:

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

    1. 在「推出作業圖表」中,按一下第二個機群的元素。
    2. 按一下 「Add downstream fleet」(新增下游機群)。
    3. 在「Soak time for upstream fleet」(上游機群的浸泡時間) 區段中,使用「Days」(天)、「Hours」(小時) 和「Minutes」(分鐘) 欄位設定第二個機群的浸泡時間。
    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。

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

查看推出作業序列的狀態

如要查看推出順序的狀態,請使用下列任一方法:

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

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

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

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

    前往「Rollout Sequencing」(推出作業排序)

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

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

在這個頁面中,您可以查看與專案機群相關聯的推出序列。您可以執行下列操作,查看推出作業序列的進度:

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

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

切換至其他推出作業序列

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

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

使用 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).spec和clusterUpgrade(s).state屬性包含叢集升級的額外資訊,例如浸泡時間、叢集升級覆寫和升級狀態。

管理推出作業序列

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

變更群組的浸泡時間

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

更新預設浸泡時間

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

控制台

  1. 前往 Cloud de Confiance 控制台的「Rollout Sequencing」(推出作業排序) 頁面。

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

  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"
    }
  }

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

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

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

控制台

  1. 前往 Cloud de Confiance 控制台的「Rollout Sequencing」(推出作業排序) 頁面。

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

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

  3. 在「Rollout graph」(推出圖表) 中,依序點選現有機群的元素。點選這些元素後,您可以執行下列部分動作來進行變更:

    • 按一下 「Add downstream fleet」(新增下游機群)。
    • 按一下「 新增上游機群」。
    • 按一下「移除機群」。

你可以執行下列動作:

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

gcloud

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

你可以執行下列動作:

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

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

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

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

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

刪除序列

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

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

控制台

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

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

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

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

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

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

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

後續步驟