vSphere with Tanzu 支持对 主管集群 和 Tanzu Kubernetes Grid 服务 集群以及支持这些集群的基础架构执行滚动更新。
如何更新 主管集群 和 Tanzu Kubernetes Grid 服务 集群
vSphere with Tanzu 对 主管集群 和 Tanzu Kubernetes Grid 服务 集群使用滚动更新模型。滚动更新模型可确保在更新过程中将集群工作负载的停机时间降至最低。滚动更新包括升级 Kubernetes 软件版本以及支持 Kubernetes 集群的基础架构和服务,如虚拟机配置和资源、vSphere 服务和命名空间以及自定义资源。
主管集群 更新和 Tanzu Kubernetes Grid 服务 集群更新之间的依赖关系
您可以单独更新 主管集群 和 Tanzu Kubernetes Grid 服务 集群。但是请注意,这两者之间存在依赖关系。
更新 主管集群 可能会触发在其中部署的 Tanzu Kubernetes Grid 服务 集群的滚动更新。请参见通过执行 vSphere 命名空间更新来更新 主管集群。
如果 Tanzu Kubernetes Grid 服务 集群与目标 主管集群 版本不兼容,您可能需要在更新 主管集群 之前先更新一个或多个 Tanzu Kubernetes Grid 服务 集群。请参见验证 Tanzu Kubernetes 集群的更新兼容性。
关于 主管集群 更新
启动 主管集群 更新时,系统将创建一个新的控制平面节点,并将其加入到现有控制平面。在此更新阶段,vSphere 清单将显示四个控制平面节点,因为系统会添加一个新的更新节点,然后移除旧的过期节点。对象将从一个旧的控制平面节点迁移到该新的控制平面节点,并移除旧的控制平面节点。此过程逐个重复执行,直到所有控制平面节点都已更新。控制平面更新后,将以类似的滚动更新方式更新工作节点。工作节点是 ESXi 主机,每个 ESXi 主机上的每个 spherelet 进程逐个进行更新。
- 更新 vSphere 命名空间。
- 更新所有内容,包括 VMware 和 Kubernetes 版本。
- 升级 vCenter Server。
- 执行 vSphere 命名空间 更新(包括 Kubernetes 升级)。
要执行 vSphere 命名空间 更新,请参见通过执行 vSphere 命名空间更新来更新 主管集群。
- 检查 VMware 互操作性列表 (https://interopmatrix.vmware.com/Interoperability) 中的 vCenter Server 和 NSX-T Data Center 以确定兼容性。vSphere with Tanzu 功能由随 vCenter Server 提供的工作负载控制平面 (WCP) 软件提供。
- 升级 NSX-T Data Center(如果兼容)。
- 升级 vCenter Server。
- 升级 vSphere Distributed Switch。
- 升级 ESXi 主机。
- 检查任何已置备的 Tanzu Kubernetes Grid 服务 集群与目标 主管集群 版本的兼容性。
- 更新 vSphere 命名空间(包括 主管集群 Kubernetes 版本)。
- 更新 Tanzu Kubernetes Grid 服务 集群。
关于 Tanzu Kubernetes Grid 服务 集群更新
更新 主管集群 时,支持部署到该 主管集群 的 Tanzu Kubernetes Grid 服务 集群的基础架构组件(如 Tanzu Kubernetes Grid 服务)也会进行更新。每个基础架构更新都可以包括支持 Tanzu Kubernetes Grid 服务 的服务(CNI、CSI、CPI)的更新,以及可应用于现有 Tanzu Kubernetes Grid 服务 集群的控制平面和工作节点的更新配置设置。为确保您的配置符合兼容性要求,vSphere with Tanzu 会在滚动更新期间执行预检查并实施合规性。
要对 Tanzu Kubernetes Grid 服务 集群执行滚动更新,需要更新集群清单。请参见更新 Tanzu Kubernetes 集群。但是,请注意,执行 vSphere 命名空间 更新时,系统会立即将更新的配置传播到所有 Tanzu Kubernetes Grid 服务 集群。这些更新可自动触发 Tanzu Kubernetes Grid 服务 控制平面和工作节点的滚动更新。
用于替换集群节点的滚动更新过程类似于 Kubernetes 部署中的 pod 滚动更新。有两个不同的控制器负责执行 Tanzu Kubernetes Grid 服务 集群的滚动更新:加载项控制器和 TanzuKubernetesCluster 控制器。在这两个控制器中,滚动更新有三个关键阶段:更新加载项、更新控制平面以及更新工作节点。这些阶段按顺序进行,并执行预检查以防止某一步骤在前一步骤充分完成之前开始。如果确定不需要执行这些步骤,则可以跳过这些步骤。例如,更新可能仅影响工作节点,因此不需要任何加载项或控制平面更新。
在更新过程中,系统会添加一个新的集群节点,并等待该节点与目标 Kubernetes 版本一起上线。然后,系统将旧节点标记为删除,移至下一个节点,并重复此过程。移除所有 pod 后,才会删除旧节点。例如,如果 pod 定义为 PodDisruptionBudgets 以阻止某节点完全引流,则该节点将隔离,直到可以逐出这些 pod 后才会移除。系统首先升级所有控制平面节点,然后再升级工作节点。在更新过程中,Tanzu Kubernetes Grid 服务 集群状态将更改为“正在更新”。滚动更新过程完成后,Tanzu Kubernetes Grid 服务 集群状态将更改为“正在运行”。
在 Kubernetes 版本升级过程中,在不受复制控制器监管的 Tanzu Kubernetes Grid 服务 集群上运行的 Pod 将在 Tanzu Kubernetes Grid 服务 集群更新期间作为工作节点引流过程的一部分删除。如果手动触发集群更新或由 vSphere 命名空间 更新自动触发,则会出现此情况。不受复制控制器监管的 Pod 包括不作为 Deployment 或 ReplicaSet 规范的一部分创建的 Pod。有关详细信息,请参考 Kubernetes 文档中的 Pod 生命周期:Pod 生命周期主题。