依序推出叢集升級作業

本文說明如何運用推出作業排序功能,管理 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 控制台的「Rollout Sequencing」(推出作業排序) 頁面。

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

  2. 按一下「Create rollout sequence」(建立推出作業序列)。

  3. 在「Create a rollout sequence」(建立推出序列) 窗格中,選取序列中的前兩個機群:

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

    1. 在「Rollout graph」(推出作業圖表) 中,按一下第二個機群的元素。
    2. 按一下「 新增下游機群」。
    3. 在「Soak time for upstream fleet」(上游機群的浸泡時間) 區段中,使用「Days」(天)、「Hours」(小時) 和「Minutes」(分鐘) 欄位設定第二個機群的浸泡時間。
    4. 在「Next fleet in the sequence」(序列中的下一個機群) 區段中,選取序列中的第三個機群。
    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」(推出作業排序) 頁面。

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

  2. 在「推出作業序列」部分查看序列。如果沒有看到推出序列,請切換至其他推出序列,或建立推出序列 (如果尚未建立)。

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

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

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

GKE 會升級序列中的所有叢集,您能以視覺化方式監控整個推出序列,在升級正式環境叢集前,先在各個環境中驗證新版本。監控期間,您可以管理推出序列,並視需要進行任何變更。

切換至其他推出作業序列

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

如要查看其他推出作業序列,請使用 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 叢集正在升級。 至少有一個叢集已開始升級,但並非所有叢集都已完成升級。
浸泡 叢集已完成升級,但尚未完成浸泡。 所有叢集都已完成升級,但尚未完成浸泡。
FORCED_SOAKING 升級作業超過時間上限 (30 天),因此我們強制進入過渡階段。叢集仍可繼續升級。 升級作業超過時間上限 (30 天),因此我們強制進入過渡階段。叢集仍可繼續升級。
完成 升級作業會視為「完成」,也就是說,叢集已完成升級過渡期。 升級作業會視為「完成」,並可供下游群組使用,也就是說,升級作業已完成過渡期。

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

管理推出作業序列

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

變更群組的浸泡時間

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

更新預設浸泡時間

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

控制台

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

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

  2. 在「推出作業序列」部分查看序列。如果沒有看到推出序列,請切換至其他推出序列,或建立推出序列 (如果尚未建立)。

  3. 在「Rollout graph」(推出作業圖表) 中,找出要更新浸泡時間的機群元素,然後點選該元素後方的「Soak time」(浸泡時間) 元素。

  4. 按一下 「Edit soak time」(編輯浸泡時間)。

  5. 在「Set a new soak time」(設定新的浸泡時間) 部分,使用「Days」(天)、「Hours」(小時) 和「Minutes」(分鐘) 欄位輸入新的浸泡時間。

  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

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

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」(推出作業排序) 頁面。

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

  2. 在「推出作業序列」部分查看序列。如果沒有看到推出序列,請切換至其他推出序列,或建立推出序列 (如果尚未建立)。

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

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

您可以執行下列動作:

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

gcloud

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

您可以執行下列動作:

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

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

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

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

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

刪除序列

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

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

控制台

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

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

  2. 在「推出作業序列」部分查看序列。如果沒有看到推出序列,請切換至其他推出序列,或建立推出序列 (如果尚未建立)。

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

  4. 按一下 「Remove fleet」(移除機群)。

  5. 如要移除機群,請按一下「Remove」(移除)。

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

推進部分符合資格的推出作業

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

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

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

後續步驟