本页介绍了如何在使用 Google Distributed Cloud for VMware(纯软件)创建的用户集群中单独升级控制平面和节点池。本页面适用于管理底层技术基础架构生命周期的 IT 管理员和运维人员。如需详细了解我们在 Google Cloud 内容中提及的常见角色和示例任务,请参阅常见的 GKE Enterprise 用户角色和任务。在阅读本文档之前,请确保您熟悉以下内容中介绍的规划和执行 Google Distributed Cloud 升级:
Ubuntu 和 COS 节点池支持将节点池与控制平面分开升级,但 Windows 节点池不支持。此外,高级集群不支持此功能。
为什么要单独升级控制平面和节点池?
如果您的集群为 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
选择目标版本。从目标次要版本中选择 推荐的补丁。 将管理员工作站升级到目标版本。等待系统显示升级成功的消息。
将相应的操作系统映像导入 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
字段设置为空字符串。对于您不想升级的每个节点池,请将
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
问题排查
如果在升级节点池后遇到问题,可以回滚到先前版本。如需了解详情,请参阅在升级后回滚节点池。