En tant qu'ingénieur DevOps, vous pouvez provisionner 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
- Vérifiez que vous disposez de ressources disponibles pour déployer une machine virtuelle dans votre espace de noms. Reportez-vous à la section Afficher les ressources de machine virtuelle disponibles dans un espace de noms dans vSphere with Tanzu.
- 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. Assurez-vous d'avoir accès à ces images. Pour obtenir des informations sur les images prises en charge, recherchez VM Service image sur le site VMware Cloud Marketplace.
- 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
- Préparez le 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 l'image de bibliothèque de contenu que la machine virtuelle doit utiliser. Par exemple, centos-stream-8-vmservice-v1alpha1-xxxxxxxxxxxxx. |
spec.storageClass |
Identifie la classe de stockage à utiliser pour le stockage des volumes persistants. Par exemple, wcpglobal-storage-profile. |
spec.className |
Spécifie le nom de la classe de machine virtuelle qui décrit les paramètres de matériel virtuel à utiliser. Par exemple, custom. |
spec.networkInterfaces |
Spécifie les paramètres liés au réseau pour la machine virtuelle.
|
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. L'exemple de YAML ci-dessous utilise ConfigMap pour stocker les métadonnées. |
Utilisez ce qui suit comme exemple de fichier YAML
vmsvc-centos-vm.yaml
.
apiVersion: vmoperator.vmware.com/v1alpha1
kind: VirtualMachine
metadata:
name: vmsvc-centos-vm
namespace: my-ns-centos
spec:
imageName: centos-stream-8-vmservice-v1alpha1-xxxxxxxxxxxxx
className: custom
powerState: poweredOn
storageClass: wcpglobal-storage-profile
networkInterfaces:
- networkName: primary
networkType: vsphere-distributed
vmMetadata:
configMapName: vmsvc-centos-nginx-cm
transport: OvfEnv
---
apiVersion: v1
kind: ConfigMap
metadata:
name: vmsvc-centos-nginx-cm
namespace: my-ns-centos
data:
user-data: >-
I2Nsb3VkLWNvbmZpZwoKcGFzc3dvcmQ6IFZNV0FSRQpzc2hfcHdhdXRoOiB0cnVlCgp1c2VyczoKICAtIG5hbWU6IHZtd2FyZQogICAgc3VkbzogQUxMPShBTEwpIE5PUEFTU1dEOkFMTAogICAgbG9ja19wYXNzd2Q6IGZhbHNlCiAgICAjIFBhc3N3b3JkIHNldCB0byBBZG1pbiEyMwogICAgcGFzc3dkOiAnJDEkc2FsdCRTT0MzM2ZWYkEvWnhlSXdENXl3MXUxJwogICAgc2hlbGw6IC9iaW4vYmFzaAoKd3JpdGVfZmlsZXM6CiAgLSBjb250ZW50OiB8CiAgICAgIFZNU1ZDIFNheXMgSGVsbG8gV29ybGQKICAgIHBhdGg6IC9oZWxsb3dvcmxkCg==
ConfigMap contient le blob cloud-config qui spécifie le nom d'utilisateur et le mot de passe du système d'exploitation invité. Dans cet exemple,
user-data dans le ConfigMap vmsvc-centos-nginx-cm représente l'extrait de code suivant au format base64 :
#cloud-config
password: VMWARE
ssh_pwauth: true
users:
- name: vmware
sudo: ALL=(ALL) NOPASSWD:ALL
lock_passwd: false
passwd: '$1$salt$SOC33fVbA/ZxeIwD5yw1u1'
shell: /bin/bash
write_files:
- content: |
VMSVC Says Hello World
path: /helloworld
- Déployez la machine virtuelle.
kubectl apply -f vmsvc-centos-vm.yaml
- Vérifiez que la machine virtuelle a été créée.
kubectl get vm -n my-ns-centos
NAME AGE
vmsvc-centos-vm 28s
- Vérifiez l'état de la machine virtuelle et les événements associés.
kubectl describe virtualmachine vmsvc-centos-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: vmsvc-centos-vm
Namespace: my-ns-centos
Annotations: vmoperator.vmware.com/image-supported-check: disabled
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:
...
...
Spec:
Class Name: custom
Image Name: vmservice-centos-20-10-server-cloudimg-amd64
Network Interfaces:
Network Name: primary
Network Type: vsphere-distributed
Power State: poweredOn
Storage Class: wcpglobal-storage-profile
Vm Metadata:
Config Map Name: vmsvc-centos-nginx-cm
Transport: OvfEnv
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>
...
- 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.
Si la machine virtuelle inclut un périphérique PCI configuré pour vGPU, installez le pilote d'affichage NVIDIA. Reportez-vous à la section Installer le pilote NVIDIA invité dans une machine virtuelle dans vSphere with Tanzu.