Vous pouvez ajouter des éléments d'interface de consommation de cloud (CCI) pour utiliser le service CCI dans un modèle de VMware Aria Automation, afin que vos utilisateurs puissent demander des charges de travail basées sur Kubernetes à l'aide du service de machine virtuelle et de Tanzu Kubernetes Grid Service dans un espace de noms de superviseur.

Pour afficher les éléments CCI, développez la section Interface de consommation Cloud de la bibliothèque de ressources de votre modèle de cloud ou tapez cci dans le champ Types de ressources.

Localisation des éléments CCI dans votre modèle de cloud

Le tableau ci-dessous montre les trois types de ressources CCI disponibles dans le modèle pour permettre aux utilisateurs d'effectuer un glisser-déposer et d'effectuer la configuration.
Ressource d'espace de noms de superviseur

CCI.Supervisor.Namespace

Créez un espace de noms de superviseur qui fournit un espace de travail basé sur Kubernetes avec des limites de ressources, un accès utilisateur et des services de superviseur disponibles, afin que les utilisateurs puissent provisionner des ressources de machine virtuelle et TKG en fonction des besoins de l'application.
Ressource de superviseur

CCI.Supervisor.Resource

Créez une ressource Kubernetes de superviseur prise en charge dans un espace de noms de superviseur, telle que virtualmachines, virtualmachineservices, tanzukubernetesclusters, persistentvolumeclaims, secrets, etc., en fonction du manifeste Kubernetes transmis à la ressource de superviseur en cours de configuration.
Ressource TKG

CCI.TKG.Resource

Créez des ressources Kubernetes prises en charge dans un cluster TKG.
Note : Avant de pouvoir ajouter des éléments CCI à votre modèle de cloud, un administrateur VMware Aria Automation doit d'abord configurer CCI. Reportez-vous à la section Installation et configuration de l'interface de consommation de cloud.
Les exemples suivants montrent comment les ressources CCI s'affichent dans le code YAML de votre modèle de cloud. Chaque exemple est nettoyé pour afficher uniquement les lignes importantes.

Exemple de ressource d'espace de noms de superviseur

CCI.Supervisor.Namespace représente l'espace de travail basé sur Kubernetes de superviseur dans lequel les ressources IaaS de superviseur gérées par l'utilisateur vSphere pour l'application sont créées.

Cet exemple définit une ressource d'espace de noms de superviseur CCI nommée cciNamespace pour provisionner un espace de noms de superviseur appelé demo.

Pour vous assurer que l'espace de noms est provisionné sur un superviseur ciblé, vous devez configurer l'espace de noms de superviseur avec les éléments className et regionName définis par le projet.
formatVersion: 1
inputs: {}
resources:
  cciNamespace:
    type: CCI.Supervisor.Namespace
    properties:
      name: demo
      className: default
      regionName: dev-us-west

Exemple de ressource de superviseur

Utilisez CCI.Supervisor.Resource pour transmettre le manifeste Kubernetes pour les objets Kubernetes pris en charge pour s'exécuter dans un contexte d'espace de noms de superviseur.

  • Pour provisionner la ressource de superviseur dans un espace de noms de superviseur particulier, configurez la propriété de contexte de la ressource de superviseur en la mappant à l'ID de l'espace de noms de superviseur à l'aide d'une expression de liaison de modèle, par exemplecontext: ${resource.cciNamespace.id}.
  • Pour spécifier les objets à provisionner, configurez la propriété de manifeste de la ressource de superviseur en transmettant le manifeste Kubernetes à l'objet Kubernetes que vous créez.
Cet exemple crée un cluster TKG en fournissant un manifeste Kubernetes qui spécifie le réseau, la topologie, la taille du plan de contrôle et le nombre de nœuds worker, entre autres paramètres.
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}
Cet exemple définit une machine virtuelle en fournissant un manifeste Kubernetes qui définit la configuration de machine virtuelle et inclut une condition basée sur l'attente.
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

Exemple de ressource TKG

Utilisez CCI.TKG. Ressource pour créer des ressources Kubernetes prises en charge dans un cluster TKG ou dans un espace de noms s'exécutant sur le cluster TKG.
  • Pour lier une ressource TKG à un cluster TKG, mappez l'ID de la ressource de cluster TKG de superviseur avec la propriété de contexte, par exemple context: ${resource.cciTKGCluster.id}.
  • Si vous créez un espace de noms dans une ressource TKG nommée cciTKGNamespace par exemple, vous pouvez lier une ressource TKG à l'espace de noms en insérant le nom de la ressource TKG dans la propriété de contexte ou context: ${resource.cciTKGNamespace.id}.
  • Le manifeste Kubernetes transmis dans les propriétés de ressource spécifie le type de l'objet Kubernetes à provisionner.
Cet exemple montre un secret en tant que ressource TKG liée à un cluster TKG nommé 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)}
...

Ajout d'une propriété d'attente

La ressource de superviseur et la ressource TKG prennent en charge une propriété d'attente qui attendra des conditions ou des valeurs de champ spécifiques dans une ressource, avant d'envisager la fin de la création de la ressource. Les types de propriétés d'attente sont les suivants :
  • Attente de champ : liste de champs dans lesquels chaque champ peut être configuré avec un chemin de propriété et une valeur. La valeur doit correspondre avant que la ressource soit considérée comme étant terminée.
  • Attente de condition : liste des conditions qui indiquent la réussite ou l'échec de la création des ressources.
Cet exemple montre une condition d'attente ajoutée à une ressource de superviseur. La condition doit être satisfaite pour que la ressource de superviseur puisse être marquée comme étant terminée.
...
    wait:
      fields:
        - path: status.loadBalancer.ingress[0].ip
          value: "*"
...