本頁面說明如何升級使用者叢集中的控制層和節點集區 (這些叢集是使用 Google Distributed Cloud (僅限軟體) on VMware 建立)。本文適用於負責管理底層技術基礎架構生命週期的 IT 管理員和作業人員。如要進一步瞭解我們在 Google Cloud 內容中提及的常見角色和範例工作,請參閱「常見的 GKE Enterprise 使用者角色和工作」。閱讀本文前,請先熟悉規劃及執行 Google Distributed Cloud 升級作業,詳情請參閱下列文件:
限制
與控制層分開升級節點集區有下列限制:
這項功能支援 Ubuntu 和 COS 節點集區,但不支援 Windows 節點集區。
1.31 版:這項功能不適用於進階叢集。
1.32 以上版本:這項功能適用於進階叢集。
為什麼要分別升級控制層和節點集區?
如果叢集版本為 1.16 以上,升級節點集區時可以略過次要版本。執行跳過版本升級,可將節點集區依序升級兩個版本所需的時間減半。此外,略過版本升級可讓您延長升級間隔,以維持使用支援版本。減少升級次數可降低工作負載中斷情形,並縮短驗證時間。詳情請參閱「升級節點集區時略過版本」。
在某些情況下,您可能只想升級使用者叢集中的部分節點集區,例如:
您可以先升級控制層,以及流量較少或執行最不重要工作負載的節點集區。確認工作負載在新版本上正常運作後,即可升級其他節點集區,直到所有節點集區都升級完畢。
您可以分批升級叢集,而不必在一個大型維護期間內完成。如要估算維護期間的時間,請參閱「估算時間投入並規劃維護期間」。
事前準備
在 1.29 以上版本中,伺服器端預檢預設為啟用。請務必檢查防火牆規則,並視需要進行變更。
如要升級至 1.28 以上版本,您必須啟用
kubernetesmetadata.googleapis.com
,並將kubernetesmetadata.publisher
IAM 角色授予記錄與監控服務帳戶。詳情請參閱「Google API 和 IAM 規定」。確認叢集目前版本為 1.14 以上。
升級控制層和所選節點集區
您可以使用 gkectl
、Google Cloud CLI 和 Terraform,將使用者叢集的控制層與工作站節點集區分開升級。只有在使用 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.nodePool[i].gkeOnPremVersion
欄位設為空字串。- 在 1.28 以上版本中,您可以將
nodePools.nodePool[i].updateStrategy.rollingUpdate.maxSurge
欄位 設為大於 1 的整數值,加快節點集區升級速度。使用maxSurge
升級節點時,升級多個節點所需的時間,與升級單一節點的時間相同。
- 在 1.28 以上版本中,您可以將
針對每個不想升級的節點集區,請將
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 ...
升級控制層和所選節點集區:
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 註冊管理員叢集 (如果尚未註冊)。
下載並將一組元件部署至管理員叢集。元件版本與您指定的升級版本相符。管理員叢集可透過這些元件管理該版本的使用者叢集。
升級控制層
請按照下列步驟升級使用者叢集的控制層。
更新 Google Cloud 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
建立叢集,這個 ID 就是叢集設定檔中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
更新 Google Cloud CLI 元件:
gcloud components update
如果尚未註冊,請在 GKE On-Prem API 中註冊管理員叢集。叢集註冊 GKE On-Prem API 後,就不必再次執行這個步驟。
下載新版元件,並部署至管理叢集:
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
中指定的元件版本下載至管理員叢集,然後部署元件。管理員叢集可透過這些元件管理該版本的使用者叢集。在用於建立使用者叢集的
main.tf
檔案中,將叢集資源中的on_prem_version
變更為新版本。在叢集資源中新增下列項目,確保只有控制層會升級:
upgrade_policy { control_plane_only = true }
初始化並建立 Terraform 方案:
terraform init
Terraform 會安裝任何需要的程式庫,例如 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 = true } on_prem_version = "1.16.0-gke.0" }
初始化並建立 Terraform 方案:
terraform init
檢查設定並視需要進行變更:
terraform plan
套用 Terraform 方案,建立使用者叢集:
terraform apply
疑難排解
如果升級節點集區後發生問題,可以還原為先前的版本。詳情請參閱「在升級後復原節點集區」。