升级 Anthos clusters on VMware

本页面介绍如何升级 Anthos clusters on VMware (GKE On-Prem)。

从 1.7 版开始,升级过程发生了显著变化。

1.7 版升级概览

您可以直接升级到同一或下一次要发布版本中的任何版本。例如,您可以从 1.7.0 升级到 1.7.3,或从 1.6.1 升级到 1.7.0。

如果您要升级到非下一个次要版本,则必须在当前版本和所需版本之间升级每个次要版本的一个版本。例如,如果您要从 1.5.2 版升级到 1.7.0 版,则无法直接升级。您必须先从 1.5.2 版升级到 1.6.x 版,然后再升级到 1.7.0 版。

先升级管理员工作站,然后升级用户集群,最后升级管理员集群。如果您希望管理员集群保持当前版本,在升级用户集群后无需立即升级管理员集群。

  1. 下载 gkeadm 工具。gkeadm 的版本必须与升级的目标版本相同。
  2. 升级管理员工作站。
  3. 在管理员工作站上,升级用户集群。
  4. 在管理员工作站上,升级管理员集群。
  • 管理员集群使用 1.6.x 版,用户集群使用 1.6.x 版或 1.7 版。
  • 或者,管理员集群和用户集群都使用 1.7 版。

假设您的管理员工作站、管理员集群和用户集群当前使用 1.6.2 版,并且您想要将管理员集群和用户集群都升级到 1.7。如果您遵循以下升级路径,并在继续操作之前使用 Canary 版集群进行测试,则可以最大限度地降低中断的风险。

下面简要介绍了建议的升级流程。在开始之前,请先创建一个使用 1.6.2 的 Canary 版用户集群(如果您尚未这样做)。

  1. 在 Canary 版集群中测试 1.7 版。
    • 将管理员工作站升级到 1.7。
    • 运行 gkectl prepare 命令(如下所述)来设置升级。
      • 将 Canary 版用户集群升级到 1.7。
  2. 当您确信 1.7 可靠后,将所有生产用户集群升级到 1.7。
  3. 将管理员集群升级到 1.7。

找到您的配置和信息文件以为升级做好准备

创建管理员工作站之前,您填写了由 gkeadm create config 生成的管理员工作站配置文件。此文件的默认名称为 admin-ws-config.yaml

此外,gkeadm 也为您创建了一个信息文件。此文件的默认名称与您当前管理员工作站的名称相同。

找到您的管理员工作站配置文件和信息文件。您需要它们来完成本指南中的步骤。如果这些文件在当前目录中并且具有默认名称,则运行升级命令时无需指定它们。如果这些文件位于其他目录中,或者您更改了文件名,则可以使用 --config--info-file 标志进行指定。

升级管理员工作站

请确保您的 gkectl 和集群处于适合进行升级的版本级别,并且您已下载合适的软件包。

升级管理员工作站配置

gkeadm upgrade admin-workstation --config [AW_CONFIG_FILE] --info-file [INFO_FILE]

其中:

  • [AW_CONFIG_FILE] 是管理员工作站配置文件的路径。如果文件位于当前目录中且名称为 admin-ws-config.yaml,则可以省略此标志。

  • [INFO_FILE] 是信息文件的路径。如果文件位于当前目录中,则可以省略此标志。此文件的默认名称与管理员工作站的名称相同。

上述命令会执行以下任务:

  • 备份当前管理员工作站的主目录中的所有文件。其中包括:

    • Anthos clusters on VMware 配置文件。此文件的默认名称为 config.yaml

    • 管理员集群和用户集群的 kubeconfig 文件。

    • vCenter 服务器的根证书。请注意,此文件必须具有所有者读写权限。

    • 组件访问服务帐号的 JSON 密钥文件。请注意,此文件必须具有所有者读写权限。

    • 用于连接和注册、连接和代理以及日志记录监控服务帐号的 JSON 密钥文件。

  • 创建新的管理员工作站,并将所有备份文件复制到新的管理员工作站。

  • 删除旧的管理员工作站。

验证是否有足够的可用 IP 地址

请在新的管理员工作站上执行本部分中的步骤。

在升级之前,请确保您有足够的 IP 地址可供集群使用。 您可以根据需要预留更多 IP,如 DHCP 和静态 IP 部分中所述。

DHCP

在您升级管理员集群时,Anthos clusters on VMware 会在管理员集群中创建一个临时节点。在您升级用户集群时,Anthos clusters on VMware 会在该用户集群中创建一个临时节点。临时节点的目的是确保不间断的可用性。在升级集群之前,请确保您的 DHCP 服务器可以为临时节点提供足够的 IP 地址。如需了解详情,请参阅管理员集群和用户集群所需的 IP 地址

静态 IP

在您升级管理员集群时,Anthos clusters on VMware 会在管理员集群中创建一个临时节点。在您升级用户集群时,Anthos clusters on VMware 会在该用户集群中创建一个临时节点。临时节点的目的是确保不间断的可用性。在升级集群之前,请验证您是否预留了足够的 IP 地址。对于每个集群,您预留的 IP 地址数必须至少比集群节点数多一个。如需了解详情,请参阅配置静态 IP 地址

确定管理员集群中的节点数量:

kubectl --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] get nodes

其中,[ADMIN_CLUSTER_KUBECONFIG] 是管理员集群的 kubeconfig 文件的路径。

接下来,查看为管理员集群预留的地址:

kubectl get cluster --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] -o yaml

在输出中,您可以在 reservedAddresses 字段中查看为管理员集群节点预留的 IP 地址数。例如,以下输出显示为管理员集群节点预留了五个 IP 地址:

...
reservedAddresses:
- gateway: 21.0.135.254
  hostname: admin-node-1
  ip: 21.0.133.41
  netmask: 21
- gateway: 21.0.135.254
  hostname: admin-node-2
  ip: 21.0.133.50
  netmask: 21
- gateway: 21.0.135.254
  hostname: admin-node-3
  ip: 21.0.133.56
  netmask: 21
- gateway: 21.0.135.254
  hostname: admin-node-4
  ip: 21.0.133.47
  netmask: 21
- gateway: 21.0.135.254
  hostname: admin-node-5
  ip: 21.0.133.44
  netmask: 21

预留 IP 地址的数量应至少比管理员集群中的节点数量多一个。

对于 1.7 版,如需向管理员集群添加 IP 地址,请执行以下操作:

首先修改 IP 地址块文件,如以下示例所示。

blocks:
- netmask: "255.255.252.0"
  ips:
  - ip: 172.16.20.10
    hostname: admin-host1
  - ip: 172.16.20.11
    hostname: admin-host2
  # Newly-added IPs.
  - ip: 172.16.20.12
    hostname: admin-host3

接下来,运行以下命令来更新配置。

gkectl update admin --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] --config [ADMIN_CONFIG_FILE]
  • [ADMIN_CLUSTER_KUBECONFIG] 是 kubeconfig 文件的路径。

  • [ADMIN_CONFIG_FILE] 是管理员配置文件的路径。如果文件位于当前目录中且名称为 admin-config.yaml,则可以省略此标志。

您无法移除 IP 地址,只能添加。

对于 1.7 之前的版本,您可以通过直接修改 Cluster 对象来添加其他地址。

打开集群对象进行修改:

kubectl edit cluster --kubeconfig [ADMIN_CLUSTER_KUBECONFIG]

reservedAddresses 下,添加一个包含 gatewayhostnameipnetmask 的块。

重要提示:从 1.5.0 开始,此步骤不适用于用户集群,并且您必须为每个集群使用 gkectl update cluster

要确定用户集群中的节点数量,请运行以下命令:

kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] get nodes

其中,[USER_CLUSTER_KUBECONFIG] 是用户集群的 kubeconfig 文件的路径。

要查看为用户集群预留的地址,请运行以下命令:

kubectl get cluster --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] \
-n [USER_CLUSTER_NAME] [USER_CLUSTER_NAME] -o yaml

其中:

  • [ADMIN_CLUSTER_KUBECONFIG] 是管理员集群的 kubeconfig 文件的路径。

  • [USER_CLUSTER_NAME] 是用户集群的名称。

预留的 IP 地址的数量应大于用户集群中的节点数。如果情况并非如此,您可以打开用户集群的 IP 地址块文件进行修改:

  • 如果为用户集群预留的任何地址包含在 IP 地址块文件中,请基于 netmaskgateway 将地址添加到相应的块中。

  • 将所需数量的额外静态 IP 地址添加到相应的块中,然后运行 gkectl update cluster

(可选)停用新的 vSphere 功能

新的 Anthos clusters on VMware 版本可能会包含新功能或对特定 VMware vSphere 功能的支持。有时,升级到某个 Anthos clusters on VMware 版本会自动启用此类功能。如需了解新功能,请参阅 Anthos clusters on VMware 的版本说明。新功能有时会在 Anthos clusters on VMware 配置文件中呈现。

如需停用在新的 Anthos clusters on VMware 版本中自动启用和由配置文件驱动的新功能,请在升级集群之前执行以下步骤

  1. 从升级后的管理员工作站中创建一个新的配置文件,并使用与当前配置文件不同的名称:

    gkectl create-config --config [CONFIG_NAME]
  2. 打开新配置文件并记下该功能的字段。关闭文件。

  3. 打开当前配置文件并添加新功能的字段。将字段的值设置为 false 或等效值。

  4. 保存配置文件。

升级集群之前,请查看版本说明。升级后,您将无法以声明方式更改现有集群的配置。

安装软件包以进行升级

要使某个版本可用于集群创建或升级,您必须安装相应的软件包。按照以下步骤安装 TARGET_VERSION (即要升级到的版本号)的软件包。

如需查看当前的 gkectl 和集群版本,请运行以下命令。如需查看详细信息,请使用 --details/-d 标志。

gkectl version --kubeconfig ADMIN_CLUSTER_KUBECONFIG --details

以下是输出示例:

gkectl version: 1.7.2-gke.2 (git-5b8ef94a3)onprem user cluster controller version: 1.6.2-gke.0
current admin cluster version: 1.6.2-gke.0
current user cluster versions (VERSION: CLUSTER_NAMES):
- 1.6.2-gke.0: user-cluster1
available admin cluster versions:
- 1.6.2-gke.0
available user cluster versions:
- 1.6.2-gke.0
- 1.7.2-gke.2
Info: The admin workstation and gkectl is NOT ready to upgrade to "1.8" yet, because there are "1.6" clusters.
Info: The admin cluster can't be upgraded to "1.7", because there are still "1.6" user clusters.

根据获得的输出结果查找以下问题,并视需要修复问题。

  • 如果 gkectl 版本低于 1.7,则无法直接使用新的升级流程。请按照原始升级流程将所有集群升级到 1.6,然后将管理员工作站升级到 1.7 以开始使用新的升级流程。

  • 如果当前管理员集群版本比 TARGET_VERSION 低一个次要版本以上,请将所有集群升级到比 TARGET_VERSION 低一个次要版本的版本。

  • 如果 gkectl 版本低于 TARGET_VERSION,请按照说明将管理员工作站升级到 TARGET_VERSION。

当您确定 gkectl 和集群版本适合升级时,请下载软件包。

检查管理员工作站上是否已存在软件包 tar 压缩包。

stat /var/lib/gke/bundles/gke-onprem-vsphere-TARGET_VERSION.tgz

如果软件包不在管理员工作站上,请下载它。

gsutil cp gs://gke-on-prem-release/gke-onprem-bundle/TARGET_VERSION/gke-onprem-vsphere-TARGET_VERSION.tgz /var/lib/gke/bundles/

安装软件包。

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

其中:

  • [ADMIN_CLUSTER_KUBECONFIG] 是 kubeconfig 文件的路径。如果文件位于当前目录中且名称为 kubeconfig,则可以省略此标志。

列出可用的集群版本,并确保目标版本包含在可用的用户集群版本中。

gkectl version --kubeconfig ADMIN_CLUSTER_KUBECONFIG --details

现在,您可以创建目标版本的用户集群,也可以将用户集群升级到目标版本。

升级用户集群

请在管理员工作站上执行本部分中的步骤。

gkectl upgrade cluster \
    --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] \
    --config [USER_CLUSTER_CONFIG_FILE] \
    [FLAGS]

其中:

  • [ADMIN_CLUSTER_KUBECONFIG] 是管理员集群的 kubeconfig 文件。

  • [USER_CLUSTER_CONFIG_FILE] 是新管理员工作站上的 Anthos clusters on VMware 用户集群配置文件。

  • [FLAGS] 是一组可选的标志。例如,您可以添加 --skip-validation-infra 标志以跳过检查 vSphere 基础架构这一步。

继续升级

如果用户集群升级中断,您可以通过运行带 --skip-validation-all 标志的同一升级命令来恢复用户集群升级:

gkectl upgrade cluster \
--kubeconfig [ADMIN_CLUSTER_KUBECONFIG] \
--config [USER_CLUSTER_CONFIG_FILE] \
--skip-validation-all

升级管理员集群

请在新的管理员工作站上执行本部分中的步骤。 请确保您的 gkectl 和集群处于适合进行升级的版本级别,并且您已下载合适的软件包。

升级的目标版本不得高于您的 gkectl 版本,并且最多只能比 gkectl 版本低一个次要版本。因此,如果您的 gkectl 版本是 1.7,则升级的目标版本可以是 1.6.x 到 1.7。当所有用户集群都升级到某个次要版本后,管理员集群只能升级到该次要版本。例如,如果您尝试将管理员集群升级到 1.7 版,但是仍有 1.6.2 用户集群,您会收到以下错误:

admin cluster can't be upgraded to
"1.7.0-gke.0" yet, because there are still user clusters at "1.6.2-gke.0".

运行以下命令:

gkectl upgrade admin \
--kubeconfig [ADMIN_CLUSTER_KUBECONFIG] \
--config [ADMIN_CLUSTER_CONFIG_FILE] \
[FLAGS]

其中:

  • [ADMIN_CLUSTER_KUBECONFIG] 是管理员集群的 kubeconfig 文件。

  • [ADMIN_CLUSTER_CONFIG_FILE] 是新管理员工作站上的 Anthos clusters on VMware 管理员集群配置文件。

  • [FLAGS] 是一组可选的标志。例如,您可以添加 --skip-validation-infra 标志以跳过检查 vSphere 基础架构这一步。 使用 --force-upgrade-admin 标志可还原为旧的升级流程,即先更新管理员集群,然后更新用户集群。

如果您下载了整个软件包,而且已成功运行 gkectl preparegkectl upgrade admin 命令,您现在应删除整个软件包以节省管理员工作站上的磁盘空间。使用以下命令:

rm /var/lib/gke/bundles/gke-onprem-vsphere-${TARGET_VERSION}-full.tgz

恢复管理员集群升级

您不应中断管理员集群升级。目前,管理员集群升级并非总是可以恢复的。如果管理员集群升级因任何原因中断,您应该联系 Google 支持团队寻求帮助。

升级流程问题排查

如果您在使用推荐的升级流程时遇到问题,请按照以下建议解决问题。这些建议假设您是从 1.6.2 设置开始,并且执行了推荐的升级流程。

排查用户集群升级问题

假设您在测试 Canary 版集群或升级用户集群时遇到 1.7 版相关问题。您从 Google 支持获知,该问题会在即将发布的补丁程序版本 1.7.x 中得到解决。您可以按以下步骤操作:

  1. 继续在生产环境中使用 1.6.2;
  2. 1.7.x 补丁程序版本发布后,在 Canary 版集群中对其进行测试。当您确信 1.7.x 可靠后,将所有生产用户集群升级到 1.7.x。
  3. 将管理员集群升级到 1.7.x。

在测试 1.7 时管理 1.6.x 补丁程序版本

假设您正在测试或迁移到 1.7,但尚未确信它是可靠的,并且管理员集群仍使用 1.6.2。您发现重大 1.6.x 补丁程序版本已发布。您仍可以使用此 1.6.x 补丁程序版本,同时继续测试 1.7。请遵循以下升级流程:

  1. 安装 1.6.x-gke.0 软件包。
  2. 将所有 1.6.2 生产用户集群升级到 1.6.x。
  3. 将管理员集群升级到 1.6.x。

排查管理员集群升级问题

如果您在升级管理员集群时遇到问题,则必须与 Google 支持团队联系以解决管理员集群相关问题。

同时,借助新的升级流程,您仍然可以利用新用户集群功能,而不受管理员集群升级的影响。这使您可以根据需要降低管理员集群的升级频率。例如,您可能想要使用 1.7 版中发布的 Container-Optimized OS 节点池。您的升级流程可以按如下所示进行:

  1. 将生产用户集群升级到 1.7。
  2. 将管理员集群保持为 1.6 并继续接收安全补丁程序;
  3. 在测试环境中测试管理员集群从 1.6 到 1.7 的升级,如果出现问题则报告问题;
  4. 如果您的问题在 1.7 补丁程序版本中得到解决,则可以选择将生产管理员集群从 1.6 升级到此 1.7 补丁程序版本(如果需要)。

已知问题

以下已知问题会影响集群升级。

如果数据磁盘几乎已满,则升级管理员工作站可能会失败

如果您使用 gkectl upgrade admin-workstation 命令升级管理员工作站,则当数据磁盘几乎已满时,升级可能会失败,因为系统会在升级到新的管理员工作站时尝试在本地备份当前的管理员工作站。如果无法清除数据磁盘上的足够空间,请使用带有附加标志 --backup-to-local=falsegkectl upgrade admin-workstation 命令来防止对当前管理工作站进行本地备份。

1.7.0 版:Anthos Config Management 更新发生变化

在 1.7.0 之前的版本中,Anthos clusters on VMware 包含安装和升级 Anthos Config Management 所需的映像。从 1.7.0 开始,Anthos clusters on VMware 软件包中不再包含 Anthos Config Management 软件,您需要单独添加。如果您之前在集群上使用了 Anthos Config Management,则该软件在您执行相应操作之前不会进行升级。

如需详细了解如何安装 Anthos Config Management,请参阅安装 Anthos Config Management

1.1.0-gke.6、1.2.0-gke.6 版本:stackdriver.proxyconfigsecretname 字段被移除

1.1.0-gke.6 版本中移除了 stackdriver.proxyconfigsecretname 字段。如果配置文件中有该字段,Anthos clusters on VMware 的预检检查将返回错误。

要解决此问题,请在升级到 1.2.0-gke.6 之前,从配置文件中删除 proxyconfigsecretname 字段。

Stackdriver 引用旧版本

对于 1.2.0-gke.6 之前的版本,一个已知问题阻止了 Stackdriver 在集群升级后更新其配置。Stackdriver 仍引用旧版本,这会阻止 Stackdriver 接收其遥测流水线的最新功能。此问题可能会导致 Google 支持人员难以排查集群问题。

将集群升级到 1.2.0-gke.6 后,请对管理员集群和用户集群运行以下命令:

kubectl --kubeconfig=[KUBECONFIG] \
-n kube-system --type=json patch stackdrivers stackdriver \
-p '[{"op":"remove","path":"/spec/version"}]'

其中,[KUBECONFIG] 是集群的 kubeconfig 文件的路径。

使用 PodDisruptionBudgets 的工作负载中断

目前,升级集群可能会导致使用 PodDisruptionBudget (PDB) 的工作负载中断或停机。

1.2.0-gke.6 版本:升级后 Prometheus 和 Grafana 被停用

在用户集群中,升级时会自动停用 Prometheus 和 Grafana。不过,配置和指标数据不会丢失。在管理员集群中,Prometheus 和 Grafana 保持启用状态。

如需相关说明,请参阅 Anthos clusters on VMware 版本说明

1.1.2-gke.0 版本:已删除的用户集群节点未从 vSAN 数据存储区中移除

如需相关说明,请参阅 Anthos clusters on VMware 版本说明

1.1.1-gke.2 版本:vSAN 数据存储区文件夹中的数据磁盘可以被删除

如果您使用的是 vSAN 数据存储区,则需要创建一个文件夹来保存 VMDK。已知问题要求您向 vcenter.datadisk 提供文件夹的通用唯一标识符 (UUID) 路径,而不是文件路径。这种不匹配可能会导致升级失败。

如需相关说明,请参阅 Anthos clusters on VMware 版本说明

从 1.0.2-gke.3 版本升级到 1.1.0-gke.6 版本:OIDC 问题

配置了 OpenID Connect (OIDC) 的 1.0.11、1.0.1-gke.5、1.0.2-gke.3 版本集群无法升级到版本 1.1.0-gke.6。此问题在 1.1.1-gke.2 版本中已得到解决。

如果您在安装过程中配置了使用 OIDC 的 1.0.11、1.0.1-gke.5 或 1.0.2-gke.3 版本集群,则无法对其进行升级。您应改为创建新集群。

从 1.0.11 版本升级到 1.0.2-gke.3 版本

1.0.2-gke.3 版本引入了以下 OIDC 字段 (usercluster.oidc)。这些字段允许从 Google Cloud 控制台登录集群:

  • usercluster.oidc.kubectlredirecturl
  • usercluster.oidc.clientsecret
  • usercluster.oidc.usehttpproxy

如果要使用 OIDC,即使您不想从 Google Cloud 控制台登录集群,也必须填写 clientsecret 字段。为了使用 OIDC,您可能需要为 clientsecret 提供一个占位值:

oidc:
  clientsecret: "secret"

节点无法完成升级过程

如果您配置的 PodDisruptionBudget 对象无法允许任何额外的中断,则节点升级可能会在反复尝试后仍无法升级到控制平面版本。为防止此故障,我们建议您扩容 DeploymentHorizontalPodAutoscaler,以允许节点排空,同时仍遵循 PodDisruptionBudget 配置。

如需查看不允许出现任何中断的所有 PodDisruptionBudget 对象,请运行以下命令:

kubectl get poddisruptionbudget --all-namespaces -o jsonpath='{range .items[?(@.status.disruptionsAllowed==0)]}{.metadata.name}/{.metadata.namespace}{"\n"}{end}'

附录

关于在 1.1.0-gke.6 版本中启用的 VMware DRS 规则

从 1.1.0-gke.6 版开始,Anthos clusters on VMware 会自动为您的用户集群节点创建 VMware 分布式资源调度器 (DRS) 反亲和性规则,使其分布到数据中心内的至少三个物理主机上。从 1.1.0-gke.6 版开始,此功能会自动为新集群和现有集群启用。

在升级之前,请确保您的 vSphere 环境满足以下条件:

  • VMware DRS 已启用。VMware DRS 需要 vSphere Enterprise Plus 许可版本。如需了解如何启用 DRS,请参阅在集群中启用 VMware DRS

  • 凭据配置文件中提供的 vSphere 用户名具有 Host.Inventory.EditCluster 权限。

  • 至少有三个物理主机可用。

如果 vSphere 环境不满足上述条件,您仍然可以升级,但如果要将用户集群从 1.3.x 升级到 1.4.x,则需要停用反亲和性群组。如需了解详情,请参阅 Anthos clusters on VMware 版本说明中的这个已知问题

停机时间

关于升级过程中的停机时间

资源 说明
管理员集群

当管理员集群关停时,用户集群上的用户集群控制层面和工作负载会继续运行,除非它们受到导致停机的故障的影响

用户集群控制层面

通常情况下,用户集群控制层面应该不会出现较长的停机时间。但是,与 Kubernetes API 服务器的长时间运行的连接可能会中断,需要重新建立连接。在这些情况下,API 调用方应该重试,直到建立连接。在最糟糕的情况下,升级期间的停机时间可能长达一分钟。

用户集群节点

如果升级需要更改用户集群节点,Anthos clusters on VMware 会以滚动方式重新创建节点,并重新安排在这些节点上运行的 Pod。您可以通过配置适当的 PodDisruptionBudget反亲和性规则来防止对工作负载产生影响。

已知问题

请参阅已知问题

问题排查

请参阅排查集群创建和升级问题