Puede agregar elementos de la interfaz de consumo de nube (CCI) para utilizar el servicio CCI dentro de una plantilla de VMware Aria Automation para que los usuarios puedan solicitar cargas de trabajo basadas en Kubernetes utilizando el servicio de máquina virtual y el servicio Tanzu Kubernetes Grid dentro de un espacio de nombres de supervisor.

Para ver los elementos CCI, amplíe la sección Interfaz de consumo de nube dentro de la biblioteca de recursos de su plantilla de nube o escriba cci en el campo Buscar tipos de recursos.

Localice los elementos CCI en su plantilla de nube

La tabla siguiente muestra los tres tipos de recursos CCI que están disponibles en la plantilla para que los usuarios puedan arrastrarlos, soltarlos y configurarlos.
Recurso Espacio de nombres de supervisor

CCI.Supervisor.Namespace

Cree un nuevo espacio de nombres de supervisor, que proporciona un espacio de trabajo basado en Kubernetes con límites de recursos, acceso de usuarios y servicios de supervisor disponibles, para que los usuarios puedan aprovisionar recursos de VM y TKG en función de las necesidades de las aplicaciones.
Recurso Supervisor

CCI.Supervisor.Resource

Cree cualquier recurso Supervisor de Kubernetes compatible dentro de un espacio de nombres de supervisor, como virtualmachines, virtualmachineservices, tanzukubernetesclusters, persistentvolumeclaims, secrets, etc., en función del manifiesto Kubernetes pasado al recurso Supervisor que se esté configurando.
Recurso TKG

CCI.TKG.Resource

Cree cualquier recurso Kubernetes compatible dentro de un clúster TKG.
Nota: Antes de poder agregar elementos CCI a su plantilla de nube, primero un administrador de VMware Aria Automation debe configurar la CCI. Consulte Instalación y configuración de la interfaz de consumo de nube.
Los siguientes ejemplos muestran cómo se muestran los recursos CCI en el código YAML de su plantilla de nube. Cada ejemplo está resumido para mostrar únicamente las líneas importantes.

Ejemplo de recurso Espacio de nombres de supervisor

CCI.Supervisor.Namespace representa el espacio de trabajo basado en Supervisor de Kubernetes en el que se crean los recursos de IaaS de supervisor de vSphere gestionados por el usuario para la aplicación.

Este ejemplo define un recurso de espacio de nombres de supervisor de CCI denominado cciNamespace para aprovisionar un espacio de nombres de supervisor denominado demo.

Para asegurarse de que el espacio de nombres se aprovisiona en un Supervisor objetivo, debe configurar el espacio de nombres de supervisor con className y regionName definidos para el proyecto.
formatVersion: 1
inputs: {}
resources:
  cciNamespace:
    type: CCI.Supervisor.Namespace
    properties:
      name: demo
      className: default
      regionName: dev-us-west

Ejemplo de recurso Supervisor

Se usa CCI.Supervisor.Resource para pasar el manifiesto de Kubernetes para los objetos Kubernetes admitidos de forma que se ejecuten en un contexto de espacio de nombres de supervisor.

  • Para aprovisionar el recurso Supervisor dentro de un espacio de nombres de supervisor concreto, configure la propiedad de contexto del recurso Supervisor asignándola al ID del espacio de nombres de supervisor mediante una expresión de enlace de plantilla, por ejemplo context: ${resource.cciNamespace.id}.
  • Para especificar los objetos que desea aprovisionar, configure la propiedad de manifiesto del recurso Supervisor pasando el manifiesto de Kubernetes al objeto Kubernetes que está creando.
En este ejemplo, para crear un clúster TKG se proporciona un manifiesto de Kubernetes que especifica la red, la topología, el tamaño del plano de control y el recuento de nodos de trabajo, entre otros ajustes.
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}
En este ejemplo, para definir una máquina virtual se proporciona un manifiesto de Kubernetes que define la configuración de la máquina virtual e incluye una condición basada en una 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

Ejemplo de recurso TKG

Utilice CCI.TKG.Resource para crear recursos Kubernetes compatibles dentro de un clúster TKG o dentro de un espacio de nombres que se ejecute en el clúster TKG.
  • Para vincular un recurso TKG a un clúster TKG, debe asignar el ID del recurso de clúster TKG supervisor con la propiedad context, por ejemplo, context: ${resource.cciTKGCluster.id}.
  • Si está creando un espacio de nombres dentro de un recurso TKG llamado cciTKGNamespace, por ejemplo, puede vincular un recurso TKG al espacio de nombres insertando el nombre del recurso TKG en la propiedad context o context: ${resource.cciTKGNamespace.id}.
  • El manifiesto de Kubernetes que se pasa dentro de las propiedades del recurso especifica el tipo de objeto Kubernetes que se debe aprovisionar.
Este ejemplo muestra un secreto como recurso TKG vinculado a un clúster 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)}
...

Agregar una propiedad de espera

Tanto el recurso supervisor como el recurso TKG admiten una propiedad de espera que esperará a que se cumplan condiciones específicas o valores de campo dentro de un recurso, antes de considerar que se ha completado la creación del recurso. Los tipos de propiedad de espera son:
  • Campo Wait: Lista de campos donde cada campo puede configurarse con una ruta de propiedad y un valor. El valor debe ser verificado antes de que el recurso se considere completado.
  • Condición Wait: Lista de condiciones que indican el éxito o el fracaso de la creación del recurso.
Este ejemplo muestra una condición de espera agregada a un recurso Supervisor. Esa condición debe cumplirse antes de que el recurso Supervisor pueda marcarse como completado.
...
    wait:
      fields:
        - path: status.loadBalancer.ingress[0].ip
          value: "*"
...