为了为 vSphere 上的工作负载集群启用多个可用区,集群 API 提供程序vSphere (CAPV) 中引入了两个新的 自定义资源定义 (CRD)。
VSphereFailureDomain CRD 捕获分区/区域特定的标记信息和拓扑定义,其中包括 vSphere 数据中心、集群、主机和数据存储信息。VSphereDeploymentZone CRD 捕获 VSphereFailureDomain 与 Kubernetes 节点的放置限制信息之间的关联。注意此功能处于不受支持的技术预览版状态;请参见 TKG 功能状态。
本主题中的配置将 Kubernetes 控制平面和工作节点分散到 vSphere 对象(即主机和计算集群和数据中心)。
本节中的示例说明了如何通过跨多个计算集群分布节点来实现多个可用区。
创建用于定义分区和区域的自定义资源。
spec.region、spec.zone 和 spec.topology 下的所有内容必须与在 vCenter 中配置的内容相匹配。VSphereDeploymentZone 对象,spec.failuredomain 值必须与 VSphereFailureDomain 定义的一个 metadata.name 值匹配VSphereDeploymentZone 对象中的 spec.server 值必须与在安装程序界面 IaaS 提供程序 (IaaS Provider) 窗格或管理集群配置文件的 设置中为 VSPHERE_SERVERVSPHERE_SERVER 输入的vCenter服务器地址(IP 或 FQDN)相匹配。metadata.name 值必须全部为小写。要将工作负载集群的 Kubernetes 节点分布到数据中心内的多个计算集群,必须创建自定义资源。此示例介绍了名为 us-west-1a、us-west-1b 和 us-west-1c 的 3 个部署区域,每个区域都是具有网络和存储参数的计算集群。
---
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: VSphereFailureDomain
metadata:
name: us-west-1a
spec:
region:
name: us-west-1
type: Datacenter
tagCategory: k8s-region
zone:
name: us-west-1a
type: ComputeCluster
tagCategory: k8s-zone
topology:
datacenter: dc0
computeCluster: cluster1
datastore: ds-c1
networks:
- net1
- net2
---
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: VSphereFailureDomain
metadata:
name: us-west-1b
spec:
region:
name: us-west-1
type: Datacenter
tagCategory: k8s-region
zone:
name: us-west-1b
type: ComputeCluster
tagCategory: k8s-zone
topology:
datacenter: dc0
computeCluster: cluster2
datastore: ds-c2
networks:
- net3
---
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: VSphereFailureDomain
metadata:
name: us-west-1c
spec:
region:
name: us-west-1
type: Datacenter
tagCategory: k8s-region
zone:
name: us-west-1c
type: ComputeCluster
tagCategory: k8s-zone
topology:
datacenter: dc0
computeCluster: cluster3
datastore: ds-c3
networks:
- net4
---
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: VSphereDeploymentZone
metadata:
name: us-west-1a
spec:
server: VSPHERE_SERVER
failureDomain: us-west-1a
placementConstraint:
resourcePool: pool1
folder: foo
---
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: VSphereDeploymentZone
metadata:
name: us-west-1b
spec:
server: VSPHERE_SERVER
failureDomain: us-west-1b
placementConstraint:
resourcePool: pool2
folder: bar
---
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: VSphereDeploymentZone
metadata:
name: us-west-1c
spec:
server: VSPHERE_SERVER
failureDomain: us-west-1c
placementConstraint:
resourcePool: pool3
folder: baz
其中,VSPHERE_SERVER 是 vCenter Server 的 IP 地址或 FQDN。
如果不同的计算集群具有相同名称的资源池,请将 VSphereDeploymentZone 对象的 spec.placementConstraint.resourcePool 设置为完整资源路径,而不仅仅是名称。
注意对于 VsphereDeploymentZone 对象,
spec.placementConstraint是可选的。
标记 vSphere 对象。
从第一个 VSphereFailureDomain CR(名为 us-west-1a)开始,使用 govc 将以下标记应用于数据中心 dc0 和计算集群 cluster1。
govc tags.attach -c k8s-region us-west-1 /dc0
govc tags.attach -c k8s-zone us-west-1a /dc0/host/cluster1
同样,对其他计算集群执行以下标记操作。
govc tags.attach -c k8s-zone us-west-1b /dc0/host/cluster2
govc tags.attach -c k8s-zone us-west-1c /dc0/host/cluster3
如果在创建 VSphereFailureDomain Crs 时将 spec.region.autoConfigure 和 spec.zone.autoConfigure 设置为 true,则可以跳过此步骤。
有关部署集群的后续步骤,请参见使用节点分布在可用区部署工作负载集群。
本节中的示例将工作负载集群节点分布到单个集群中的 3 个不同的主机组。
在 vCenter Server 中,为每个故障域创建主机组(例如,rack1)和虚拟机组(例如 rack1-vm-group)。
或者,也可以使用 govc 通过运行类似于以下内容的命令来创建主机组和虚拟机组,而无需创建伪虚拟机:
govc cluster.group.create -cluster=RegionA01-MGMT -name=rack1 -host esx-01a.corp.tanzu esx-02a.corp.tanzu
govc cluster.group.create -cluster=RegionA01-MGMT -name=rack1-vm-group -vm
在创建的虚拟机组和主机组之间添加关联性规则,以便虚拟机组中的虚拟机必须在创建的主机组中的主机上运行。
在 vsphere-zones.yaml 文件中创建 VSphereFailureDomain 和 VSphereDeploymentZone 自定义资源。
spec.region、spec.zone 和 spec.topology 下的所有内容必须与在 vCenter 中配置的内容相匹配。VSphereDeploymentZone 对象,spec.failuredomain 值必须与 VSphereFailureDomain 定义的一个 metadata.name 值匹配VSphereDeploymentZone 对象中的 spec.server 值必须与在安装程序界面 IaaS 提供程序 (IaaS Provider) 窗格或管理集群配置文件的 设置中为 VSPHERE_SERVERVSPHERE_SERVER 输入的vCenter服务器地址(IP 或 FQDN)相匹配。metadata.name 值必须全部为小写。例如,以下 vsphere-zones.yaml 文件定义了一个区域 room1 内的三个区域,其中每个区域都是同一集群中的一个主机机架。
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: VSphereFailureDomain
metadata:
name: rack1
spec:
region:
name: room1
type: ComputeCluster
tagCategory: k8s-region
zone:
name: rack1
type: HostGroup
tagCategory: k8s-zone
topology:
datacenter: dc0
computeCluster: cluster1
hosts:
vmGroupName: rack1-vm-group
hostGroupName: rack1
datastore: ds-r1
networks:
- net1
---
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: VSphereFailureDomain
metadata:
name: rack2
spec:
region:
name: room1
type: ComputeCluster
tagCategory: k8s-region
zone:
name: rack2
type: HostGroup
tagCategory: k8s-zone
topology:
datacenter: dc0
computeCluster: cluster1
hosts:
vmGroupName: rack2-vm-group
hostGroupName: rack2
datastore: ds-r2
networks:
- net2
---
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: VSphereFailureDomain
metadata:
name: rack3
spec:
region:
name: room1
type: ComputeCluster
tagCategory: k8s-region
zone:
name: rack3
type: HostGroup
tagCategory: k8s-zone
topology:
datacenter: dc0
computeCluster: cluster1
hosts:
vmGroupName: rack3-vm-group
hostGroupName: rack3
datastore: ds-c3
networks:
- net3
---
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: VSphereDeploymentZone
metadata:
name: rack1
spec:
server: VSPHERE_SERVER
failureDomain: rack1
placementConstraint:
resourcePool: pool1
folder: foo
---
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: VSphereDeploymentZone
metadata:
name: rack2
spec:
server: VSPHERE_SERVER
failureDomain: rack2
placementConstraint:
resourcePool: pool2
folder: bar
---
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: VSphereDeploymentZone
metadata:
name: rack3
spec:
server: VSPHERE_SERVER
failureDomain: rack3
placementConstraint:
resourcePool: pool3
folder: baz
其中,VSPHERE_SERVER 是 vCenter Server 的 IP 地址或 FQDN。
应用 CRS 文件以创建 VSphereFailureDomain 和 VSphereDeploymentZone 对象:
kubectl apply -f vsphere-zones.yaml
使用 govc 为分区和区域创建标记类别和标记,以应用于 VSphereFailureDomain CRS 中列出的计算集群和主机。
govc tags.category.create -t ClusterComputeResource k8s-region
govc tags.create -c k8s-region room1
对所有区域重复此操作:
govc tags.create -c k8s-region REGION
govc tags.category.create -t HostSystem k8s-zone
govc tags.create -c k8s-zone rack1
对所有区重复此操作:
govc tags.create -c k8s-zone ZONE
或者,您可以从 vCenter 的标记和自定义属性 (Tags & Custom Attributes) 窗格中执行此步骤和以下步骤中的标记操作。
将区域标记附加到 CR 定义中列出的所有计算集群,例如:
govc tags.attach -c k8s-region room1 /dc1/host/room1-mgmt
为每个计算集群使用完整路径。
将区域标记附加到 CR 定义中列出的所有主机对象,例如:
govc tags.attach -c k8s-zone rack1 /dc1/host/room1-mgmt/esx-01a.corp.tanzu
为每个主机使用完整路径。
有关部署集群的后续步骤,请参见使用节点分布在可用区部署工作负载集群。
执行在数据中心中跨多个计算集群分布节点或将节点分布到单个计算集群中的多个主机中的步骤后,可以部署工作负载集群,使其节点分布在多个可用区中。
为要部署的工作负载集群创建集群配置文件。
VSPHERE_REGION 和 VSPHERE_ZONE 设置为区域和区域标记类别,如上例中的 k8s-region 和 k8s-zone。VSPHERE_AZ_0、VSPHERE_AZ_1、VSPHERE_AZ_2 设置为需要在其中部署计算机的 VsphereDeploymentZone 对象的名称。VSPHERE_AZ_0 关联的 VsphereDeploymentZone 是部署以 md-0 结尾的计算机部署的故障域,同样,VSPHERE_AZ_1 是以 md-1 结尾的计算机部署的故障域,VSPHERE_AZ_2 是以 md-2 结尾的计算机部署的故障域WORKER_MACHINE_COUNT 用于设置集群的工作线程总数。工作线程总数以循环方式分布在指定数量的 AZ 上有关将工作负载集群部署到 vSphere 时必须指定的选项的完整列表,请参见配置文件变量参考。
运行 tanzu cluster create 以创建工作负载集群。有关详细信息,请参见创建工作负载集群。