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 with Tanzu, 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 with Tanzu, 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 :

Afficher les ressources de machine virtuelle disponibles dans un espace de noms dans vSphere with Tanzu

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 de Tanzu Kubernetes Grid 2 avec vSphere with Tanzu.

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 virtualmachineclassbindings
    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
  7. Si vous utilisez vSphere Distributed Switch pour la mise en réseau de votre charge de travail, obtenez le nom du réseau.
    Note : Vous utilisez ces informations pour spécifier le paramètre networkName dans le fichier YAML de la machine virtuelle lorsque la valeur de networkType est vsphere-distributed. Vous n'avez pas besoin d'obtenir et de spécifier le nom du réseau si vous utilisez VMware NSX.
    kubectl get network
    NAME      AGE
    primary   7d2h

Déployer une machine virtuelle dans vSphere with Tanzu

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, les considérations suivantes s'appliquent :
  • Veillez à utiliser la classe de machine virtuelle appropriée avec la configuration PCI. Reportez-vous à la section Ajouter des périphériques PCI à une classe de machine virtuelle dans vSphere with Tanzu.
  • 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.
  • Les machines virtuelles disposant de périphériques vGPU gérées par le service de VM sont automatiquement mises hors tension lorsqu'un hôte ESXi passe en mode de maintenance. Cela peut affecter temporairement les charges de travail en cours d'exécution dans les machines virtuelles. Les machines virtuelles sont automatiquement mises sous tension dès que l'hôte sort du mode de maintenance.

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/v1alpha1.
    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. Spécifiez le nom uniquement si la valeur de networkType est vsphere-distributed. Vous pouvez obtenir ces informations à l'aide de la commande kubectl get network.

      Si networkType est nsx-t, vous pouvez indiquer networkName, mais vous n'avez pas besoin de le faire.

    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/v1alpha1
    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/v1alpha1
    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 -n my-vm.yaml
    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/v1alpha1
    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 with Tanzu.

Que faire ensuite

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

Installer le pilote NVIDIA invité dans une machine virtuelle dans vSphere with Tanzu

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 with Tanzu, installez le pilote graphique NVIDIA vGPU pour activer entièrement les opérations GPU.

Conditions préalables

  • Assurez-vous que la machine virtuelle que vous avez créée fait référence à la classe de machine virtuelle avec la définition de vGPU. Reportez-vous à la section Ajouter des périphériques PCI à une classe de machine virtuelle dans vSphere with Tanzu.
  • Vérifiez que vous avez téléchargé le module logiciel vGPU depuis le site de téléchargement NVIDIA, que vous avez décompressé le module et que le composant du lecteur invité est prêt. Pour plus d'informations, reportez-vous à la documentation appropriée du logiciel de GPU virtuel NVIDIA.
    Note : La version du composant de pilote doit correspondre à la version de vGPU Manager qu'un administrateur vSphere a installé sur l'hôte ESXi.

Procédure

  1. Copiez le module du pilote logiciel Linux NVIDIA vGPU, par exemple NVIDIA-Linux-x86_64-version-grid.run, sur la machine virtuelle invitée.
  2. Avant de tenter d’exécuter le programme d’installation du pilote, arrêtez toutes les applications.
  3. Démarrez le programme d'installation du pilote NVIDIA vGPU.
    sudo ./NVIDIA-Linux-x86_64-version-grid.run
  4. Acceptez le contrat de licence du logiciel NVIDIA et sélectionnez Oui pour mettre à jour automatiquement les paramètres de configuration X.
  5. Vérifiez que le pilote a été installé.
    Par exemple,
    ~$ nvidia-smi
    Wed May 19 22:15:04 2021
    +-----------------------------------------------------------------------------+
    | NVIDIA-SMI 460.63       Driver Version: 460.63       CUDA Version: 11.2     |
    |-------------------------------+----------------------+----------------------+
    | GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
    | Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
    |                               |                      |               MIG M. |
    |===============================+======================+======================|
    |   0  GRID V100-4Q        On   | 00000000:02:00.0 Off |                  N/A|
    | N/AN/AP0    N/A/  N/A|    304MiB /  4096MiB |      0%      Default |
    |                               |                      |                  N/A|
    +-------------------------------+----------------------+----------------------+
    
    +-----------------------------------------------------------------------------+
    | Processes:                                                                  |
    |  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
    |        ID   ID                                                   Usage      |
    |=============================================================================|
    |  No running processes found                                                 |
    +-----------------------------------------------------------------------------+