È possibile aggiungere elementi di CCI (Cloud Consumption Interface) per utilizzare il servizio CCI in un modello di VMware Aria Automation in modo che gli utenti possano richiedere carichi di lavoro basati su Kubernetes utilizzando il servizio Macchina virtuale e il servizio Tanzu Kubernetes Grid in uno spazio dei nomi supervisore.

Per visualizzare gli elementi di CCI, espandere la sezione Cloud Consumption Interface all'interno della libreria di risorse nel modello cloud o digitare cci nel campo Cerca tipi di risorse.

Individuare gli elementi di CCI nel modello cloud

La tabella seguente mostra i tre tipi di risorse di CCI disponibili nel modello e che gli utenti possono trascinare, rilasciare e configurare.
Risorsa spazio dei nomi supervisore

CCI.Supervisor.Namespace

Creare un nuovo spazio dei nomi supervisore, che fornisca a un'area di lavoro basata su Kubernetes limiti delle risorse, accesso utente e servizi supervisore disponibili, in modo che gli utenti possano eseguire il provisioning delle risorse della macchina virtuale e di TKG in base alle esigenze dell'applicazione.
Risorsa supervisore

CCI.Supervisor.Resource

Creare una risorsa Kubernetes supervisore supportata qualsiasi in uno spazio dei nomi supervisore, ad esempio virtualmachines, virtualmachineservices, tanzukubernetesclusters, persistentvolumeclaims, secrets e così via in base al manifesto Kubernetes passato alla risorsa supervisore in fase di configurazione.
Risorsa TKG

CCI.TKG.Resource

Creare una risorsa Kubernetes supportata qualsiasi in un cluster TKG.
Nota: Prima di poter aggiungere elementi CCI al modello cloud, è innanzitutto necessario che un amministratore di VMware Aria Automation configuri CCI. Vedere Impostazione e configurazione di Cloud Consumption Interface.
Gli esempi seguenti illustrano come vengono visualizzate le risorse di CCI nel codice YAML del modello cloud. Ogni esempio è stato tagliato in modo da mostrare solo le righe importanti.

Esempio di risorsa spazio dei nomi supervisore

CCI.Supervisor.Namespace rappresenta l'area di lavoro supervisore basata su Kubernetes in cui vengono create le risorse IaaS supervisore vSphere gestite dall'utente per l'applicazione.

In questo esempio viene definita una risorsa spazio dei nomi supervisore di CCI denominata cciNamespace per eseguire il provisioning di uno spazio dei nomi supervisore denominato demo.

Per assicurarsi che venga eseguito il provisioning dello spazio dei nomi in un supervisore di destinazione, è necessario configurare lo spazio dei nomi supervisore con className e regionName definiti dal progetto.
formatVersion: 1
inputs: {}
resources:
  cciNamespace:
    type: CCI.Supervisor.Namespace
    properties:
      name: demo
      className: default
      regionName: dev-us-west

Esempio di risorsa supervisore

Utilizzare CCI.Supervisor.Resource per passare il manifesto di Kubernetes per gli oggetti Kubernetes supportati per l'esecuzione nel contesto dello spazio dei nomi supervisore.

  • Per eseguire il provisioning della risorsa supervisore all'interno di uno spazio dei nomi supervisore specifico, configurare la proprietà del contesto della risorsa supervisore mappandola all'ID dello spazio dei nomi supervisore tramite un'espressione di binding del modello, ad esempio context: ${resource.cciNamespace.id}.
  • Per specificare gli oggetti di cui eseguire il provisioning, configurare la proprietà manifesto della risorsa supervisore passando il manifesto di Kubernetes all'oggetto Kubernetes che si sta creando.
In questo esempio viene creato un cluster TKG fornendo un manifesto di Kubernetes che specifica, tra le altre impostazioni, la rete, la topologia, le dimensioni del piano di controllo e il numero di nodi worker.
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}
In questo esempio viene definita una macchina virtuale fornendo un manifesto di Kubernetes che definisce la configurazione della macchina virtuale e include una condizione basata sull'attesa.
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

Esempio di risorsa TKG

Utilizzare CCI.TKG.Resource per creare risorse di Kubernetes supportate in un cluster TKG o in uno spazio dei nomi in esecuzione nel cluster TKG.
  • Per associare una risorsa TKG a un cluster TKG, mappare l'ID della risorsa cluster TKG supervisore alla proprietà del contesto, ad esempio context: ${resource.cciTKGCluster.id}.
  • Se ad esempio si crea uno spazio dei nomi all'interno di una risorsa TKG denominato cciTKGNamespace, è possibile associare una risorsa TKG allo spazio dei nomi inserendo il nome della risorsa TKG nella proprietà del contesto o context: ${resource.cciTKGNamespace.id}.
  • Il manifesto di Kubernetes passato all'interno delle proprietà della risorsa specifica il tipo dell'oggetto Kubernetes di cui eseguire il provisioning.
In questo esempio viene mostrato un segreto come risorsa TKG associata a un cluster TKG denominato 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)}
...

Aggiunta di una proprietà di attesa

Sia la risorsa supervisore sia la risorsa TKG supportano una proprietà di attesa che attenderà condizioni o valori del campo specifici all'interno di una risorsa prima di decidere di completare la creazione della risorsa. I tipi di proprietà di attesa sono:
  • Attesa del campo: elenco di campi in cui ogni campo può essere configurato con un percorso di proprietà e un valore. Il valore deve corrispondere affinché la risorsa venga considerata completata.
  • Attesa della condizione: elenco di condizioni che indicano l'esito positivo o negativo della creazione delle risorse.
In questo esempio viene illustrata una condizione di attesa aggiunta a una risorsa supervisore. Affinché la risorsa supervisore possa essere contrassegnata come completata, la condizione deve essere soddisfatta.
...
    wait:
      fields:
        - path: status.loadBalancer.ingress[0].ip
          value: "*"
...