为 VMware vSphere 集群准备参数

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

场景

请在以下场景中使用此检查清单:

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

前提条件

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

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

如何使用此检查清单

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

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

术语

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

machine config pool

machine config pool 是 VSphereMachineConfigPool 自定义资源。它预定义了 node slot。每个 slot 可包含:

  • node hostname
  • 目标 datacenter
  • 每个 NIC 的静态 IP 配置
  • 持久磁盘定义
WARNING

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

Node slot

node slot 是 VSphereMachineConfigPool.spec.configs[] 下的一条记录。单个 slot 通常映射到一个 node,例如 cp-01worker-01。slot 的 hostname 会驱动 Kubernetes node 名称、kubelet serving certificate 的 DNS SAN,以及(结合解析后的 primary NIC 地址)kubelet 的 node-ip;它必须是有效的 DNS-1123 子域。

Slot network layout

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

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

deviceName

deviceNameVSphereMachineConfigPool 网络配置中的可选字段。它用于控制 guest operating system 内部看到的 NIC 名称,例如 eth0eth1

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

  • networkName 是 vCenter 网络或 port group 名称。
  • deviceName 是 guest operating system 内部的 NIC 名称。
  • 如果省略 deviceName,CAPV 通常会按 NIC 顺序分配 eth0eth1eth2 等名称。

vCenter resource pool

vCenter resource pool 是原生 vCenter inventory 对象,例如:

/Datacenter1/host/cluster1/Resources

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

Compute cluster

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

Datastore

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

VM template

VM template 是用于创建 node virtual machine 的源 template。在启用多个数据中心时,同一个 template 必须已经存在于每个目标 datacenter 中,并且能够通过相同的 template 名称解析到。

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<namespace>存放业务集群对象的 namespace。必须是 cpaas-systemcpaas-system-
已安装 cluster-api-provider-vsphere-kubectl get minfo -l cpaas.io/module-name=cluster-api-provider-vsphere 返回结果。Yes-
已安装 cluster-api-provider-kubeadm-kubectl get minfo -l cpaas.io/module-name=cluster-api-provider-kubeadm 返回结果。Yes-
已启用 ClusterResourceSet=true-capi-controller-manager 参数中包含 ClusterResourceSet=trueYes-

vCenter 和 Template 前提条件

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 template 要求

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

template 还应满足以下要求:

  • 使用平台镜像策略支持的操作系统。
  • 包含 cloud-init
  • 包含 VMware Tools 或 open-vm-tools
  • 包含 containerd
  • 包含 kubeadm bootstrap 所需的基础组件。
  • /root/images/ 下包含预先导出的 container image 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 前提条件

control plane VIP 由你在集群创建前预先配置的外部 load balancer 提供。本文档所述的 vSphere 流程不会在集群内部署 VIP 组件,因此 load balancer、其 VIP 分配以及后端(real-server)维护都在集群外部准备并由外部负责。

参数占位符必需验证或说明示例实际值
Control plane VIP<vip>VIP 已经分配完成。10.10.10.10-
API server port<api_server_port>默认端口为 64436443-
VIP 连通性-执行环境可以访问 VIP:6443Yes-
Real server 维护责任-如果 load balancer 不会自动更新后端目标,请明确由谁负责维护。Platform team-

集群基线参数

参数占位符必需验证或说明示例实际值
Cluster name<cluster_name>在所有 manifest 中使用相同的值。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-
Image 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 镜像 tag<dns_image_tag>使用 Kubernetes 版本对应的批准 tag。1.12.4-
etcd 镜像 tag<etcd_image_tag>使用 Kubernetes 版本对应的批准 tag。v3.5.0-
加密提供器 secret<encryption_provider_secret>用于 secret 静态加密的 Base64 编码 AES key。使用 head -c 32 /dev/urandom | base64 生成。不要复用示例值。(generated)-

最小单数据中心参数

数据中心和资源放置

参数占位符必需验证或说明示例实际值
默认 datacenter<default_datacenter>基线拓扑使用。dc-a-
VM folder<vm_folder>VSphereMachineTemplate 创建的 VM 所在文件夹路径。请使用 /<datacenter>/vm/<cluster_name>,以便运维人员能在 vCenter 中识别这些 VM 属于哪个集群。对于 global DR 部署,请在 <cluster_name> 下再增加一个子文件夹,以区分主集群和备用集群。/dc-a/vm/demo-cluster-

Primary NIC 参数

参数占位符必需验证或说明示例实际值
vCenter network 名称<nic1_network_name>vCenter 中的第一个网络或 port group 名称。pg-business-
Guest NIC 名称<nic1_device_name>仅在需要强制指定 guest NIC 名称时设置。如果不需要,请从 YAML manifests 中删除 deviceName 行。eth0-
Gateway<nic1_gateway>primary NIC 的默认网关。10.10.10.1-
Prefix length<nic1_prefix>与每个 node IP 地址一起使用。24-
DNS server 1<nic1_dns_1>primary NIC 的 DNS server。10.10.0.10-

控制平面 machine config pool

参数占位符必需验证或说明示例实际值
控制平面 pool 名称<cluster_name>-cp-pool控制平面节点的 machine config pool 名称。建议采用 <cluster_name>-cp-pool,以便在视觉上将每个集群的资源归组。demo-cluster-cp-pool-
控制平面 node 1 hostname<cp_node_name_1>第一个控制平面 node 的节点名称以及 kubelet serving cert SAN。必须是有效的 DNS-1123 子域。cp-01-
控制平面 node 1 datacenter<master_01_datacenter>通常与默认 datacenter 相同。dc-a-
控制平面 node 1 IP address<master_01_nic1_ip>仅 IPv4 地址,不包含 prefix length。10.10.10.11-
控制平面 node 2 hostname<cp_node_name_2>第二个控制平面 node 的节点名称以及 kubelet serving cert SAN。必须是有效的 DNS-1123 子域。cp-02-
控制平面 node 2 datacenter<master_02_datacenter>通常与默认 datacenter 相同。dc-a-
控制平面 node 2 IP address<master_02_nic1_ip>仅 IPv4 地址,不包含 prefix length。10.10.10.12-
控制平面 node 3 hostname<cp_node_name_3>第三个控制平面 node 的节点名称以及 kubelet serving cert SAN。必须是有效的 DNS-1123 子域。cp-03-
控制平面 node 3 datacenter<master_03_datacenter>通常与默认 datacenter 相同。dc-a-
控制平面 node 3 IP address<master_03_nic1_ip>仅 IPv4 地址,不包含 prefix length。10.10.10.13-

Worker machine config pool

参数占位符必需验证或说明示例实际值
Worker pool 名称<cluster_name>-worker-poolworker 节点的 machine config pool 名称。建议采用 <cluster_name>-worker-pool,以便在视觉上将每个集群的资源归组。demo-cluster-worker-pool-
Worker node 1 hostname<worker_node_name_1>第一个 worker node 的节点名称以及 kubelet serving cert SAN。必须是有效的 DNS-1123 子域。worker-01-
Worker node 1 datacenter<worker_01_datacenter>通常与默认 datacenter 相同。dc-a-
Worker node 1 IP address<worker_01_nic1_ip>仅 IPv4 地址,不包含 prefix length。10.10.10.21-
Worker node 2 hostname<worker_node_name_2>在扩展 worker pool 时使用。worker-02-
Worker node 2 datacenter<worker_02_datacenter>在扩展 worker pool 时使用。dc-b-
Worker node 2 IP address<worker_02_nic1_ip>在扩展 worker pool 时使用。10.10.10.22-
releaseDelayHours<release_delay_hours>CAPV 复用已释放 slot 之前的延迟时间。24-

计算资源规格

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

标准 data disk

每个 node 角色都需要一组专用 data disk。下表列出的磁盘是最低必需磁盘。如果 workload 需要,你可以继续在 persistentDisks 列表中追加更多磁盘。

Persistent disk 字段

字段必需默认值说明
nameslot 内唯一的磁盘名称。
sizeGiB磁盘大小,单位为 GiB。
mountPath(空)guest OS 内的挂载路径。如果为空,磁盘会作为原始设备连接,并在 /dev/disk/by-capv/<name> 下提供一个符号链接,但不会被格式化或挂载。这适用于运行时由外部进程管理磁盘的场景。
fsFormatext4(当设置了 mountPath 时)文件系统格式。当 mountPath 为空时会被忽略。
wipeFilesystemfalse当为 true 时,新 VM 第一次启动会清除磁盘内容。重启和手动重启 service 不受影响。用于 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 runtime 数据(镜像、layer、snapshot)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 runtime 数据(镜像、layer、snapshot)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 datacenter 列表<cpi_datacenters>在启用多个数据中心时,包含所有目标 datacenter。dc-a,dc-b-
CPI image tag<cpi_image_tag>vSphere CPI 组件的 tag。完整引用为 <image_registry>/ait/cloud-provider-vsphere:<cpi_image_tag>v1.33.1-alauda.1-
CPI insecure flag<cpi_insecure_flag>基线示例使用 11-

可选扩展参数

多数据中心和多个 failure domain

参数占位符必需验证或说明示例实际值
数据中心 1 failure domain 名称<fd_name_1>仅在启用 failure domains 时必需。fd-a-
数据中心 1 deployment zone 名称<dz_name_1>仅在启用 failure domains 时必需。dz-a-
Compute cluster 名称<compute_cluster_1>仅在启用 failure domains 时必需。compute-a-
默认 datastore<default_datastore_1>仅在启用 failure domains 时必需。datastore-a-
vCenter resource pool 路径<resource_pool_path_1>仅在启用 failure domains 时必需。必须存在于 vCenter inventory 中。/dc-a/host/compute-a/Resources-
数据中心 2 名称<dc_name_2>仅用于多个数据中心或 failure domains。dc-b-
数据中心 2 failure domain 名称<fd_name_2>仅用于多个数据中心或 failure domains。fd-b-
数据中心 2 deployment zone 名称<dz_name_2>仅用于多个数据中心或 failure domains。dz-b-
数据中心 2 compute cluster<compute_cluster_2>仅用于多个数据中心或 failure domains。compute-b-
数据中心 2 默认 datastore<default_datastore_2>仅用于多个数据中心或 failure domains。datastore-b-
数据中心 2 vCenter resource pool 路径<resource_pool_path_2>仅用于多个数据中心或 failure domains。/dc-b/host/compute-b/Resources-
Worker deployment zone<worker_failure_domain>使用 VSphereDeploymentZone 名称,而不是 VSphereFailureDomain 名称。dz-a-
数据中心 3 名称<dc_name_3>仅用于额外的数据中心或 failure-domain 场景。dc-c-
数据中心 3 failure domain 名称<fd_name_3>仅用于额外的数据中心或 failure-domain 场景。fd-c-
数据中心 3 deployment zone 名称<dz_name_3>仅用于额外的数据中心或 failure-domain 场景。dz-c-
数据中心 3 compute cluster<compute_cluster_3>仅用于额外的数据中心或 failure-domain 场景。compute-c-
数据中心 3 默认 datastore<default_datastore_3>仅用于额外的数据中心或 failure-domain 场景。datastore-c-
数据中心 3 vCenter resource pool 路径<resource_pool_path_3>仅用于额外的数据中心或 failure-domain 场景。/dc-c/host/compute-c/Resources-

第二个 NIC 参数

参数占位符必需验证或说明示例实际值
次要网络名称<nic2_network_name>仅在节点需要第二个 NIC 时使用。pg-management-
次要 guest NIC 名称<nic2_device_name>仅在需要强制指定 guest NIC 名称时设置。eth1-
次要 gateway<nic2_gateway>仅在节点需要第二个 NIC 时使用。10.20.10.1-
次要 prefix length<nic2_prefix>与每个次要 NIC IP 地址一起使用。24-
次要 DNS server 1<nic2_dns_1>仅在节点需要第二个 NIC 时使用。10.20.0.10-
控制平面 node 1 次要 IP<master_01_nic2_ip>仅在节点需要第二个 NIC 时使用。10.20.10.11-
控制平面 node 2 次要 IP<master_02_nic2_ip>仅在节点需要第二个 NIC 时使用。10.20.10.12-
控制平面 node 3 次要 IP<master_03_nic2_ip>仅在节点需要第二个 NIC 时使用。10.20.10.13-
Worker node 1 次要 IP<worker_01_nic2_ip>仅在节点需要第二个 NIC 时使用。10.20.10.21-
Worker node 2 次要 IP<worker_02_nic2_ip>在扩展 worker 且需要第二个 NIC 时使用。10.20.10.22-

最终就绪检查

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

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

下一步

完成此检查清单后,请继续查看 global 集群中创建集群