本页面介绍了如何在 Google Distributed Cloud on VMware(纯软件)中创建的用户集群中单独升级控制平面和节点池。本页面适用于管理底层技术基础架构生命周期的 IT 管理员和运维人员。如需详细了解我们在 Google Cloud 内容中提及的常见角色和示例任务,请参阅常见的 GKE 用户角色和任务。在阅读本文档之前,请确保您熟悉以下内容中所述的 Google Distributed Cloud 升级规划和执行:
限制
与控制平面分开升级节点池存在以下限制:
- Ubuntu 和 COS 节点池支持此功能,但 Windows 节点池不支持。 
- 将非高级集群升级为高级集群时,此功能不可用。非高级集群将在 1.33 中自动升级为高级集群。 
- 1.31 版:此功能不适用于高级集群。 
- 1.32 版及更高版本:此功能在高级集群上可用。 
为什么要分开升级控制平面和节点池?
- 如果您的集群为 1.16 或更高版本,则可以在升级节点池时跳过某个次要版本。执行跳过版本升级可将依序升级节点池两个版本所需的时间缩短一半。此外,跳过版本升级还可以让您在升级之间留出更多时间,以便继续使用受支持的版本。减少升级次数有助于减少工作负载中断和验证时间。如需了解详情,请参阅升级节点池时跳过某个版本。 
- 在某些情况下,您可能需要升级用户集群中的部分(而不是全部)节点池,例如: - 您可以先升级控制平面以及流量较少或运行最不重要的工作负载的节点池。确信工作负载在新版本上正常运行后,您可以升级其他节点池,直到最终升级所有节点池。 
- 您可以通过多个维护窗口升级集群,而不是通过一个大型维护窗口升级集群。如需了解如何估算维护窗口的时间,请参阅估算时间承诺并规划维护窗口。 
 
准备工作
- 在 1.29 版及更高版本中,服务器端预检检查默认处于启用状态。请务必查看防火墙规则,以便进行任何所需的更改。 
- 如需升级到 1.28 版及更高版本,您必须启用 - kubernetesmetadata.googleapis.com并将- kubernetesmetadata.publisherIAM 角色授予日志记录监控服务账号。如需了解详情,请参阅 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- 选择目标版本。从目标次要版本中选择建议的补丁。 
- 将管理员工作站升级到目标版本。等待显示升级成功的消息。 
- 将相应的操作系统映像导入 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.maxSurgefield 设置为大于 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创建的,则这是集群配置文件的- 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创建的,则这是集群配置文件的- 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
问题排查
如果在升级节点池后遇到问题,可以回滚到先前版本。如需了解详情,请参阅在升级后回滚节点池。