Como ingeniero de desarrollo y operaciones, puede aprovisionar una máquina virtual y su SO invitado de forma declarativa al escribir especificaciones de implementación de máquina virtual en un archivo YAML de Kubernetes.
Requisitos previos
- Compruebe si dispone de recursos para implementar una máquina virtual en el espacio de nombres. Consulte Ver recursos de máquina virtual disponibles en un espacio de nombres en vSphere with Tanzu.
- Si utiliza vGPU de NVIDIA u otros dispositivos PCI para sus máquinas virtuales, se aplican las siguientes consideraciones:
- Asegúrese de utilizar la clase de máquina virtual adecuada con la configuración de PCI. Consulte Agregar dispositivos PCI a una clase de máquina virtual en vSphere with Tanzu.
- Las máquinas virtuales con dispositivos de vGPU requieren imágenes que tengan el modo de arranque establecido en EFI, como CentOS. Asegúrese de tener acceso a estas imágenes. Si desea información sobre imágenes compatibles, busque la imagen del servicio de máquina virtual en el sitio web VMware Cloud Marketplace.
- Las máquinas virtuales con dispositivos vGPU administradas por el servicio de máquina virtual se apagan automáticamente cuando un host ESXi entra en modo de mantenimiento. Esto puede afectar temporalmente a las cargas de trabajo que se ejecutan en las máquinas virtuales. Las máquinas virtuales se encienden automáticamente después de que el host sale del modo de mantenimiento.
Procedimiento
- Prepare el archivo YAML de la máquina virtual.
En el archivo, especifique los siguientes parámetros:
Opción |
Descripción |
apiVersion |
Especifica la versión de la API del servicio de máquina virtual. Por ejemplo, vmoperator.vmware.com/v1alpha1. |
kind |
Especifica el tipo de recurso de Kubernetes que se debe crear. El único valor disponible es VirtualMachine. |
spec.imageName |
Especifica la imagen de la biblioteca de contenido que debe utilizar la máquina virtual. Por ejemplo, centos-stream-8-vmservice-v1alpha1-xxxxxxxxxxxxx. |
spec.storageClass |
Identifica la clase de almacenamiento que se utilizará para el almacenamiento de los volúmenes persistentes. Por ejemplo, wcpglobal-storage-profile. |
spec.className |
Especifica el nombre de la clase de máquina virtual que describe la configuración de hardware virtual que se utilizará. Por ejemplo, custom. |
spec.networkInterfaces |
Especifica la configuración relacionada con la red para la máquina virtual.
|
spec.vmMetadata |
Incluye metadatos adicionales que se transferirán a la máquina virtual. Puede utilizar esta clave para personalizar la imagen del SO invitado y establecer estos elementos como el hostname de la máquina virtual y user-data, incluidas las contraseñas, las claves SSH, etc. El YAML de ejemplo siguiente utiliza ConfigMap para almacenar los metadatos. |
Utilice lo siguiente como ejemplo de un archivo 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 el blob de cloud-config que especifica el nombre de usuario y la contraseña del SO invitado. En este ejemplo,
user-data en vmsvc-centos-nginx-cm, ConfigMap representa el siguiente fragmento de código en 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
- Implemente la máquina virtual.
kubectl apply -f vmsvc-centos-vm.yaml
- Compruebe que se haya creado la máquina virtual.
kubectl get vm -n my-ns-centos
NAME AGE
vmsvc-centos-vm 28s
- Compruebe el estado de la máquina virtual y los eventos asociados.
kubectl describe virtualmachine vmsvc-centos-vm
Los resultados son similares al siguiente. De los resultados también puede obtener la dirección IP de la máquina virtual, que aparece en el 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>
...
- Compruebe que se pueda acceder a la IP de la máquina virtual.
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
Resultados
Una máquina virtual creada a través del servicio de máquina virtual solo puede administrarla desarrollo y operaciones desde el espacio de nombres de Kubernetes. Su ciclo de vida no puede administrarse desde
vSphere Client, pero los administradores de vSphere pueden supervisar la máquina virtual y sus recursos. Para obtener más información, consulte
Supervisar máquinas virtuales disponibles en vSphere with Tanzu.
Qué hacer a continuación
Para obtener más información, consulte el blog
Introducción al aprovisionamiento de máquinas virtuales.
Si la máquina virtual incluye un dispositivo PCI configurado para vGPU, instale el controlador de pantalla NVIDIA. Consulte Instalar el controlador invitado de NVIDIA en una máquina virtual en vSphere with Tanzu.