クラウド使用量インターフェイス (CCI) 要素を追加して、VMware Aria Automation テンプレート内で CCI サービスを使用すると、ユーザーはスーパーバイザー名前空間内の仮想マシン サービスと Tanzu Kubernetes Grid サービスを使用して Kubernetes ベースのワークロードを申請できます。

CCI 要素を表示するには、クラウド テンプレートのリソース ライブラリ内の [クラウド使用量インターフェイス] セクションを展開するか、[リソース タイプの検索] フィールドに cci と入力します。

クラウド テンプレートで CCI 要素を検索する

次の表は、ユーザーがドラッグ アンド ドロップして構成できる、テンプレート内の 3 種類の CCI リソースを示しています。
スーパーバイザー名前空間リソース

CCI.Supervisor.Namespace

リソース制限、ユーザー アクセス、使用可能なスーパーバイザー サービスを含む Kubernetes ベースのワークスペースを提供する新しいスーパーバイザー名前空間を作成して、ユーザーがアプリケーションのニーズに基づいて仮想マシンと TKG リソースをプロビジョニングできるようにします。
スーパーバイザー リソース

CCI.Supervisor.Resource

構成するスーパーバイザー リソースに渡される Kubernetes マニフェストに応じて、サポートされている任意のスーパーバイザー Kubernetes リソース(virtualmachinesvirtualmachineservicestanzukubernetesclusterspersistentvolumeclaimssecrets など)をスーパーバイザー名前空間内に作成します。
TKG リソース

CCI.TKG.Resource

サポートされている任意の Kubernetes リソースを TKG クラスタ内に作成します。
注: クラウド テンプレートに CCI 要素を追加するには、 VMware Aria Automation 管理者が最初に CCI を設定する必要があります。 クラウド使用量インターフェイスの設定と構成を参照してください。
以下の例は、クラウド テンプレートの YAML コードで CCI リソースがどのように表示されるかを示しています。それぞれの例は、重要な行のみを表示するよう省略しています。

スーパーバイザー名前空間リソースの例

CCI.Supervisor.Namespace は、アプリケーション用のユーザーが管理する vSphere スーパーバイザー IaaS リソースが作成されるスーパーバイザー Kubernetes ベースのワークスペースを表します。

この例では、cciNamespace という名前の CCI スーパーバイザー名前空間リソースを定義して、demo というスーパーバイザー名前空間をプロビジョニングします。

名前空間がターゲット スーパーバイザーにプロビジョニングされるようにするには、プロジェクト定義の className および regionName を使用してスーパーバイザー名前空間を構成する必要があります。
formatVersion: 1
inputs: {}
resources:
  cciNamespace:
    type: CCI.Supervisor.Namespace
    properties:
      name: demo
      className: default
      regionName: dev-us-west

スーパーバイザー リソースの例

CCI.Supervisor.Resource を使用して、スーパーバイザー名前空間コンテキスト内での実行がサポートされている Kubernetes オブジェクトの Kubernetes マニフェストを渡します。

  • 特定のスーパーバイザー名前空間内にスーパーバイザー リソースをプロビジョニングするには、スーパーバイザー リソースの context プロパティを構成します。そのためには、テンプレート バインド式を使用して、リソースをスーパーバイザー名前空間 ID にマッピングします(例:context: ${resource.cciNamespace.id})。
  • プロビジョニングするオブジェクトを指定するには、作成する Kubernetes オブジェクトに Kubernetes マニフェストを渡して、スーパーバイザー リソースの manifest プロパティを構成します。
次の例では、ネットワーク、トポロジ、制御プレーンのサイズ、ワーカー ノード数などの設定を指定する Kubernetes マニフェストを提供して TKG クラスタを作成します。
formatVersion: 1
inputs: {}
resources:
  cciTKGCluster:
    type: CCI.Supervisor.Resource
    properties:
      context: ${resource.cciNamespace.id}
      manifest:
        apiVersion: cluster.x-k8s.io/v1beta1
        kind: Cluster
        metadata:
          name: ${input.tkg_Name}
          labels:
            tkg-cluster-selector: ${input.tkg_Name}
        spec:
          clusterNetwork:
            cni:
              name: antrea
            pods:
              cidrBlocks:
                - 192.168.156.0/20
            services:
              cidrBlocks:
                - 10.96.0.0/12
            serviceDomain: cluster.local
          topology:
            class: tanzukubernetescluster
            version: v1.24.9---vmware.1-tkg.4
            variables:
              - name: storageClasses
                value:
                  - tmm-kubernetes-storage-policy
              - name: defaultStorageClass
                value: tmm-kubernetes-storage-policy
              - name: vmClass
                value: ${input.controlPlaneVmClassName}
              - name: storageClass
                value: tmm-kubernetes-storage-policy
            controlPlane:
              replicas: ${input.controlPlaneCount}
              metadata:
                annotations:
                  run.tanzu.vmware.com/resolve-os-image: os-name=photon
            workers:
              machineDeployments:
                - class: node-pool
                  name: ${input.tkg_Name}-nodepool
                  replicas: ${input.workerCount}
                  metadata:
                    annotations:
                      run.tanzu.vmware.com/resolve-os-image: os-name=photon
                  variables:
                    overrides:
                      - name: vmClass
                        value: ${input.workerVmClassName}
次の例では、仮想マシン構成を定義し、待機ベースの条件を含む Kubernetes マニフェストを提供して仮想マシンを定義します。
formatVersion: 1
inputs: {}
resources:
  vm:
    type: CCI.Supervisor.Resource
    properties:
      context: ${resource.cciNamespace.id}
      manifest:
        apiVersion: vmoperator.vmware.com/v1alpha1
        kind: VirtualMachine
        metadata:
          finalizers:
            - virtualmachine.vmoperator.vmware.com
          generation: 1
          labels:
            vm-selector: vm-2rfx
          name: vm-2rfx
        spec:
          className: best-effort-xsmall
          imageName: vmi-c3d184be88e1af1cd
          networkInterfaces:
            - networkType: nsx-t
          powerOffMode: hard
          powerState: poweredOn
          restartMode: hard
          storageClass: vsan-default-storage-policy
          suspendMode: hard
      wait:
        conditions:
          - type: VirtualMachinePrereqReady
            status: "False"
            reason: VirtualMachineImageNotReady
            indicatesFailure: true

TKG リソースの例

CCI.TKG.Resource を使用して、サポートされている Kubernetes リソースを TKG クラスタ内または TKG クラスタで実行されている名前空間内に作成します。
  • TKG リソースを TKG クラスタにバインドするには、context プロパティを使用してスーパーバイザー TKG クラスタ リソースの ID をマッピングします(例:context: ${resource.cciTKGCluster.id})。
  • たとえば、cciTKGNamespace という名前の TKG リソース内に名前空間を作成する場合は、TKG リソースの名前を context プロパティに挿入 (context: ${resource.cciTKGNamespace.id}) することで、TKG リソースを名前空間にバインドできます。
  • リソース プロパティ内で渡される Kubernetes マニフェストは、プロビジョニングする Kubernetes オブジェクトのタイプを指定します。
次の例は、 cciTKGCluster という名前の TKG クラスタにバインドされた TKG リソースとしてのシークレットを示しています。
...
  tkgSecret:
    type: CCI.TKG.Resource
    properties:
      context: ${resource.cciTKGCluster.id}
      manifest:
        apiVersion: v1
        kind: Secret
        metadata:
          name: nvaie-apikey
        type: Opaque
        data:
          username: KM9hdCCodG9rZW4=
          password: ${base64_encode(input.password)}
...

wait プロパティの追加

スーパーバイザー リソースと TKG リソースの両方では、リソース作成が完了したと見なされる前に、リソース内の特定の条件またはフィールド値を待機する wait プロパティがサポートされます。wait プロパティのタイプは次のとおりです。
  • フィールド待機:プロパティ パスと値を使用して各フィールドを構成できるフィールドのリスト。リソースが完了したと見なされるには、この値に一致する必要があります。
  • 条件の待機:リソース作成の成功または失敗を示す条件のリスト。
次の例は、スーパーバイザー リソースに追加された待機条件を示しています。スーパーバイザー リソースに完了のフラグを付けるには、この条件を満たす必要があります。
...
    wait:
      fields:
        - path: status.loadBalancer.ingress[0].ip
          value: "*"
...