將工作負載叢集部署到多個可用性區域 (vSphere 技術預覽)

為了針對 vSphere 上的工作負載叢集啟用多個可用性區域,叢集 API 提供者 vSphere (CAPV) 中引入了兩個新的自訂資源定義 (CRD)

  • VSphereFailureDomain CRD 會擷取地區/區域特定的標記資訊和拓撲定義,其中包含了 vSphere 資料中心、叢集、主機和資料存放區資訊。
  • VSphereDeploymentZone CRD 會擷取 VSphereFailureDomain 與 Kubernetes 節點放置限制資訊之間的關聯。
附註

此功能處於不受支援的技術預覽狀態;請參閱 TKG 功能狀態

本主題中的組態會將 Kubernetes 控制平面和 worker 節點分散到 vSphere 物件 (即主機和運算叢集和資料中心)。

在資料中心中跨多個運算叢集分散節點

本節中的範例會顯示如何透過跨多個運算叢集分散節點,來達成多個可用性區域。

  1. 建立用來定義地區和區域的自訂資源。

    • spec.regionspec.zonespec.topology 下的所有內容必須與您已設定在 vCenter 中的內容相符。
    • 對於 VSphereDeploymentZone 物件,spec.failuredomain 值必須與 VSphereFailureDomain 定義中的其中一個 metadata.name 值相符
    • VSphereDeploymentZone 物件中的 spec.server 值必須與您在安裝程式介面 IaaS 提供者 (IaaS Provider) 窗格中或管理叢集組態檔中的 VSPHERE_SERVER 設定中,針對 VCENTER SERVER 所輸入的 vCenter Server 位址 (IP 或 FQDN) 相符。
    • metadata.name 值必須全為小寫。

    若要將工作負載叢集的 Kubernetes 節點分散在資料中心內的多個運算叢集之間,您必須建立自訂資源。此範例說明 3 個部署區域,名稱分別是 us-west-1aus-west-1bus-west-1c,且每個區域都是運算叢集,並具有網路和儲存區參數。

    ---
    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 CR 時,如果您將 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_SERVER 設定中,針對 VCENTER SERVER 所輸入的 vCenter Server 位址 (IP 或 FQDN) 相符。
    • metadata.name 值必須全為小寫。

    例如,下列 vsphere-zones.yaml 檔案在地區 room1 內定義了 3 個區域,其中每個區域各是同一叢集中的一個主機機架。

    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. 套用 CR 檔案,以建立 VSphereFailureDomainVSphereDeploymentZone 物件:

    kubectl apply -f vsphere-zones.yaml
    
  5. 使用 govc,為地區和區域建立標籤類別和標籤,以套用至 VSphereFailureDomain CR 中列出的運算叢集和主機。

    • 為運算叢集建立地區標籤類別和標籤,例如:
    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 用來設定叢集的 worker 節點總數。Worker 節點總數會以循環形式散佈在指定數量的 AZ 之間

    如需將工作負載叢集部署到 vSphere 時必須指定的選項的完整清單,請參閱組態檔變數參考

  2. 執行 tanzu cluster create 以建立工作負載叢集。如需詳細資訊,請參閱建立工作負載叢集

    • 在建立叢集期間,您可以看到其虛擬機器和其他資源顯示在 vCenter 中。
    • 如果您在 vCenter 中建立虛設虛擬機器,以建立虛擬機器群組,一旦叢集正在執行,就可以將該虛擬機器從虛擬機器群組中刪除或移除。
check-circle-line exclamation-circle-line close-line
Scroll to top icon