Como engenheiro de DevOps, você pode provisionar uma VM e seu SO convidado de forma declarativa, gravando as especificações de implantação da VM em um arquivo YAML do Kubernetes.
Pré-requisitos
- Verifique se você tem recursos disponíveis para implantar uma VM no seu namespace. Consulte o Exibir recursos de VM disponíveis em um namespace no vSphere with Tanzu.
- Se você usar NVIDIA vGPU ou outros dispositivos PCI para suas VMs, as seguintes considerações se aplicam:
- Certifique-se de usar a classe de VM apropriada com a configuração de PCI. Consulte o Adicionar dispositivos PCI a uma classe de VM no vSphere with Tanzu.
- VMs com dispositivos vGPU exigem imagens que tenham o modo de inicialização definido como EFI, como CentOS. Certifique-se de ter acesso a essas imagens. Para obter informações sobre imagens compatíveis, procure por VM Service image no site VMware Cloud Marketplace .
- As VMs com dispositivos vGPU gerenciados pelo VM Service são desligadas automaticamente quando um host ESXi entra no modo de manutenção. Isso pode afetar temporariamente as cargas de trabalho em execução nas VMs. As VMs são ligadas automaticamente depois que o host entra no modo de manutenção.
Procedimento
- Prepare o arquivo YAML da VM.
No arquivo, especifique os seguintes parâmetros:
Opção |
Descrição |
apiVersão |
Especifica a versão da API do serviço de VM. Como vmoperator.vmware.com/v1alpha1 . |
tipo |
Especifica o tipo de recurso do Kubernetes a ser criado. O único valor disponível é VirtualMachine . |
spec.imageName |
Especifica a imagem da biblioteca de conteúdo que a VM deve usar. Por exemplo, centos-stream-8-vmservice-v1alpha1-xxxxxxxxxxxxx . |
spec.storageClass |
Identifica a classe de armazenamento a ser usada para armazenamento dos volumes persistentes. Por exemplo, wcpglobal-storage-profile . |
spec.className |
Especifica o nome da classe de VM que descreve as configurações de hardware virtual a serem usadas. Por exemplo, personalizado . |
spec.networkInterfaces |
Especifica as configurações relacionadas à rede para a VM.
|
spec.vmMetadata |
Inclui metadados adicionais para passar para a VM. Você pode usar essa chave para personalizar a imagem do sistema operacional convidado e definir itens como o hostname da VM e o user-data, incluindo senhas, chaves SSH e assim por diante. O exemplo de YAML abaixo usa ConfigMap para armazenar os metadados. |
Use o seguinte como um exemplo de um arquivo 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 contém o blob cloud-config que especifica o nome de usuário e a senha para o sistema operacional convidado. Neste exemplo,
user-data em vmsvc-centos-nginx-cm ConfigMap representa o seguinte trecho no 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
- Implante a VM.
kubectl apply -f vmsvc-centos-vm.yaml
- Verifique se a VM foi criada.
kubectl get vm -n my-ns-centos
NAME AGE
vmsvc-centos-vm 28s
- Verifique o status da VM e dos eventos associados.
kubectl describe virtualmachine vmsvc-centos-vm
A saída é semelhante à seguinte. Na saída, você também pode obter o endereço IP da VM, que aparece no 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>
...
- Verifique se o IP da VM está acessível.
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
Uma VM criada por meio do Serviço de VM pode ser gerenciada apenas pelo DevOps do namespace do Kubernetes. Seu ciclo de vida não pode ser gerenciado a partir do
vSphere Client, mas os administradores do vSphere podem monitorar a VM e seus recursos. Para obter mais informações, consulte
Monitoramento de máquinas virtuais disponíveis em vSphere with Tanzu.
O que Fazer Depois
Para obter detalhes adicionais, consulte o blog
Introducing Virtual Machine Provisioning .
Se a VM incluir um dispositivo PCI configurado para vGPU, instale o driver de vídeo NVIDIA. Consulte o Instale o driver convidado NVIDIA em uma VM no vSphere with Tanzu.