Você pode adicionar elementos da Cloud Consumption Interface (CCI) para usar o serviço CCI em um modelo do VMware Aria Automation para que seus usuários possam solicitar cargas de trabalho baseadas em Kubernetes usando o serviço de Máquina Virtual e o Tanzu Kubernetes Grid Service dentro de um namespace de supervisor.

Para ver os elementos da CCI, expanda a seção Cloud Consumption Interface dentro da biblioteca de recursos no seu modelo de nuvem ou digite cci no campo Pesquisar Tipos de Recurso.

Localize os elementos da CCI no seu modelo de nuvem

A tabela abaixo mostra os três tipos de recursos da CCI que estão disponíveis no modelo para os usuários arrastarem, soltarem e configurarem.
Recurso de Namespace de Supervisor

CCI.Supervisor.Namespace

Crie um novo Namespace de Supervisor, que forneça um espaço de trabalho baseado no Kubernetes com limites de recursos, acesso de usuários e serviços de Supervisor disponíveis, para que os usuários possam provisionar recursos de VM e do TKG com base nas necessidades do aplicativo.
Recurso de supervisor

CCI.Supervisor.Resource

Crie qualquer recurso de Supervisor Kubernetes compatível dentro de um Namespace de Supervisor, como virtualmachines, virtualmachineservices, tanzukubernetesclusters, persistentvolumeclaims, secrets e assim por diante, dependendo do manifesto Kubernetes passado para o recurso de Supervisor que está sendo configurado.
Recurso do TKG

CCI.TKG.Resource

Crie qualquer recurso do Kubernetes compatível dentro de um cluster TKG.
Observação: Antes que você possa adicionar elementos da CCI ao seu modelo de nuvem, um administrador do VMware Aria Automation deve configurar a CCI. Consulte Instalação e configuração da Cloud Consumption Interface.
Os exemplos a seguir mostram como os recursos da CCI aparecem no código YAML do seu modelo de nuvem. Cada exemplo é recortado para mostrar apenas as linhas importantes.

Exemplo de Recurso de Namespace de Supervisor

CCI.Supervisor.Namespace representa o espaço de trabalho baseado no Supervisor Kubernetes em que os recursos de Supervisor IaaS do vSphere gerenciados pelo usuário para o aplicativo são criados.

Este exemplo define um recurso de namespace de supervisor da CCI denominado cciNamespace para provisionar um Namespace de Supervisor denominado demo.

Para garantir que o namespace seja provisionado em um Supervisor direcionado, você deve configurar o Namespace de Supervisor com um className e regionName definido por projeto.
formatVersion: 1
inputs: {}
resources:
  cciNamespace:
    type: CCI.Supervisor.Namespace
    properties:
      name: demo
      className: default
      regionName: dev-us-west

Exemplo de Recurso de Supervisor

Você usa CCI.Supervisor.Resource para passar o manifesto Kubernetes para objetos do Kubernetes com suporte para execução em um contexto de namespace de supervisor.

  • Para provisionar o recurso de supervisor dentro de um namespace de supervisor específico, configure a propriedade de contexto do recurso de supervisor mapeando-a para o ID do namespace de supervisor usando uma expressão de vinculação de modelo, por exemplo: context: ${resource.cciNamespace.id}.
  • Para especificar os objetos a serem provisionados, configure a propriedade manifest do Recurso de Supervisor passando o manifesto Kubernetes para o objeto Kubernetes que você está criando.
Este exemplo cria um cluster TKG fornecendo um manifesto Kubernetes que especifica a rede, a topologia, o tamanho da camada de controle e a contagem de nós de trabalhador entre outras configurações.
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}
Este exemplo define uma máquina virtual fornecendo um manifesto do Kubernetes que define a configuração da VM e inclui uma condição baseada em espera.
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

Exemplo de recurso do TKG

Você usa CCI.TKG.Resource para criar recursos Kubernetes compatíveis dentro de um cluster TKG ou dentro de um namespace em execução no cluster TKG.
  • Para vincular um recurso TKG a um cluster TKG, você mapeia o ID de recurso do cluster TKG do supervisor com a propriedade context, por exemplo: context: ${resource.cciTKGCluster.id}.
  • Se você estiver criando um namespace dentro de um recurso do TKG chamado cciTKGNamespace, por exemplo, você pode vincular esse recurso do TKG ao namespace inserindo o nome desse recurso na propriedade de contexto ou context: ${resource.cciTKGNamespace.id}.
  • O manifesto Kubernetes que é passado nas propriedades do recurso especifica o tipo de objeto Kubernetes a ser provisionado.
Este exemplo mostra um segredo como um recurso TKG vinculado a um cluster TKG denominado cciTKGCluster.
...
  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)}
...

Adicionar uma propriedade de espera

Tanto o recurso de supervisor quanto o recurso TKG oferecem suporte a uma propriedade de espera que aguardará condições específicas ou valores de campo dentro de um recurso antes de considerar que a criação do recurso foi concluída. Os tipos de propriedade de espera são:
  • Espera de campo: lista de campos onde cada campo pode ser configurado com um caminho de propriedade e um valor. O valor deve ser correspondido antes que o recurso seja considerado concluído.
  • Condição de espera: lista de condições que indicam sucesso ou falha na criação de recursos.
Este exemplo mostra uma condição de espera adicionada a um recurso de supervisor. A condição deve ser atendida antes que o recurso do supervisor possa ser sinalizado como concluído.
...
    wait:
      fields:
        - path: status.loadBalancer.ingress[0].ip
          value: "*"
...