将工作负载集群部署到多个可用区(vSphere 技术预览版)

为了为 vSphere 上的工作负载集群启用多个可用区,集群 API 提供程序vSphere (CAPV) 中引入了两个新的 自定义资源定义 (CRD)。

  • VSphereFailureDomain CRD 捕获分区/区域特定的标记信息和拓扑定义,其中包括 vSphere 数据中心、集群、主机和数据存储信息。
  • VSphereDeploymentZone CRD 捕获 VSphereFailureDomain 与 Kubernetes 节点的放置限制信息之间的关联。
注意

此功能处于不受支持的技术预览版状态;请参见 TKG 功能状态

本主题中的配置将 Kubernetes 控制平面和工作节点分散到 vSphere 对象(即主机和计算集群和数据中心)。

在数据中心中跨多个计算集群分布节点

本节中的示例说明了如何通过跨多个计算集群分布节点来实现多个可用区。

  1. 创建用于定义分区和区域的自定义资源。

    • spec.regionspec.zonespec.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-1aus-west-1bus-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 是可选的。

  2. 标记 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.autoConfigurespec.zone.autoConfigure 设置为 true,则可以跳过此步骤。

有关部署集群的后续步骤,请参见使用节点分布在可用区部署工作负载集群

将节点分布到单个计算集群中的多个主机

本节中的示例将工作负载集群节点分布到单个集群中的 3 个不同的主机组。

  1. 在 vCenter Server 中,为每个故障域创建主机组(例如,rack1)和虚拟机组(例如 rack1-vm-group)。

    • 配置 (Configure) > 虚拟机/主机组 (VM/Host Groups) > 添加 (Add)… 创建主机和虚拟机组
    • 主机组的数量应与计划使用的可用区数量相匹配。
    • 要创建虚拟机组,您可能必须创建一个伪虚拟机以添加为组成员。
    • 或者,也可以使用 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
      
  2. 在创建的虚拟机组和主机组之间添加关联性规则,以便虚拟机组中的虚拟机必须在创建的主机组中的主机上运行。

    • 类型 (Type) 设置为虚拟机到主机 (Virtual Machines to Hosts) 并包含规则必须在组中的主机上运行 (Must run on hosts in group)
  3. vsphere-zones.yaml 文件中创建 VSphereFailureDomainVSphereDeploymentZone 自定义资源。

    • spec.regionspec.zonespec.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。

  4. 应用 CRS 文件以创建 VSphereFailureDomainVSphereDeploymentZone 对象:

    kubectl apply -f vsphere-zones.yaml
    
  5. 使用 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) 窗格中执行此步骤和以下步骤中的标记操作。

  6. 将区域标记附加到 CR 定义中列出的所有计算集群,例如:

    govc tags.attach -c k8s-region room1 /dc1/host/room1-mgmt
    

    为每个计算集群使用完整路径。

  7. 将区域标记附加到 CR 定义中列出的所有主机对象,例如:

    govc tags.attach -c k8s-zone rack1 /dc1/host/room1-mgmt/esx-01a.corp.tanzu
    

    为每个主机使用完整路径。

有关部署集群的后续步骤,请参见使用节点分布在可用区部署工作负载集群

部署工作负载集群并将节点分布在不同可用区

执行在数据中心中跨多个计算集群分布节点将节点分布到单个计算集群中的多个主机中的步骤后,可以部署工作负载集群,使其节点分布在多个可用区中。

  1. 为要部署的工作负载集群创建集群配置文件。

    • VSPHERE_REGIONVSPHERE_ZONE 设置为区域和区域标记类别,如上例中的 k8s-regionk8s-zone
    • VSPHERE_AZ_0VSPHERE_AZ_1VSPHERE_AZ_2 设置为需要在其中部署计算机的 VsphereDeploymentZone 对象的名称。
    • VSPHERE_AZ_0 关联的 VsphereDeploymentZone 是部署以 md-0 结尾的计算机部署的故障域,同样,VSPHERE_AZ_1 是以 md-1 结尾的计算机部署的故障域,VSPHERE_AZ_2 是以 md-2 结尾的计算机部署的故障域
    • 如果未定义任何 AZ 配置,则会部署该计算机,而不会有任何故障域
    • WORKER_MACHINE_COUNT 用于设置集群的工作线程总数。工作线程总数以循环方式分布在指定数量的 AZ 上

    有关将工作负载集群部署到 vSphere 时必须指定的选项的完整列表,请参见配置文件变量参考

  2. 运行 tanzu cluster create 以创建工作负载集群。有关详细信息,请参见创建工作负载集群

    • 在集群创建过程中,您可以看到其虚拟机和其他资源显示在 vCenter 中。
    • 如果在 vCenter 中创建伪虚拟机以创建虚拟机组,则可以在集群运行后从虚拟机组中删除或移除该虚拟机。
check-circle-line exclamation-circle-line close-line
Scroll to top icon