複数のアベイラビリティ ゾーンへのワークロード クラスタの展開(vSphere テクニカル プレビュー)

vSphere のワークロード クラスタで複数のアベイラビリティ ゾーンを有効にするために、クラスタ API プロバイダ vSphere (CAPV) に 2 つの新しいカスタム リソース定義 (CRD) が導入されました。

  • VSphereFailureDomain CRD は、リージョン/ゾーン固有のタグ付け情報と、vSphere データセンター、クラスタ、ホスト、データストアの情報を含むトポロジ定義をキャプチャします。
  • VSphereDeploymentZone CRD は、VSphereFailureDomain と Kubernetes ノードの配置制約情報との関連付けをキャプチャします。

この機能は、サポートされていない「テクニカル プレビュー」状態です。「TKG の機能状態」を参照してください。

このトピックの構成により、Kubernetes 制御プレーン ノードとワーカー ノードが vSphere オブジェクト(ホスト、コンピューティング クラスタ、データセンター)にわたり分散します。

データセンター内の複数のコンピューティング クラスタにわたるノードの分散

このセクションの例では、ノードを複数のコンピューティング クラスタに分散させることで、複数のアベイラビリティ ゾーンを実現する方法を示します。

  1. リージョンとゾーンを定義するためのカスタム リソースを作成します。

    • spec.regionspec.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-1aus-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 はオプションです。

  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.autoConfigure および spec.zone.autoConfiguretrue に設定されている場合は、この手順をスキップできます。

クラスタを展開する次の手順については、「アベイラビリティ ゾーン全体に分散されたノードを含むワークロード クラスタの展開」を参照してください。

単一のコンピューティング クラスタ内の複数のホストにわたるノードの分散

このセクションの例では、単一クラスタ内の 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. VSphereFailureDomain および VSphereDeploymentZone カスタム リソースをファイル vsphere-zones.yaml に作成します。

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

  4. CR ファイルを適用して、VSphereFailureDomain および VSphereDeploymentZone オブジェクトを作成します。

    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 Server の [タグとカスタム属性 (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-region および k8s-zone)に設定します。
    • マシンを展開する必要がある VsphereDeploymentZone オブジェクトの名前を使用して、VSPHERE_AZ_0VSPHERE_AZ_1VSPHERE_AZ_2 を設定します。
    • VSPHERE_AZ_0 に関連付けられた VsphereDeploymentZone は、md-0 で終わるマシン展開が展開される failureDomain です。同様に、VSPHERE_AZ_1 は、md-1 で終わるマシン展開が展開される failureDomain、VSPHERE_AZ_2 は、md-2 で終わるマシン展開が展開される failureDomain です。
    • AZ 構成のいずれかが定義されていない場合、そのマシン展開は failureDomain なしで展開されます。
    • WORKER_MACHINE_COUNT は、クラスタのワーカーの合計数を設定します。ワーカーの合計数は、指定された AZ の数に対してラウンドロビン方式で分散されます。

    ワークロード クラスタを vSphere に展開するときに指定する必要があるオプションの完全なリストについては、「構成ファイル変数リファレンス」を参照してください。

  2. tanzu cluster create を実行してワークロード クラスタを作成します。詳細については、「ワークロード クラスタの作成」を参照してください。

    • クラスタの作成プロセス中に、その仮想マシンとその他のリソースが vCenter Server に表示されます。
    • 仮想マシン グループを作成するために vCenter Server でダミー仮想マシンを作成した場合は、クラスタの実行中に仮想マシン グループから仮想マシンを削除できます。
check-circle-line exclamation-circle-line close-line
Scroll to top icon