為了針對 vSphere 上的工作負載叢集啟用多個可用性區域,叢集 API 提供者 vSphere (CAPV) 中引入了兩個新的自訂資源定義 (CRD)。
VSphereFailureDomain
CRD 會擷取地區/區域特定的標記資訊和拓撲定義,其中包含了 vSphere 資料中心、叢集、主機和資料存放區資訊。VSphereDeploymentZone
CRD 會擷取 VSphereFailureDomain
與 Kubernetes 節點放置限制資訊之間的關聯。附註此功能處於不受支援的技術預覽狀態;請參閱 TKG 功能狀態。
本主題中的組態會將 Kubernetes 控制平面和 worker 節點分散到 vSphere 物件 (即主機和運算叢集和資料中心)。
本節中的範例會顯示如何透過跨多個運算叢集分散節點,來達成多個可用性區域。
建立用來定義地區和區域的自訂資源。
spec.region
、spec.zone
和 spec.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-1a
、us-west-1b
和 us-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
是選用的。
標記 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.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_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。
套用 CR 檔案,以建立 VSphereFailureDomain
和 VSphereDeploymentZone
物件:
kubectl apply -f vsphere-zones.yaml
使用 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) 窗格,來執行標籤作業。
將地區標籤附加到 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
用來設定叢集的 worker 節點總數。Worker 節點總數會以循環形式散佈在指定數量的 AZ 之間如需將工作負載叢集部署到 vSphere 時必須指定的選項的完整清單,請參閱組態檔變數參考。
執行 tanzu cluster create
以建立工作負載叢集。如需詳細資訊,請參閱建立工作負載叢集。