升級節點集區

本頁面說明如何升級使用者叢集中的控制層和節點集區 (這些叢集是使用 Google Distributed Cloud (僅限軟體) on VMware 建立)。本文適用於負責管理底層技術基礎架構生命週期的 IT 管理員和作業人員。如要進一步瞭解我們在 Google Cloud 內容中提及的常見角色和範例工作,請參閱「常見的 GKE Enterprise 使用者角色和工作」。閱讀本文前,請先熟悉規劃及執行 Google Distributed Cloud 升級作業,詳情請參閱下列文件:

限制

與控制層分開升級節點集區有下列限制:

  • 這項功能支援 Ubuntu 和 COS 節點集區,但不支援 Windows 節點集區。

  • 1.31 版:這項功能不適用於進階叢集

  • 1.32 以上版本:這項功能適用於進階叢集。

為什麼要分別升級控制層和節點集區?

  • 如果叢集版本為 1.16 以上,升級節點集區時可以略過次要版本。執行跳過版本升級,可將節點集區依序升級兩個版本所需的時間減半。此外,略過版本升級可讓您延長升級間隔,以維持使用支援版本。減少升級次數可降低工作負載中斷情形,並縮短驗證時間。詳情請參閱「升級節點集區時略過版本」。

  • 在某些情況下,您可能只想升級使用者叢集中的部分節點集區,例如:

    • 您可以先升級控制層,以及流量較少或執行最不重要工作負載的節點集區。確認工作負載在新版本上正常運作後,即可升級其他節點集區,直到所有節點集區都升級完畢。

    • 您可以分批升級叢集,而不必在一個大型維護期間內完成。如要估算維護期間的時間,請參閱「估算時間投入並規劃維護期間」。

事前準備

  1. 在 1.29 以上版本中,伺服器端預檢預設為啟用。請務必檢查防火牆規則,並視需要進行變更。

  2. 如要升級至 1.28 以上版本,您必須啟用 kubernetesmetadata.googleapis.com,並將 kubernetesmetadata.publisher IAM 角色授予記錄與監控服務帳戶。詳情請參閱「Google API 和 IAM 規定」。

  3. 確認叢集目前版本為 1.14 以上。

升級控制層和所選節點集區

您可以使用 gkectl、Google Cloud CLI 和 Terraform,將使用者叢集的控制層與工作站節點集區分開升級。只有在使用 Terraform 建立使用者叢集時,才能使用 Terraform 升級。

gkectl

  1. 在下列預留位置變數中定義來源版本和目標版本。所有版本都必須是完整版本號碼,格式為 x.y.z-gke.N,例如 1.16.11-gke.25

    版本 說明
    SOURCE_VERSION 目前的叢集版本。
    TARGET_VERSION 選取目標版本。從目標次要版本中選取 建議修補程式
  2. 將管理員工作站升級至目標版本。等待系統顯示升級成功訊息。

  3. 將對應的 OS 映像檔匯入 vSphere:

    gkectl prepare \
      --bundle-path /var/lib/gke/bundles/gke-onprem-vsphere-TARGET_VERSION.tgz \
      --kubeconfig ADMIN_CLUSTER_KUBECONFIG
    

    ADMIN_CLUSTER_KUBECONFIG 替換為管理員叢集 kubeconfig 檔案的路徑。

  4. 在使用者叢集設定檔中進行下列變更:

    • gkeOnPremVersion 欄位設為目標版本 TARGET_VERSION

    • 針對要升級的每個節點集區,將 nodePools.nodePool[i].gkeOnPremVersion 欄位設為空字串。

      • 在 1.28 以上版本中,您可以將 nodePools.nodePool[i].updateStrategy.rollingUpdate.maxSurge 欄位 設為大於 1 的整數值,加快節點集區升級速度。使用 maxSurge 升級節點時,升級多個節點所需的時間,與升級單一節點的時間相同。
    • 針對每個不想升級的節點集區,請將 nodePools.nodePool[i].gkeOnPremVersion 設為來源版本 SOURCE_VERSION

    以下範例顯示使用者叢集設定檔的一部分。這項設定指定控制層和 pool-1 將升級至 TARGET_VERSION,但 pool-2 會維持在 SOURCE_VERSION

    gkeOnPremVersion: TARGET_VERSION
    ...
    nodePools:
    - name: pool-1
      gkeOnPremVersion: ""
      ...
    - name: pool-2
      gkeOnPremVersion: SOURCE_VERSION
      ...
    
  5. 升級控制層和所選節點集區:

    gkectl upgrade cluster \
      --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
      --config USER_CLUSTER_CONFIG_FILE
    

    USER_CLUSTER_CONFIG 替換為使用者叢集設定檔的路徑。

升級其他節點集區

以前述範例為例,假設 pool-1 一切運作正常,現在您想升級 pool-2

  1. 在使用者叢集設定檔的 pool-2 下,將 gkeOnPremVersion 設為空字串:

    gkeOnPremVersion: TARGET_VERSION
    ...
    nodePools:
    - name: pool-1
      gkeOnPremVersion: ""
      ...
    - name: pool-2
      gkeOnPremVersion: ""
      ...
    
  2. 執行 gkectl update cluster 來套用變更:

    gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
      --config USER_CLUSTER_CONFIG
    

gcloud CLI

升級使用者叢集時,需要對管理員叢集進行一些變更。gcloud container vmware clusters upgrade 指令會自動執行下列操作:

  • 向 GKE On-Prem API 註冊管理員叢集 (如果尚未註冊)。

  • 下載並將一組元件部署至管理員叢集。元件版本與您指定的升級版本相符。管理員叢集可透過這些元件管理該版本的使用者叢集。

升級控制層

請按照下列步驟升級使用者叢集的控制層。

  1. 更新 Google Cloud CLI 元件:

    gcloud components update
    
  2. 變更叢集的升級政策:

    gcloud container vmware clusters update USER_CLUSTER_NAME \
      --project=PROJECT_ID \
      --location=REGION \
      --upgrade-policy control-plane-only=True
    

    更改下列內容:

    • USER_CLUSTER_NAME:要升級的使用者叢集名稱。

    • PROJECT_ID機群主專案的 ID,使用者叢集是該專案的成員。這是您在建立叢集時指定的專案。如果您使用 gkectl 建立叢集,這個 ID 就是叢集設定檔中 gkeConnect.projectID 欄位的專案 ID。

    • REGION:GKE On-Prem API 執行及儲存中繼資料的 Google Cloud 區域。如果您是使用 GKE On-Prem API 用戶端建立叢集,這個地區就是您建立叢集時選取的地區。如果您使用 gkectl 建立叢集,這個區域就是您在 GKE On-Prem API 中註冊叢集時指定的區域。

  3. 升級叢集的控制層:

    gcloud container vmware clusters upgrade USER_CLUSTER_NAME \
      --project=PROJECT_ID \
      --location=REGION \
      --version=TARGET_VERSION
    

    TARGET_VERSION 替換為要升級的版本。從目標次要版本中選取「建議修補程式」

    指令輸出內容如下所示:

    Waiting for operation [projects/example-project-12345/locations/us-west1/operations/operation-1679543737105-5f7893fd5bae9-942b3f97-75e59179] to complete.
    

    在範例輸出內容中,字串 operation-1679543737105-5f7893fd5bae9-942b3f97-75e59179 是長時間執行的作業的 OPERATION_ID。您可以在另一個終端機視窗中執行下列指令,瞭解作業狀態:

    gcloud container vmware operations describe OPERATION_ID \
      --project=PROJECT_ID \
      --location=REGION
    

升級節點集區

使用者叢集的控制層升級後,請按照下列步驟升級節點集區:

  1. 取得使用者叢集中的節點集區清單:

    gcloud container vmware node-pools list
      --cluster=USER_CLUSTER_NAME  \
      --project=PROJECT_ID \
      --location=REGION
    
  2. 針對要升級的每個節點集區,執行下列指令:

    gcloud container vmware node-pools update NODE_POOL_NAME \
      --cluster=USER_CLUSTER_NAME  \
      --project=PROJECT_ID \
      --location=REGION \
      --version=TARGET_VERSION
    

Terraform

  1. 更新 Google Cloud CLI 元件:

    gcloud components update
    
  2. 如果尚未註冊,請在 GKE On-Prem API 中註冊管理員叢集。叢集註冊 GKE On-Prem API 後,就不必再次執行這個步驟。

  3. 下載新版元件,並部署至管理叢集:

    gcloud vmware admin-clusters update ADMIN_CLUSTER_NAME \
      --project=PROJECT_ID \
      --location=REGION \
      --required-platform-version=TARGET_VERSION
    

    更改下列內容:

    • USER_CLUSTER_NAME:要升級的使用者叢集名稱。

    • PROJECT_ID機群主專案的 ID,使用者叢集是該專案的成員。這是您在建立叢集時指定的專案。如果您使用 gkectl 建立叢集,這個 ID 就是叢集設定檔中 gkeConnect.projectID 欄位的專案 ID。

    • REGION:GKE On-Prem API 執行及儲存中繼資料的 Google Cloud 區域。如果您是使用 GKE On-Prem API 用戶端建立叢集,這個地區就是您建立叢集時選取的地區。如果您使用 gkectl 建立叢集,這個區域就是您在 GKE On-Prem API 中註冊叢集時指定的區域。

    • TARGET_VERSION:要升級的版本。從目標次要版本中選取建議修補程式

    這項指令會將您在 --required-platform-version 中指定的元件版本下載至管理員叢集,然後部署元件。管理員叢集可透過這些元件管理該版本的使用者叢集。

  4. 在用於建立使用者叢集的 main.tf 檔案中,將叢集資源中的 on_prem_version 變更為新版本。

  5. 在叢集資源中新增下列項目,確保只有控制層會升級:

    upgrade_policy {
      control_plane_only = true
    }
    
  6. 初始化並建立 Terraform 方案:

    terraform init
    

    Terraform 會安裝任何需要的程式庫,例如 Google Cloud供應商。

  7. 檢查設定並視需要進行變更:

    terraform plan
    
  8. 套用 Terraform 方案,建立使用者叢集:

    terraform apply
    

升級節點集區

使用者叢集的控制層升級後,請按照下列步驟升級節點集區:

  1. 在要升級的每個節點集區的資源中,於 main.tf 新增下列項目:

    on_prem_version = "TARGET_VERSION"
    

    例如:

    resource "google_gkeonprem_vmware_node_pool" "nodepool-basic" {
    name = "my-nodepool"
    location = "us-west1"
    vmware_cluster = google_gkeonprem_vmware_cluster.default-basic.name
    config {
      replicas = 3
      image_type = "ubuntu_containerd"
      enable_load_balancer = true
    }
    on_prem_version = "1.16.0-gke.0"
    }
    
  2. 初始化並建立 Terraform 方案:

    terraform init
    
  3. 檢查設定並視需要進行變更:

    terraform plan
    
  4. 套用 Terraform 方案,建立使用者叢集:

    terraform apply
    

疑難排解

如果升級節點集區後發生問題,可以還原為先前的版本。詳情請參閱「在升級後復原節點集區」。