Il tecnico di DevOps può eseguire il provisioning di una macchina virtuale e del relativo sistema operativo guest in modo dichiarativo scrivendo le specifiche di distribuzione della macchina virtuale in un file YAML Kubernetes.
Prerequisiti
- Verificare di disporre delle risorse disponibili per distribuire una macchina virtuale nello spazio dei nomi. Vedere Visualizzazione delle risorse della macchina virtuale disponibili in uno spazio dei nomi in vSphere with Tanzu.
- Se si utilizza NVIDIA vGPU o altri dispositivi PCI per le macchine virtuali, tenere presenti le considerazioni seguenti:
- Assicurarsi di utilizzare la classe di macchine virtuali appropriata con la configurazione PCI. Vedere Aggiunta di dispositivi PCI a una classe di macchine virtuali in vSphere with Tanzu.
- Le macchine virtuali con dispositivi vGPU richiedono immagini con modalità di avvio impostata su EFI, ad esempio CentOS. Assicurarsi di poter accedere a queste immagini. Per informazioni sulle immagini supportate, cercare VM Service image sul sito Web di VMware Cloud Marketplace.
- Le macchine virtuali con dispositivi vGPU gestiti dal servizio della macchina virtuale vengono disattivate automaticamente quando un host ESXi passa alla modalità di manutenzione. Questa operazione potrebbe influire temporaneamente sui carichi di lavoro in esecuzione nelle macchine virtuali. Le macchine virtuali vengono accese automaticamente dopo che nell'host è presente la modalità di manutenzione.
Procedura
- Preparare il file YAML della macchina virtuale.
Nel file, specificare i seguenti parametri:
Opzione |
Descrizione |
apiVersion |
Specifica la versione dell'API del servizio della macchina virtuale. Ad esempio vmoperator.vmware.com/v1alpha1. |
kind |
Specifica il tipo di risorsa Kubernetes da creare. L'unico valore disponibile è VirtualMachine. |
spec.imageName |
Specifica l'immagine della libreria di contenuti che la macchina virtuale deve utilizzare. Ad esempio, centos-stream-8-vmservice-v1alpha1-xxxxxxxxxxxxx. |
spec.storageClass |
Identifica la classe di storage da utilizzare per lo storage dei volumi persistenti. Ad esempio, wcpglobal-storage-profile. |
spec.className |
Specifica il nome della classe di macchine virtuali che descrive le impostazioni dell'hardware virtuale da utilizzare. Ad esempio, custom. |
spec.networkInterfaces |
Specifica le impostazioni relative alla rete per la macchina virtuale.
|
spec.vmMetadata |
Include ulteriori metadati da passare alla macchina virtuale. È possibile utilizzare questa chiave per personalizzare l'immagine del sistema operativo guest e impostare elementi come il hostname della macchina virtuale e dei user-data, tra cui password, chiavi SSH e così via. Il codice YAML di esempio seguente utilizza ConfigMap per archiviare i metadati. |
Utilizzare quanto segue come esempio di un file 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 contiene il blob di cloud-config che specifica il nome utente e la password per il sistema operativo guest. In questo esempio,
user-data in vmsvc-centos-nginx-cm ConfigMap rappresenta il seguente frammento in formato 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
- Distribuire la macchina virtuale.
kubectl apply -f vmsvc-centos-vm.yaml
- Verificare che la macchina virtuale sia stata creata.
kubectl get vm -n my-ns-centos
NAME AGE
vmsvc-centos-vm 28s
- Controllare lo stato della macchina virtuale e gli eventi associati.
kubectl describe virtualmachine vmsvc-centos-vm
L'output è simile al seguente. Dall'output, è anche possibile ottenere l'indirizzo IP della macchina virtuale, che viene visualizzato nel campo 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>
...
- Verificare che l'IP della macchina virtuale sia raggiungibile.
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
risultati
Una macchina virtuale creata tramite il servizio della macchina virtuale può essere gestita solo da DevOps dallo spazio dei nomi Kubernetes. Il suo ciclo di vita non può essere gestito dal
vSphere Client, ma gli amministratori di vSphere possono monitorare la macchina virtuale e le relative risorse. Per ulteriori informazioni, vedere
Monitorare le macchine virtuali disponibili in vSphere with Tanzu.
Operazioni successive
Per ulteriori dettagli, vedere il blog
Introducing Virtual Machine Provisioning.
Se la macchina virtuale include un dispositivo PCI configurato per la vGPU, installare il driver del monitor NVIDIA. Vedere Installare il driver guest NVIDIA in una macchina virtuale in vSphere with Tanzu.