为 VMware vSphere 集群准备参数

本文档帮助你收集从 global 集群创建 VMware vSphere 业务集群所需的值。在你应用 global 集群中创建集群 中的清单之前,请先完成此检查表。

场景

在以下场景中使用此检查表:

  • 你正在准备一个新的 VMware vSphere 集群部署。
  • 你希望在开始部署前验证外部依赖。
  • 你计划启用扩展场景,例如多个数据中心、多个 NIC 或额外的 worker 节点。

前提条件

在开始之前,请确保满足以下条件:

  • 你可以使用 kubectl 访问 global 集群。
  • 业务集群对象必须存储在 cpaas-system 命名空间中。
  • 你可以访问目标 vCenter 的 inventory、网络、datastore 和模板。

如何使用此检查表

请按以下顺序使用此检查表:

  1. 收集本文档中列出的部署参数。
  2. 将清单模板中的每个占位符替换为此处收集到的实际值。
  3. 在多个清单中重复出现的占位符位置复用同一个值。
  4. 如果未启用某个可选功能,请严格按照扩展文档中的说明删除对应的 YAML 块。
  5. 如果某个可选字段(例如 deviceName)不需要,请从 YAML 清单中删除整行。

术语

在 VMware vSphere 集群创建文档中,以下术语始终保持一致。

machine config pool

machine config pool 是 VSphereMachineConfigPool 自定义资源。它预先定义了节点槽位。每个槽位可以包含:

  • 节点主机名
  • 目标数据中心
  • 每个 NIC 的静态 IP 配置
  • 持久磁盘定义
WARNING

每个 VSphereMachineConfigPool 只能被一个 KubeadmControlPlane 或一个 MachineDeployment 引用。不要在多个控制平面或 worker 组之间共享同一个 VSphereMachineConfigPool。如果某个 pool 已绑定到其他消费者,VSphereMachine 将报告 MachineConfigPoolReady=False 状态,原因是 PoolBoundToOtherConsumer

节点槽位

节点槽位是 VSphereMachineConfigPool.spec.configs[] 下的一项条目。单个槽位通常对应一个节点,例如 cp-01worker-01。槽位的 hostname 会驱动 Kubernetes 节点名称、kubelet serving certificate 的 DNS SAN,以及(结合解析后的主 NIC 地址)kubelet 的 node-ip;它必须是合法的 DNS-1123 子域名。

槽位网络布局

每个槽位会在 network.primarynetwork.additional 下声明其 NIC 布局:

  • network.primary 是必需项。必须设置其 networkName,并将其作为 kubelet 的 node-ip 来源。
  • network.additional 是一个可选的额外 NIC 列表,会按照列表顺序在主 NIC 之后合并。

deviceName

deviceNameVSphereMachineConfigPool 网络配置中的一个可选字段。它用于控制客户机操作系统内部看到的 NIC 名称,例如 eth0eth1

填写这些值时,请注意以下区别:

  • networkName 是 vCenter 网络或端口组名称。
  • deviceName 是客户机操作系统内部的 NIC 名称。
  • 如果省略 deviceName,CAPV 通常会按照 NIC 顺序分配 eth0eth1eth2 等名称。

vCenter 资源池

vCenter 资源池是 vCenter 原生的 inventory 对象,例如:

/Datacenter1/host/cluster1/Resources

在扩展场景中,此路径由 VSphereDeploymentZone.spec.placementConstraint.resourcePool 使用。

计算集群

计算集群是目标 vCenter compute-cluster 的名称。在本文档中,它主要用于将 VSphereFailureDomain 映射到特定的部署目标时。

Datastore

Datastore 是 vSphere 存储位置,用于存放 VM 磁盘。系统盘和数据盘都必须放置在具体的 datastore 上。

VM 模板

VM 模板是用于创建节点虚拟机的源模板。当你启用多个数据中心时,同一个模板必须已经存在于每个目标数据中心中,并且能够通过相同的模板名称解析。

Thumbprint

Thumbprint 是 vCenter server certificate 的 SHA-1 指纹。CAPV 使用它来验证目标 vCenter server。

使用以下命令获取它:

openssl s_client -connect <vsphere_server>:443 -servername <vsphere_server> </dev/null 2>/dev/null | openssl x509 -noout -fingerprint -sha1

Management Cluster 前提条件

使用下表记录所需值和校验结果。

参数占位符必填校验或说明示例实际值
global 集群 kubeconfig 路径-使用此 kubeconfig 时,kubectl get ns 可成功执行。/path/to/kubeconfig-
业务对象命名空间<namespace>存放业务集群对象的命名空间。必须为 cpaas-systemcpaas-system-
已安装 cluster-api-provider-vsphere-kubectl get minfo -l cpaas.io/module-name=cluster-api-provider-vsphere 有返回结果。-
已安装 cluster-api-provider-kubeadm-kubectl get minfo -l cpaas.io/module-name=cluster-api-provider-kubeadm 有返回结果。-
已启用 ClusterResourceSet=true-capi-controller-manager 参数中包含 ClusterResourceSet=true-

vCenter 和模板前提条件

vCenter 连接信息

参数占位符必填校验或说明示例实际值
vCenter server<vsphere_server>使用 vCenter IP 地址或 FQDN。vc.example.local-
vCenter username<vsphere_username>CAPV 使用它来向 vCenter 进行认证。svc-capv@example.local-
vCenter password<vsphere_password>CAPV 使用它来向 vCenter 进行认证。******-
Thumbprint<thumbprint>使用前面展示的 openssl 命令获取。AA:BB:CC:...-

注意:本文档假设 vCenter HTTPS 默认端口为 443

VM 模板要求

参数占位符必填校验或说明示例实际值
VM 模板名称<template_name>用于克隆控制平面和 worker 节点。microos-k8s-template-
vCenter 凭证 secret 名称<credentials_secret_name>使用一个稳定的名称,例如 <cluster_name>-vsphere-credentialsdemo-cluster-vsphere-credentials-
克隆模式<clone_mode>允许的值:linkedClonefullClone。默认值为 linkedClonelinkedClone 要求 VM 模板至少有一个快照;如果不存在快照,CAPV 会回退到 fullClone。使用 linkedClone 时,diskGiB 会被忽略;系统盘保持模板中的大小。如果你需要 diskGiB 生效,请选择 fullClonelinkedClone-
关机模式<power_off_mode>允许的值:hardsofttrySoft。默认值为 hardsofttrySoft 需要模板中包含 VMware Tools / open-vm-tools,以实现优雅关机;trySoft 会在客户机软关机超时后回退到 hardtrySoft-
SSH 公钥<ssh_public_key>注入到控制平面和 worker 节点中。ssh-rsa AAAA...-

模板还应满足以下要求:

  • 使用你的平台镜像策略支持的操作系统。
  • 包含 cloud-init
  • 包含 VMware Tools 或 open-vm-tools
  • 包含 containerd
  • 包含 kubeadm bootstrap 所需的基础组件。
  • /root/images/ 下包含预先导出的容器镜像 tar 文件。这些文件会在 kubeadm 运行之前由 capv-load-local-images.sh 导入到 containerd 中,从而使节点引导不依赖从远程 registry 拉取镜像。
  • /root/images/*.tar 文件必须包含 sandbox(pause)镜像,并且其引用必须与 /etc/containerd/config.toml 中配置的 sandbox_image 值(containerd v1)或 sandbox 值(containerd v2)完全一致。例如,如果 containerd 配置为 sandbox_image = "registry.example.com/tkestack/pause:3.10",则某个 tar 文件中必须包含该完全一致的镜像引用。不匹配会导致 containerd 从网络拉取 sandbox 镜像,这会破坏本地预加载的目的,并在 air-gapped 环境中失败。

Load Balancer 前提条件

参数占位符必填校验或说明示例实际值
控制平面 VIP<vip>VIP 已经分配完成。10.10.10.10-
API server 端口<api_server_port>默认端口为 64436443-
VIP 连通性-执行环境可以访问 VIP:6443-
后端服务器维护责任归属-如果 load balancer 不会自动更新后端目标,请定义由谁负责维护。Platform team-

集群基线参数

参数占位符必填校验或说明示例实际值
集群名称<cluster_name>在所有清单中使用相同的值。demo-cluster-
Kubernetes 版本<k8s_version>使用目标平台版本要求的版本。v1.33.7-2-
控制平面副本数<cp_replicas>基线拓扑使用 33-
worker 副本数<worker_replicas>基线拓扑使用 11-
Pod CIDR<pod_cidr>不能与现有网络重叠。10.244.0.0/16-
Service CIDR<service_cidr>不能与现有网络重叠。10.96.0.0/12-
镜像 registry<image_registry>私有 registry 地址。kubeadm 的 imageRepository 设置为 <image_registry>/tkestackregistry.example.local-
kube-ovn 版本<kube_ovn_version>必须满足平台网络插件要求。v4.2.26-
kube-ovn-join-cidr<kube_ovn_join_cidr>不能与其他网络重叠。100.64.0.0/16-
CoreDNS 镜像标签<dns_image_tag>使用 Kubernetes 版本所批准的标签。1.12.4-
etcd 镜像标签<etcd_image_tag>使用 Kubernetes 版本所批准的标签。v3.5.0-
加密提供程序 secret<encryption_provider_secret>用于 secret at rest 加密的 Base64 编码 AES 密钥。使用 head -c 32 /dev/urandom | base64 生成。不要复用示例值。(generated)-

最小单数据中心参数

数据中心和资源放置

参数占位符必填校验或说明示例实际值
默认数据中心<default_datacenter>用于基线拓扑。dc-a-

主 NIC 参数

参数占位符必填校验或说明示例实际值
vCenter 网络名称<nic1_network_name>vCenter 中的第一个网络或端口组名称。pg-business-
客户机 NIC 名称<nic1_device_name>仅在需要强制指定客户机 NIC 名称时设置。如果不需要,请从 YAML 清单中删除 deviceName 行。eth0-
网关<nic1_gateway>主 NIC 的默认网关。10.10.10.1-
前缀长度<nic1_prefix>与每个节点 IP 地址一起使用。24-
DNS server 1<nic1_dns_1>主 NIC 的 DNS server。10.10.0.10-

控制平面 machine config pool

参数占位符必填校验或说明示例实际值
控制平面 pool 名称<cp_pool_name>控制平面节点的 machine config pool 名称。demo-cluster-control-plane-pool-
控制平面节点 1 主机名<cp_node_name_1>第一个控制平面节点的节点名称和 kubelet serving cert SAN。必须是合法的 DNS-1123 子域名。cp-01-
控制平面节点 1 数据中心<master_01_datacenter>通常与默认数据中心相同。dc-a-
控制平面节点 1 IP 地址<master_01_nic1_ip>仅 IPv4 地址,不包含前缀长度。10.10.10.11-
控制平面节点 2 主机名<cp_node_name_2>第二个控制平面节点的节点名称和 kubelet serving cert SAN。必须是合法的 DNS-1123 子域名。cp-02-
控制平面节点 2 数据中心<master_02_datacenter>通常与默认数据中心相同。dc-a-
控制平面节点 2 IP 地址<master_02_nic1_ip>仅 IPv4 地址,不包含前缀长度。10.10.10.12-
控制平面节点 3 主机名<cp_node_name_3>第三个控制平面节点的节点名称和 kubelet serving cert SAN。必须是合法的 DNS-1123 子域名。cp-03-
控制平面节点 3 数据中心<master_03_datacenter>通常与默认数据中心相同。dc-a-
控制平面节点 3 IP 地址<master_03_nic1_ip>仅 IPv4 地址,不包含前缀长度。10.10.10.13-

Worker machine config pool

参数占位符必填校验或说明示例实际值
Worker pool 名称<worker_pool_name>worker 节点的 machine config pool 名称。demo-cluster-worker-pool-
Worker 节点 1 主机名<worker_node_name_1>第一个 worker 节点的节点名称和 kubelet serving cert SAN。必须是合法的 DNS-1123 子域名。worker-01-
Worker 节点 1 数据中心<worker_01_datacenter>通常与默认数据中心相同。dc-a-
Worker 节点 1 IP 地址<worker_01_nic1_ip>仅 IPv4 地址,不包含前缀长度。10.10.10.21-
Worker 节点 2 主机名<worker_node_name_2>在扩展 worker pool 时使用。worker-02-
Worker 节点 2 数据中心<worker_02_datacenter>在扩展 worker pool 时使用。dc-b-
Worker 节点 2 IP 地址<worker_02_nic1_ip>在扩展 worker pool 时使用。10.10.10.22-
releaseDelayHours<release_delay_hours>CAPV 重新复用已释放槽位前的延迟时间。24-

计算资源规格

参数占位符必填校验或说明示例实际值
控制平面 CPU<cp_num_cpus>每个控制平面节点的 CPU 数量。4-
控制平面内存 MiB<cp_memory_mib>每个控制平面节点的内存。8192-
控制平面系统 datastore<cp_system_datastore>控制平面系统盘所在的 datastore。datastore-cp-
控制平面系统盘大小 GiB<cp_system_disk_gib>基线示例值为 300。当 <clone_mode>linkedClone 时会被忽略;此时系统盘保持模板中的大小。300-
Worker CPU<worker_num_cpus>每个 worker 节点的 CPU 数量。2-
Worker 内存 MiB<worker_memory_mib>每个 worker 节点的内存。4096-
Worker 系统盘 datastore<worker_system_datastore>worker 系统盘所在的 datastore。datastore-worker-
Worker 系统盘大小 GiB<worker_system_disk_gib>基线示例值为 300。当 <clone_mode>linkedClone 时会被忽略;此时系统盘保持模板中的大小。300-

标准数据盘

每个节点角色都需要一组专用数据盘。下列列出的磁盘是最低必需磁盘。如果你的工作负载需要,可以在 persistentDisks 列表中追加更多磁盘。

持久磁盘字段

字段必填默认值说明
name在槽位内唯一的磁盘名称。
sizeGiB磁盘大小,单位为 GiB。
mountPath(空)客户机 OS 内的挂载路径。如果为空,磁盘会以 raw device 方式附加,并在 /dev/disk/by-capv/<name> 下创建符号链接,但不会被格式化或挂载。当外部进程在运行时管理该磁盘时,这很有用。
fsFormatext4(当设置了 mountPath 时)文件系统格式。当 mountPath 为空时会被忽略。
wipeFilesystemfalse当为 true 时,新 VM 的首次启动会清空磁盘内容。重启和手动重启服务不受影响。可用于 etcd 磁盘,以避免旧数据在滚动更新期间阻止 kubeadm join
datastore(pool 默认值)覆盖此磁盘使用的 datastore。

控制平面节点(每个节点 3 个磁盘)

磁盘名称挂载路径wipeFilesystem用途建议最小大小占位符
var-cpaas/var/cpaasfalse存放日志、审计数据和其他平台数据100 GiB<cp_var_cpaas_size_gib>
var-lib-containerd/var/lib/containerdfalse存放 containerd 运行时数据(镜像、layer、快照)100 GiB<cp_var_lib_containerd_size_gib>
var-lib-etcd/var/lib/etcdtrue存放 etcd 数据。必须设置 wipeFilesystem: true,以便在滚动更新期间允许 kubeadm join100 GiB<cp_var_lib_etcd_size_gib>

Worker 节点(每个节点 2 个磁盘)

磁盘名称挂载路径wipeFilesystem用途建议最小大小占位符
var-cpaas/var/cpaasfalse存放日志、审计数据和其他平台数据100 GiB<worker_var_cpaas_size_gib>
var-lib-containerd/var/lib/containerdfalse存放 containerd 运行时数据(镜像、layer、快照)100 GiB<worker_var_lib_containerd_size_gib>

大小参数

参数占位符必填校验或说明示例实际值
CP /var/cpaas 大小 GiB<cp_var_cpaas_size_gib>建议最小 100 GiB。100-
CP /var/lib/containerd 大小 GiB<cp_var_lib_containerd_size_gib>建议最小 100 GiB。100-
CP /var/lib/etcd 大小 GiB<cp_var_lib_etcd_size_gib>建议最小 100 GiB。100-
Worker /var/cpaas 大小 GiB<worker_var_cpaas_size_gib>建议最小 100 GiB。100-
Worker /var/lib/containerd 大小 GiB<worker_var_lib_containerd_size_gib>建议最小 100 GiB。100-

vSphere CPI 参数

参数占位符必填校验或说明示例实际值
CPI 数据中心列表<cpi_datacenters>当启用多个数据中心时,必须包含所有目标数据中心。dc-a,dc-b-
CPI 镜像标签<cpi_image_tag>vSphere CPI 组件的标签。完整引用为 <image_registry>/ait/cloud-provider-vsphere:<cpi_image_tag>v1.33.1-alauda.1-
CPI insecure 标志<cpi_insecure_flag>基线示例使用 11-

可选扩展参数

多数据中心和多个故障域

参数占位符必填校验或说明示例实际值
数据中心 1 故障域名称<fd_name_1>仅在启用故障域时必需。fd-a-
数据中心 1 部署区名称<dz_name_1>仅在启用故障域时必需。dz-a-
计算集群名称<compute_cluster_1>仅在启用故障域时必需。compute-a-
默认 datastore<default_datastore_1>仅在启用故障域时必需。datastore-a-
vCenter 资源池路径<resource_pool_path_1>仅在启用故障域时必需。必须存在于 vCenter inventory 中。/dc-a/host/compute-a/Resources-
数据中心 2 名称<dc_name_2>仅用于多个数据中心或故障域。dc-b-
数据中心 2 故障域名称<fd_name_2>仅用于多个数据中心或故障域。fd-b-
数据中心 2 部署区名称<dz_name_2>仅用于多个数据中心或故障域。dz-b-
数据中心 2 计算集群<compute_cluster_2>仅用于多个数据中心或故障域。compute-b-
数据中心 2 默认 datastore<default_datastore_2>仅用于多个数据中心或故障域。datastore-b-
数据中心 2 vCenter 资源池路径<resource_pool_path_2>仅用于多个数据中心或故障域。/dc-b/host/compute-b/Resources-
Worker 部署区<worker_failure_domain>使用 VSphereDeploymentZone 名称,而不是 VSphereFailureDomain 名称。dz-a-
数据中心 3 名称<dc_name_3>仅用于额外的数据中心或故障域场景。dc-c-
数据中心 3 故障域名称<fd_name_3>仅用于额外的数据中心或故障域场景。fd-c-
数据中心 3 部署区名称<dz_name_3>仅用于额外的数据中心或故障域场景。dz-c-
数据中心 3 计算集群<compute_cluster_3>仅用于额外的数据中心或故障域场景。compute-c-
数据中心 3 默认 datastore<default_datastore_3>仅用于额外的数据中心或故障域场景。datastore-c-
数据中心 3 vCenter 资源池路径<resource_pool_path_3>仅用于额外的数据中心或故障域场景。/dc-c/host/compute-c/Resources-

第二个 NIC 参数

参数占位符必填校验或说明示例实际值
第二网络名称<nic2_network_name>仅在节点需要第二个 NIC 时使用。pg-management-
第二客户机 NIC 名称<nic2_device_name>仅在需要强制指定客户机 NIC 名称时设置。eth1-
第二网关<nic2_gateway>仅在节点需要第二个 NIC 时使用。10.20.10.1-
第二前缀长度<nic2_prefix>与每个第二 NIC 的 IP 地址一起使用。24-
第二 DNS server 1<nic2_dns_1>仅在节点需要第二个 NIC 时使用。10.20.0.10-
控制平面节点 1 第二 IP<master_01_nic2_ip>仅在节点需要第二个 NIC 时使用。10.20.10.11-
控制平面节点 2 第二 IP<master_02_nic2_ip>仅在节点需要第二个 NIC 时使用。10.20.10.12-
控制平面节点 3 第二 IP<master_03_nic2_ip>仅在节点需要第二个 NIC 时使用。10.20.10.13-
Worker 节点 1 第二 IP<worker_01_nic2_ip>仅在节点需要第二个 NIC 时使用。10.20.10.21-
Worker 节点 2 第二 IP<worker_02_nic2_ip>在 worker 扩容并且需要第二个 NIC 时使用。10.20.10.22-

最终就绪检查

在开始部署之前,请确认以下所有项:

  1. global 集群可达。
  2. 确认已安装两个集群插件:Alauda Container Platform Kubeadm Provider 和 Alauda Container Platform VMware vSphere Infrastructure Provider。
  3. 已启用 ClusterResourceSet=true
  4. 已收集 vCenter server、username、password 和 thumbprint。
  5. 控制平面 VIP、load balancer 和 6443 端口已就绪。
  6. Pod CIDR、Service CIDR 和 kube-ovn-join-cidr 不与现有网络重叠。
  7. VM 模板已在每个必需的数据中心中可用。
  8. 已确认所需的 datastore 和 vCenter 资源池路径。
  9. 最小单数据中心拓扑的 machine config pool 值已完整填写。
  10. 已确认基线系统盘和数据盘的大小。
  11. 每个必填参数都已填写实际值。

后续步骤

完成此检查表后,请继续执行 global 集群中创建集群