vSphere のワークロード クラスタで複数のアベイラビリティ ゾーンを有効にするために、クラスタ API プロバイダ vSphere (CAPV) に 2 つの新しいカスタム リソース定義 (CRD) が導入されました。
VSphereFailureDomain CRD は、リージョン/ゾーン固有のタグ付け情報と、vSphere データセンター、クラスタ、ホスト、データストアの情報を含むトポロジ定義をキャプチャします。VSphereDeploymentZone CRD は、VSphereFailureDomain と Kubernetes ノードの配置制約情報との関連付けをキャプチャします。注この機能は、サポートされていない「テクニカル プレビュー」状態です。「TKG の機能状態」を参照してください。
このトピックの構成により、Kubernetes 制御プレーン ノードとワーカー ノードが vSphere オブジェクト(ホスト、コンピューティング クラスタ、データセンター)にわたり分散します。
このセクションの例では、ノードを複数のコンピューティング クラスタに分散させることで、複数のアベイラビリティ ゾーンを実現する方法を示します。
リージョンとゾーンを定義するためのカスタム リソースを作成します。
spec.region、spec.zone、および spec.topology のすべてが、vCenter Server で構成した内容と一致する必要があります。VSphereDeploymentZone オブジェクトの場合、spec.failuredomain 値は、VSphereFailureDomain 定義の metadata.name 値のいずれかと一致する必要があります。VSphereDeploymentZone オブジェクトの spec.server 値は、インストーラ インターフェイスの [IaaS プロバイダ (IaaS Provider)] ペインの [VCENTER SERVER] に対して、または管理クラスタ構成ファイルの VSPHERE_SERVER 設定に対して入力された vCenter Server アドレス(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 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
作成された仮想マシン グループとホスト グループの間にアフィニティ ルールを追加して、仮想マシン グループ内の仮想マシンが必ず作成されたホスト グループ内のホストで実行されるようにします。
VSphereFailureDomain および VSphereDeploymentZone カスタム リソースをファイル vsphere-zones.yaml に作成します。
spec.region、spec.zone、および spec.topology のすべてが、vCenter Server で構成した内容と一致する必要があります。VSphereDeploymentZone オブジェクトの場合、spec.failuredomain 値は、VSphereFailureDomain 定義の metadata.name 値のいずれかと一致する必要があります。VSphereDeploymentZone オブジェクトの spec.server 値は、インストーラ インターフェイスの [IaaS プロバイダ (IaaS Provider)] ペインの [VCENTER SERVER] に対して、または管理クラスタ構成ファイルの VSPHERE_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 Server の [タグとカスタム属性 (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 を設定します。VSPHERE_AZ_0 に関連付けられた VsphereDeploymentZone は、md-0 で終わるマシン展開が展開される failureDomain です。同様に、VSPHERE_AZ_1 は、md-1 で終わるマシン展開が展開される failureDomain、VSPHERE_AZ_2 は、md-2 で終わるマシン展開が展開される failureDomain です。WORKER_MACHINE_COUNT は、クラスタのワーカーの合計数を設定します。ワーカーの合計数は、指定された AZ の数に対してラウンドロビン方式で分散されます。ワークロード クラスタを vSphere に展開するときに指定する必要があるオプションの完全なリストについては、「構成ファイル変数リファレンス」を参照してください。
tanzu cluster create を実行してワークロード クラスタを作成します。詳細については、「ワークロード クラスタの作成」を参照してください。