VMware vSphere Provider 安装
本文介绍如何安装 VMware vSphere Infrastructure Provider,并验证所需的 Cluster API 组件在 global 集群上可用。本页中的 provider 版本、CRD 集合和 admission webhooks 已针对 VMware vSphere Provider v1.0.17 完成验证。
v1.0.17 是 provider 打包版本,其中包含 CAPV controller、vSphere CPI 镜像、provider chart 以及用于强制执行固定 IP 发布规则的 admission webhooks。有关这些规则,请参阅 Provider Requirements。有关变更历史,请参阅 Release Notes。
前提条件
安装 provider 前,请确保满足以下条件:
- 您可以访问
global集群。 - 您可以访问 Customer Portal 以下载 provider 软件包。
- 您知道计划安装的平台版本和 provider 软件包版本。本页针对
v1.0.17。 - 集群将通过
VSphereCluster.spec.identityRef引用的 vCenter 账户可以列出、创建和设置 VM 自定义属性。请授予 Global → Manage custom attributes 和 Global → Set custom attribute 权限。每当VSphereCluster或其 CAPICluster携带任何vsphere.cluster.x-k8s.io/*注释时,provider 都需要这些权限;如果缺少权限,VM reconciliation 将失败,而不是跳过元数据写入。 global集群是活动管理集群,而不是灾难恢复备用集群。请参阅 Standby Management Clusters。
操作步骤
下载所需软件包
要在 Immutable Infrastructure 中使用 VMware vSphere,请从 Customer Portal 下载以下集群插件:
- Alauda Container Platform Kubeadm Provider
- Alauda Container Platform VMware vSphere Infrastructure Provider
上架软件包
将下载的软件包上架到平台仓库。
有关详细的上架操作步骤,请参阅 Upload Packages。
在 global 集群上安装 provider
在 global 集群上安装这两个集群插件。
有关详细的集群插件操作步骤,请参阅 Cluster Plugin。
验证安装
检查模块状态:
两个插件都必须存在且处于 Running 状态。
检查已注册的 CRD:
预期输出包括全部九个 CRD:
vsphereclusters.infrastructure.cluster.x-k8s.iovsphereclusteridentities.infrastructure.cluster.x-k8s.iovsphereclustertemplates.infrastructure.cluster.x-k8s.iovspheredeploymentzones.infrastructure.cluster.x-k8s.iovspherefailuredomains.infrastructure.cluster.x-k8s.iovspheremachines.infrastructure.cluster.x-k8s.iovspheremachineconfigpools.infrastructure.cluster.x-k8s.iovspheremachinetemplates.infrastructure.cluster.x-k8s.iovspherevms.infrastructure.cluster.x-k8s.io
检查已注册的 admission webhooks。由于 ValidatingWebhookConfiguration 对象名称会因打包方式而异,因此请匹配 webhook 名称:
预期输出包括:
validation.vspherecluster.infrastructure.cluster.x-k8s.iovalidation.vspheremachineconfigpool.infrastructure.cluster.x-k8s.iovalidation.vspheremachinetemplate.infrastructure.cluster.x-k8s.iovalidation.kubeadmcontrolplane.capv.cluster.x-k8s.iovalidation.machinedeployment.capv.cluster.x-k8s.io
最后两个 webhook 强制执行 Provider Requirements 中所述的固定 IP 发布规则。如果未注册这两个 webhook,slot 模型仍要求使用相同的值——不符合要求的发布会因缺少可用 slot 而停滞,而不是在开始时直接被拒绝。vspheremachineconfigpool webhook 还会拦截 DELETE,因此删除仍拥有 InUse 个 slot 的池时会立即被拒绝,而不是将资源置于 Terminating 状态。
如果平台限制 ClusterRoles,请检查管理集群权限。除了上游权限集合外,provider chart 还向 capv-manager-role 授予以下权限:
- 对
cluster.alauda.io中的clustermodules、moduleconfigs和moduleplugins的读取权限。 - 对
moduleinfoes的写入权限,以及对moduleinfoes/status的读取权限。 - 对
clusterregistry.k8s.io和platform.tkestack.io中clusters的读取权限。 - 对
controlplane.cluster.x-k8s.io/kubeadmcontrolplanes执行patch和update的权限。 - 对
vspheremachineconfigpools的访问权限。
kubeadmcontrolplanes patch 权限使 provider 能够设置 Provider-managed fields on your manifests 中所述的 CoreDNS 和 kube-proxy 跳过注释。
升级 Provider
按照安装 Provider 的相同方式进行升级:上传更新后的软件包,并更新 global 集群上的集群插件。
升级还会更新 Provider CRD。某些字段会在不同版本之间移动,但现有资源会自动迁移:不要手动编辑 VSphereMachineConfigPool 或任何其他 Provider 对象以匹配新 schema,也不要删除并重新创建对象。升级后的首次协调过程中,控制器会将每个对象更新为当前布局:
- 不会触碰控制平面端点。现有集群会保持
spec.controlPlaneLoadBalancer未设置,这正是外部 LoadBalancer 的状态,并且会一直保持不变:API server 地址不会更改,也不会向业务集群部署任何内容。 - 以前记录在
spec.configs[].persistentDisks[].volumePath和.diskUUID上的每个磁盘状态,以及status.configStatuses[].reclaimStatus下每个 slot 的回收状态,都会合并到status.persistentDiskStatuses[]中。正在进行的回收会保留其阶段和任务引用并继续执行,随后清除reclaimStatus,使状态只有一个真实来源。 - 已弃用的
spec字段会保留在对象中。请将其视为历史记录,并改为读取status.persistentDiskStatuses[]。 - 迁移不会覆盖已设置的值,因此可以安全地重复执行。磁盘部分仅记录状态,并且会在联系 vCenter 之前运行,因此即使 vCenter 无法访问也能完成。
- 迁移仅涵盖 Provider 自身的资源。准入 webhook 要求在 Cluster API 对象上设置的发布值——
maxSurge、replicas、maxUnavailable——会经过验证,但绝不会被重写,因此现有的不包含这些值的KubeadmControlPlane或MachineDeployment仍必须手动修正。请参阅根据准入规则检查 manifest。
业务集群中的任何内容都不会被触碰,也不会替换任何 VM。在升级前,需要了解以下三个影响:
- 在早期 Provider 上创建的集群会保留其外部 LoadBalancer,无法采用 Self-built VIP。端点是在部署时选择的:集群运行期间无法调整,升级也不是更改端点的时机——在运行中的集群上填入
spec.controlPlaneLoadBalancer会被拒绝。请参阅控制平面端点模式。 - 一个池会保留其创建时使用的磁盘列表。
spec.configs[].ephemeralDisks[]是此版本新增的,但升级不会将现有磁盘移入其中:在早期 Provider 上创建的集群会继续将/var/cpaas、/var/lib/containerd和/var/lib/etcd作为持久磁盘,而处于InUse或Released状态的 slot 会拒绝删除或重塑任一列表中的磁盘。新集群文档中介绍的持久磁盘与临时磁盘拆分属于创建时布局。请参阅标准数据磁盘。 - 通过
guestinfo用户数据交付的来宾侧更改(例如 pod 日志迁移)只有在节点被替换时才会应用到节点。请参阅迁移 pod 日志目录。
按照验证安装中的检查确认结果,然后读取一个池:
升级前已完成配置的每个磁盘都会显示一个阶段,并且 status.configStatuses[].reclaimStatus 已消失。从未被任何 Machine 分配过的 slot 上的磁盘尚无 VMDK,因此不会有记录;这是预期行为,并不表示迁移不完整。
Standby 管理集群
只要 etcd-sync ConfigMap 存在于 kube-public 命名空间中,Provider 就会将管理集群视为灾难恢复备用集群:
- 由保留的
global集群拥有的对象仍会进行调谐。 - 所有其他对象都会被跳过,并每 30 秒重新入队。
- 无法确定集群名称的对象也会被跳过。
请勿针对灾难恢复备用管理集群创建或升级业务集群。 调谐器会静默地执行 no-op——资源上的 condition 不会发生变化,也不会显示任何错误,因此该工作流看起来像是停滞了,而不是被阻止。
开始前请检查:
一个常见错误是检查 kube-system。ConfigMap 位于 kube-public 中。
有关灾难恢复工作流本身,请参阅Global Cluster 灾难恢复。
后续步骤
安装 Provider 后,继续执行以下操作: