在 Google Distributed Cloud 軟體 only for VMware 使用者叢集中,分別升級控制層和 worker 節點集區,即可驗證個別節點集區的工作負載相容性,並在較短的維護期間內分散升級作業。
本文適用對象為 IT 管理員和操作員,負責管理基礎技術基礎架構的生命週期。如要進一步瞭解 Google Cloud 內容中提及的常見角色和工作範例,請參閱「常見的 GKE 使用者角色和工作」。開始之前,請務必熟悉升級總覽、升級版本規則、升級最佳做法和升級叢集。
限制
將節點集區與控制層分開升級時,有下列限制:
這項功能支援 Ubuntu 和 Container-Optimized OS 節點集區,但不支援 Windows 節點集區。
將非進階叢集升級為進階叢集時,無法使用這項功能。非進階叢集會在 1.33 版自動升級為進階叢集。
1.31 版:進階叢集不支援這項功能。
1.32 以上版本:進階叢集可使用這項功能。
負載平衡器節點集區版本必須與叢集版本相同。不支援將負載平衡器節點集區 (具有
enableLoadBalancer: true的節點集區) 與控制層分開升級,或版本偏差。
為什麼要分別升級控制層和節點集區?
在某些情況下,您可能只想升級使用者叢集中的部分 worker 節點集區:
您可以先升級控制層,以及流量較低或執行最不重要工作負載的節點集區。確認工作負載在新版本上正常運作後,即可升級其他節點集區,直到所有節點集區都升級完畢。
您可以分多次維護期間升級叢集,不必在單一大型維護期間內完成。如要瞭解如何預估維護期間,請參閱「預估時間承諾並規劃維護期間」。
升級節點集區時,您可以略過子版本,減少升級次數,同時維持在支援的版本,節省時間並減少工作負載中斷。詳情請參閱「升級節點集區時略過版本」。
事前準備
在 1.29 以上版本中,伺服器端預檢預設為啟用。請務必檢查防火牆規則,並視需要進行變更。
如要升級至 1.28 以上版本,您必須啟用
kubernetesmetadata.googleapis.com,並將kubernetesmetadata.publisherIAM 角色授予記錄和監控服務帳戶。詳情請參閱「Google API 和 Identity and Access Management (IAM) 需求條件」。確認叢集目前版本為 1.14 以上。
升級控制層和所選節點集區
您可以使用 gkectl、Google Cloud CLI 和 Terraform,將使用者叢集的控制層與 worker 節點集區分開升級。只有在您使用 Terraform 建立使用者叢集時,才能使用 Terraform 進行升級。
gkectl
在下列預留位置變數中,定義來源版本和目標版本。所有版本都必須是完整版本號碼,格式為
x.y.z-gke.N,例如1.16.11-gke.25。版本 說明 SOURCE_VERSION目前的叢集版本。 TARGET_VERSION選擇目標版本。從目標子版本中選取建議的修補程式。 將管理員工作站升級至目標版本。等待系統顯示升級成功的訊息。
將對應的 OS 映像檔匯入 vSphere:
gkectl prepare \ --bundle-path /var/lib/gke/bundles/gke-onprem-vsphere-TARGET_VERSION.tgz \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG
將
ADMIN_CLUSTER_KUBECONFIG替換為管理員叢集kubeconfig檔案的路徑。在使用者叢集設定檔中進行下列變更:
將
gkeOnPremVersion欄位設為目標版本TARGET_VERSION。針對要升級的每個節點集區,將
nodePools[i].gkeOnPremVersion欄位設為空白字串。- 在 1.28 以上版本中,您可以將
nodePools[i].updateStrategy.rollingUpdate.maxSurge欄位設為大於 1 的整數值,加快節點集區升級速度。使用maxSurge升級節點時,多個節點的升級時間與單一節點相同。
- 在 1.28 以上版本中,您可以將
針對「不」要升級的每個節點集區,將
nodePools[i].gkeOnPremVersion設為來源版本SOURCE_VERSION。請注意,您無法保留負載平衡器節點集區 (具有enableLoadBalancer: true的節點集區);其版本必須與叢集版本相符。
以下範例顯示使用者叢集設定檔的一部分。這表示控制層和
pool-1會升級至TARGET_VERSION,但pool-2會維持在SOURCE_VERSION。gkeOnPremVersion: TARGET_VERSION ... nodePools: - name: pool-1 gkeOnPremVersion: "" ... - name: pool-2 gkeOnPremVersion: SOURCE_VERSION ...升級控制層和所選節點集區:
gkectl upgrade cluster \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG \ --config USER_CLUSTER_CONFIG_FILE
將
USER_CLUSTER_CONFIG替換為使用者叢集設定檔的路徑。
升級其他節點集區
延續上一個範例,假設 pool-1 運作正常,而您現在想升級 pool-2。
在使用者叢集設定檔的
pool-2下方,將gkeOnPremVersion設為空字串:gkeOnPremVersion: TARGET_VERSION ... nodePools: - name: pool-1 gkeOnPremVersion: "" ... - name: pool-2 gkeOnPremVersion: "" ...執行
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 中註冊管理員叢集。
下載一組元件並部署至管理員叢集。元件版本與您指定的升級版本相符。管理員叢集會使用這些元件,管理該版本的使用者叢集。
升級控制層
請按照下列步驟升級使用者叢集的控制層。
更新 gcloud CLI 元件:
gcloud components update變更叢集的升級政策:
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建立叢集,這就是叢集設定檔中gkeConnect.projectID欄位的專案 ID。REGION:GKE On-Prem API 執行及儲存中繼資料的 Google Cloud 區域。如果您是使用 GKE On-Prem API 用戶端建立叢集,這就是您在建立叢集時選取的區域。如果您使用gkectl建立叢集,這就是您在 GKE On-Prem API 中註冊叢集時指定的區域。
升級叢集的控制層:
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
升級節點集區
使用者叢集的控制層升級後,請按照下列步驟升級節點集區:
取得使用者叢集的節點集區清單:
gcloud container vmware node-pools list --cluster=USER_CLUSTER_NAME \ --project=PROJECT_ID \ --location=REGION
針對要升級的每個節點集區,執行下列指令:
gcloud container vmware node-pools update NODE_POOL_NAME \ --cluster=USER_CLUSTER_NAME \ --project=PROJECT_ID \ --location=REGION \ --version=TARGET_VERSION
Terraform
更新 gcloud CLI 元件:
gcloud components update如果尚未在 GKE On-Prem API 中註冊管理員叢集,請先完成這項操作。叢集註冊 GKE On-Prem API 後,您就不必再次執行這個步驟。
下載新版元件,並部署至管理員叢集:
gcloud container vmware admin-clusters update ADMIN_CLUSTER_NAME \ --project=PROJECT_ID \ --location=REGION \ --required-platform-version=TARGET_VERSION
更改下列內容:
ADMIN_CLUSTER_NAME:管理員叢集的名稱。PROJECT_ID:使用者叢集所屬機群主專案的 ID。這是您在建立叢集時指定的專案。如果您使用gkectl建立叢集,這就是叢集設定檔中gkeConnect.projectID欄位的專案 ID。REGION:GKE On-Prem API 執行及儲存中繼資料的 Google Cloud 區域。如果您是使用 GKE On-Prem API 用戶端建立叢集,這就是您在建立叢集時選取的區域。如果您使用gkectl建立叢集,這就是您在 GKE On-Prem API 中註冊叢集時指定的區域。TARGET_VERSION:要升級的版本。從目標子版本中選取建議的修補程式。
這個指令會將您在
--required-platform-version中指定的元件版本下載至管理員叢集,然後部署元件。這些元件可讓管理員叢集管理該版本的使用者叢集。在您用來建立使用者叢集的
main.tf檔案中,將叢集資源中的on_prem_version變更為新版本。將下列內容新增至叢集資源,以便只升級控制層:
upgrade_policy { control_plane_only = true }初始化並建立 Terraform 方案:
terraform initTerraform 會安裝所有必要的程式庫,例如 Google Cloud供應商。
查看設定,並視需要進行變更:
terraform plan套用 Terraform 方案,升級使用者叢集控制層:
terraform apply
升級節點集區
使用者叢集的控制層升級後,請按照下列步驟升級節點集區:
在要升級的每個節點集區資源中,於
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 = false } on_prem_version = "1.16.0-gke.0" }初始化並建立 Terraform 方案:
terraform init查看設定,並視需要進行變更:
terraform plan套用 Terraform 方案,升級節點集區:
terraform apply
疑難排解
如果升級節點集區後發生問題,可以復原至先前的版本。詳情請參閱「在升級後復原節點集區」。