vSphere with Tanzu 支持对 主管集群Tanzu Kubernetes 集群以及支持这些集群的基础架构执行滚动更新。

如何更新 vSphere with Tanzu 集群

vSphere with Tanzu主管集群Tanzu Kubernetes 集群使用滚动更新模型。滚动更新模型可确保在更新过程中将集群工作负载的停机时间降至最低。滚动更新包括升级 Kubernetes 软件版本以及支持 Kubernetes 集群的基础架构和服务,如虚拟机配置和资源、vSphere 服务和命名空间以及自定义资源。

为确保成功更新,您的配置必须满足多个兼容性要求,因此系统会实施复查条件以确保集群已准备好进行更新,并在集群升级失败时支持回滚。
注: vSphere with Tanzu 更新不仅仅是升级 Kubernetes 软件版本。我们使用“更新”(而非“升级”)一词描述此过程,因为升级是增加软件版本的有限更新形式。

主管集群 更新和 Tanzu Kubernetes 集群更新之间的依赖关系

您可以单独更新主管集群Tanzu Kubernetes 集群。但是请注意,这两者之间存在依赖关系。

更新主管集群可能会触发在其中部署的 Tanzu Kubernetes 集群的滚动更新。请参见通过执行 vSphere 命名空间更新来更新 主管集群

如果 Tanzu Kubernetes 集群与目标主管集群版本不兼容,您可能需要在更新主管集群之前先更新一个或多个 Tanzu Kubernetes 集群。请参见验证 Tanzu Kubernetes 集群的更新兼容性

关于 主管集群 更新

启动 主管集群 更新时,系统将创建一个新的控制平面节点,并将其加入到现有控制平面。在此更新阶段,vSphere 清单将显示四个控制平面节点,因为系统会添加一个新的更新节点,然后移除旧的过期节点。对象将从一个旧的控制平面节点迁移到该新的控制平面节点,并移除旧的控制平面节点。此过程逐个重复执行,直到所有控制平面节点都已更新。控制平面更新后,将以类似的滚动更新方式更新工作节点。工作节点是 ESXi 主机,每个 ESXi 主机上的每个 spherelet 进程逐个进行更新。

您可以在以下更新之间进行选择:
  • 更新主管命名空间。
  • 更新所有内容,包括 VMware 和 Kubernetes 版本。
可以使用 vSphere 命名空间更新工作流更新主管集群运行的 Kubernetes 版本(例如从 Kubernetes 1.16.7 更新到 Kubernetes 1.17.4)以及支持 Kubernetes 集群的基础架构。这种类型的更新较为频繁,用来与 Kubernetes 发布周期保持一致。以下是 vSphere 命名空间更新顺序。
  1. 升级 vCenter Server
  2. 执行 vSphere 命名空间更新(包括 Kubernetes 升级)。

要执行 vSphere 命名空间更新,请参见通过执行 vSphere 命名空间更新来更新 主管集群

可以使用更新所有内容工作流更新所有 vSphere with Tanzu 组件。更新主要版本时需要采用这种类型的更新,例如从 NSX-T 3.0 更新到 3.X,以及从 vSphere 7.0 更新到 7.X。此更新工作流不常执行,具体取决于何时有新的 VMware 产品版本发布。以下是更新所有内容的顺序:
  1. 升级 NSX-T Data Center。
  2. 升级 vCenter Server
  3. 升级 vSphere Distributed Switch。
  4. 升级 ESXi 主机。
  5. 更新vSphere命名空间(包括 Kubernetes 升级)。
  6. 更新 Tanzu Kubernetes
下图介绍了 vSphere with Tanzu 更新的常规工作流。

关于 Tanzu Kubernetes 集群更新

更新 主管集群 时,支持部署到该 主管集群Tanzu Kubernetes 集群的基础架构组件(如 Tanzu Kubernetes Grid 服务)也会进行更新。每个基础架构更新都可以包括支持 Tanzu Kubernetes Grid 服务 的服务(CNI、CSI、CPI)的更新,以及可应用于现有 Tanzu Kubernetes 集群的控制平面和工作节点的更新配置设置。为确保您的配置符合兼容性要求,vSphere with Tanzu 会在滚动更新期间执行预检查并实施合规性。

要对 Tanzu Kubernetes 集群执行滚动更新,通常需要更新集群清单。请参见更新 Tanzu Kubernetes 集群。但是,请注意,执行 vSphere 命名空间更新时,系统会立即将更新的配置传播到所有 Tanzu Kubernetes 集群。这些更新可自动触发 Tanzu Kubernetes 控制平面和工作节点的滚动更新。

用于替换集群节点的滚动更新过程类似于 Kubernetes 部署中的 pod 滚动更新。有两个不同的控制器负责执行 Tanzu Kubernetes 集群的滚动更新:加载项控制器和 TanzuKubernetesCluster 控制器。在这两个控制器中,滚动更新有三个关键阶段:更新加载项、更新控制平面以及更新工作节点。这些阶段按顺序进行,并执行预检查以防止某一步骤在前一步骤充分完成之前开始。如果确定不需要执行这些步骤,则可以跳过这些步骤。例如,更新可能仅影响工作节点,因此不需要任何加载项或控制平面更新。

在更新过程中,系统会添加一个新的集群节点,并等待该节点与目标 Kubernetes 版本一起上线。然后,系统将旧节点标记为删除,移至下一个节点,并重复此过程。移除所有 pod 后,才会删除旧节点。例如,如果 pod 定义为 PodDisruptionBudgets 以阻止某节点完全引流,则该节点将隔离,直到可以逐出这些 pod 后才会移除。系统首先升级所有控制平面节点,然后再升级工作节点。在更新过程中,Tanzu Kubernetes 集群状态将更改为“正在更新”。滚动更新过程完成后,Tanzu Kubernetes 集群状态将更改为“正在运行”。

在 Kubernetes 版本升级过程中,在不受复制控制器监管的 Tanzu Kubernetes 集群上运行的 Pod 将在 Tanzu Kubernetes 集群更新期间作为工作节点引流过程的一部分删除。如果手动触发集群更新或由 vSphere 命名空间更新自动触发,则会出现此情况。不受复制控制器监管的 Pod 包括不作为 Deployment 或 ReplicaSet 规范的一部分创建的 Pod。有关详细信息,请参考 Kubernetes 文档中的 Pod 生命周期:Pod 生命周期主题。