En tant qu'ingénieur DevOps, vous pouvez utiliser la commande kubectl pour vérifier les ressources de machine virtuelle disponibles et provisionner une machine virtuelle Linux ou Windows autonome dans un espace de noms sur un Superviseur. Si la machine virtuelle inclut un périphérique PCI configuré pour vGPU, après avoir créé et démarré la machine virtuelle dans votre environnement vSphere IaaS control plane, vous pouvez installer le pilote graphique NVIDIA vGPU pour activer les opérations GPU.

Conditions requises

Pour pouvoir déployer une machine virtuelle autonome dans vSphere IaaS control plane, un ingénieur DevOps doit avoir accès à des ressources de machine virtuelle spécifiques. Assurez-vous qu'un administrateur vSphere a effectué ces étapes pour rendre les ressources de machine virtuelle disponibles :

Si vous prévoyez d'utiliser NVIDIA vGPU ou d'autres périphériques PCI pour vos machines virtuelles, vous devez respecter des conditions requises supplémentaires. Pour plus d'informations, consultez Déploiement d'une machine virtuelle avec des périphériques PCI dans vSphere IaaS control plane.

Pour plus d'informations sur l'opérateur de machine virtuelle et les champs pris en charge, reportez-vous aux sections Concepts du service de VM et https://vm-operator.readthedocs.io/en/stable/ref/api/v1alpha2/.

Afficher les ressources de machine virtuelle disponibles dans un espace de noms dans vSphere IaaS control plane

En tant qu'ingénieur DevOps, vérifiez que vous pouvez accéder à ces ressources de machine virtuelle sur votre espace de noms et afficher les classes et les modèles de machine virtuelle disponibles dans votre environnement. Vous pouvez également répertorier les classes de stockage et d'autres éléments dont vous pouvez avoir besoin pour utiliser une machine virtuelle en libre-service.

Cette tâche couvre les commandes que vous utilisez pour accéder aux ressources disponibles pour un déploiement d'une machine virtuelle autonome. Pour plus d'informations sur les ressources nécessaires pour déployer des clusters et des machines virtuelles Tanzu Kubernetes Grid qui constituent les clusters, reportez-vous à la section Classes de machines virtuelles pour les clusters TKG dans la documentation Utilisation du service TKG avec le plan de contrôle IaaS vSphere.

Procédure

  1. Accédez à votre espace de noms dans l'environnement Kubernetes.
  2. Pour afficher les classes de machine virtuelle disponibles dans votre espace de noms, exécutez la commande suivante.
    kubectl get virtualmachineclass
    Vous pouvez voir la sortie suivante.
    Note : Étant donné que le type de classe de machine virtuelle Meilleur effort permet de surcharger les ressources, vous pouvez manquer de ressources si vous avez défini des limites sur l'espace de noms dans lequel vous provisionnez les machines virtuelles. Pour cette raison, utilisez le type de classe de machine virtuelle Garantie dans l'environnement de production.
    NAME                       VIRTUALMACHINECLASS        AGE
    
    best-effort-large          best-effort-large          44m
    best-effort-medium         best-effort-medium         44m
    best-effort-small          best-effort-small          44m
    best-effort-xsmall         best-effort-xsmall         44m
    custom                     custom                     44m
  3. Pour afficher les détails d'une classe de machine virtuelle spécifique, exécutez les commandes suivantes.
    • kubectl describe virtualmachineclasses name_vm_class

      Si une classe de machine virtuelle inclut un périphérique vGPU, vous pouvez voir son profil sous spec: hardware: devices: vgpuDevices.

      ......
      spec:
        hardware:
          cpus: 4
          devices:
            vgpuDevices:
            - profileName: grid_v100-q4
      ......
      
    • kubectl get virtualmachineclasses -o wide

      Si la classe de machine virtuelle inclut un périphérique vGPU ou de relais, la sortie l'affiche dans la colonne VGPUDevicesProfileNames ou PassthroughDeviceIDs.

  4. Affichez les images de machine virtuelle.
    kubectl get virtualmachineimages​
    La sortie obtenue est semblable à l'exemple suivant. Le nom de l'image, tel que vmi-xxxxxxxxxxxxx, est généré automatiquement par le système.
    NAME                                              VERSION  OSTYPE                FORMAT  IMAGESUPPORTED  AGE
    vmi-xxxxxxxxxxxxx                                          centos8_64Guest       ovf     true            4d3h
  5. Pour décrire une image spécifique, utilisez la commande suivante.
    kubectl describe virtualmachineimage vmi-xxxxxxxxxxxxx

    Les machines virtuelles disposant de périphériques vGPU requièrent des images dont le mode de démarrage est défini sur EFI, tels que CentOS. Assurez-vous d'avoir accès à ces images.

  6. Vérifiez que vous pouvez accéder aux classes de stockage.
    kubectl get resourcequotas
    NAME                        AGE   REQUEST                                                                                         LIMIT
    my-ns-ubuntu-storagequota   24h   wcpglobal-storage-profile.storageclass.storage.k8s.io/requests.storage: 0/9223372036854775807

Déployer une machine virtuelle dans vSphere IaaS control plane

En tant qu'ingénieur DevOps, provisionnez une machine virtuelle et son système d'exploitation invité de manière déclarative en écrivant des spécifications de déploiement de machines virtuelles dans un fichier YAML Kubernetes.

Conditions préalables

Si vous utilisez NVIDIA vGPU ou d'autres périphériques PCI pour vos machines virtuelles, reportez-vous à la section Déploiement d'une machine virtuelle avec des périphériques PCI dans vSphere IaaS control plane.

Procédure

  1. Préparez un fichier YAML de la machine virtuelle.
    Dans le fichier, spécifiez les paramètres suivants :
    Option Description
    apiVersion Spécifie la version de l'API de service de machine virtuelle. Par exemple, vmoperator.vmware.com/v1alpha2.
    kind Spécifie le type de ressource Kubernetes à créer. La seule valeur disponible est VirtualMachine.
    spec.imageName Spécifie le nom de la ressource d'image de machine virtuelle dans le cluster Kubernetes.
    spec.storageClass​ Spécifie la classe de stockage à utiliser pour le stockage des volumes persistants.
    spec.className Spécifie le nom de la classe de machine virtuelle qui décrit les paramètres de matériel virtuel à utiliser.
    spec.networkInterfaces Spécifie les paramètres liés au réseau pour la machine virtuelle.
    • networkType. Les valeurs de la clé peuvent être nsx-t ou vsphere-distributed.
    • networkName. Si nécessaire, spécifiez le nom ou conservez le nom par défaut.
    spec.vmMetadata Inclut des métadonnées supplémentaires à transmettre à la machine virtuelle. Vous pouvez utiliser cette clé pour personnaliser l'image du système d'exploitation invité et définir des éléments tels que le hostname de la machine virtuelle et des user-data, notamment les mots de passe, les clés SSH, etc.

    Pour plus d'informations, notamment sur le démarrage et la personnalisation des machines virtuelles Windows à l'aide de l'outil de préparation du système Microsoft (Sysprep), reportez-vous à la section Personnalisation d'un invité.

    topology.kubernetes.io/zone Contrôle le placement des machines virtuelles sur un Superviseur à trois zones. Par exemple, topology.kubernetes.io/zone: zone-a02.
    L'exemple suivant de fichier YAML de machine virtuelle my-vm utilise CloudInit comme méthode de démarrage. L'exemple montre une ressource VirtualMachine qui spécifie les données utilisateur dans une ressource de secret my-vm-bootstrap-data. Le secret sera utilisé pour démarrer et personnaliser le système d'exploitation invité.

    Les données du secret incluent la configuration cloud-config CloudInit. Pour plus d'informations sur le format de cloud-config, reportez-vous à la section Exemples de configuration Cloud de la documentation officielle.

    Pour obtenir des exemples avec Sysprep comme méthode de démarrage, reportez-vous à la section Sysprep.
    apiVersion: vmoperator.vmware.com/v1alpha2
    kind: VirtualMachine
    metadata:
      name:      my-vm
      namespace: my-namespace
    spec:
      className:    small
      imageName:    vmi-xxxxxxxxxxxxx
      storageClass: iscsi
      vmMetadata:
        transport: CloudInit
        secretName: my-vm-bootstrap-data
    
    apiVersion: v1
    kind: Secret
    metadata:
      name:      my-vm-bootstrap-data
      namespace: my-namespace
    stringData:
      user-data: |
        #cloud-config
        users:
        - default
        - name: xyz..
          primary_group: xyz..
          groups: users
          ssh_authorized_keys:
          - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDSL7uWGj...
        runcmd:
        - "ls /"
        - [ "ls", "-a", "-l", "/" ]
        write_files:
        - path: /etc/my-plaintext
          permissions: '0644'
          owner: root:root
          content: |
            Hello, world.

    Utilisez l'exemple suivant si vous déployez une machine virtuelle dans un environnement avec des zones.

    Pour obtenir les valeurs pour ZONE_NAME, exécutez la commande kubectl get vspherezones.

    apiVersion: vmoperator.vmware.com/v1alpha2
    kind: VirtualMachine
    metadata:
      name: <vm-name>
      namespace: <vm-ns>
      labels:
        topology.kubernetes.io/zone: ZONE_NAME
    ...
  2. Déployez la machine virtuelle.
    kubectl apply -f my-vm.yaml
  3. Vérifiez que la machine virtuelle a été créée.
    kubectl get vm
    NAME              AGE
    my-vm             28s
  4. Vérifiez les détails de la machine virtuelle et son état.
    kubectl describe virtualmachine my-vm

    Le résultat est semblable à l'exemple suivant. À partir de la sortie, vous pouvez également obtenir l'adresse IP de la machine virtuelle, qui s'affiche dans le champ Vm Ip.

    Name:         my-vm
    Namespace:    my-namespace
    API Version:  vmoperator.vmware.com/v1alpha2
    Kind:         VirtualMachine
    Metadata:
      Creation Timestamp:  2021-03-23T19:07:36Z
      Finalizers:
        virtualmachine.vmoperator.vmware.com
      Generation:  1
      Managed Fields:
     ...  
     ... 
    Status:
      Bios UUID:              4218ec42-aeb3-9491-fe22-19b6f954ce38
      Change Block Tracking:  false
      Conditions:
        Last Transition Time:  2021-03-23T19:08:59Z
        Status:                True
        Type:                  VirtualMachinePrereqReady
      Host:                    10.185.240.10
      Instance UUID:           50180b3a-86ee-870a-c3da-90ddbaffc950
      Phase:                   Created
      Power State:             poweredOn
      Unique ID:               vm-73
      Vm Ip:                   10.161.75.162
    Events:                    <none>
    ...
    
  5. Vérifiez que l'adresse IP de la VM est atteignable.
    ping 10.161.75.162
    PING 10.161.75.162 (10.161.75.162): 56 data bytes
    64 bytes from 10.161.75.162: icmp_seq=0 ttl=59 time=43.528 ms
    64 bytes from 10.161.75.162: icmp_seq=1 ttl=59 time=53.885 ms
    64 bytes from 10.161.75.162: icmp_seq=2 ttl=59 time=31.581 ms

Résultats

Une machine virtuelle créée via le service de machine virtuelle peut être gérée uniquement par DevOps à partir de l'espace de noms Kubernetes. Son cycle de vie ne peut pas être géré à partir de vSphere Client, mais les administrateurs vSphere peuvent surveiller la machine virtuelle et ses ressources. Pour plus d'informations, consultez Surveiller les machines virtuelles disponibles dans vSphere IaaS control plane.

Que faire ensuite

Pour plus d'informations, consultez le blog Présentation du provisionnement de machine virtuelle.