Como ingeniero de desarrollo y operaciones, utilice el comando kubectl para revisar los recursos de máquina virtual disponibles y aprovisionar una máquina virtual de Linux o Windows independiente en un espacio de nombres en un Supervisor. Si la máquina virtual incluye un dispositivo PCI configurado para vGPU, después de crear y arrancar la máquina virtual en el entorno de vSphere IaaS control plane, puede instalar el controlador de gráficos NVIDIA vGPU para habilitar las operaciones de GPU.

Requisitos previos

Para poder implementar una máquina virtual independiente en vSphere IaaS control plane, un ingeniero de desarrollo y operaciones debe tener acceso a recursos específicos de la máquina virtual. Asegúrese de que un administrador de vSphere haya realizado estos pasos para que los recursos de máquina virtual estén disponibles:

Si tiene pensado utilizar vGPU de NVIDIA u otros dispositivos PCI para las máquinas virtuales, debe cumplir con requisitos adicionales. Para obtener información, consulte Implementar una máquina virtual con Dispositivos PCI en vSphere IaaS control plane.

Para obtener información sobre el operador de máquina virtual y los campos compatibles, consulte Conceptos del servicio de máquina virtual y https://vm-operator.readthedocs.io/en/stable/ref/api/v1alpha2/.

Ver recursos de máquina virtual disponibles en un espacio de nombres en vSphere IaaS control plane

Como ingeniero de desarrollo y operaciones, compruebe que puede acceder a los recursos de máquinas virtuales en el espacio de nombres y ver las clases y las plantillas de máquina virtual disponibles en su entorno. También puede enumerar las clases de almacenamiento y otros elementos que podría necesitar para realizar el autoservicio de una máquina virtual.

Esta tarea abarca los comandos que se utilizan para acceder a los recursos disponibles para la implementación de una máquina virtual independiente. Para obtener información sobre los recursos necesarios para implementar Tanzu Kubernetes Grid clústeres y máquinas virtuales que conforman los clústeres, consulte Clases de máquinas virtuales para clústeres de TKG en la documentación de Uso del servicio TKG con el plano de control de IaaS de vSphere.

Procedimiento

  1. Acceda al espacio de nombres en el entorno de Kubernetes.
  2. Para ver las clases de máquina virtual disponibles en el espacio de nombres, ejecute el siguiente comando.
    kubectl get virtualmachineclass
    Es posible que se muestre el siguiente resultado.
    Nota: Debido a que el tipo de clase de máquina virtual de mejor esfuerzo permite que los recursos se sobreasignen, puede quedarse sin recursos si ha establecido límites en el espacio de nombres en el que está aprovisionando las máquinas virtuales. Por este motivo, utilice el tipo de clase de máquina virtual garantizada en el entorno de producción.
    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. Para ver los detalles de una clase de máquina virtual específica, ejecute los siguientes comandos.
    • kubectl describe virtualmachineclasses name_vm_class

      Si una clase de máquina virtual incluye un dispositivo vGPU, puede ver su perfil en spec: hardware: devices: vgpuDevices.

      ......
      spec:
        hardware:
          cpus: 4
          devices:
            vgpuDevices:
            - profileName: grid_v100-q4
      ......
      
    • kubectl get virtualmachineclasses -o wide

      Si la clase de máquina virtual incluye una vGPU o un directo de acceso directo, el resultado lo muestra en la columna VGPUDevicesProfileNames o PassthroughDeviceIDs.

  4. Ver las imágenes de máquina virtual.
    kubectl get virtualmachineimages​
    El resultado que ve es similar al siguiente. El nombre de la imagen, como vmi-xxxxxxxxxxxxx, es generado automáticamente por el sistema.
    NAME                                              VERSION  OSTYPE                FORMAT  IMAGESUPPORTED  AGE
    vmi-xxxxxxxxxxxxx                                          centos8_64Guest       ovf     true            4d3h
  5. Para describir una imagen específica, utilice el siguiente comando.
    kubectl describe virtualmachineimage vmi-xxxxxxxxxxxxx

    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.

  6. Compruebe si puede acceder a las clases de almacenamiento.
    kubectl get resourcequotas
    NAME                        AGE   REQUEST                                                                                         LIMIT
    my-ns-ubuntu-storagequota   24h   wcpglobal-storage-profile.storageclass.storage.k8s.io/requests.storage: 0/9223372036854775807

Implementar una máquina virtual en vSphere IaaS control plane

Como ingeniero de desarrollo y operaciones, aprovisione 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

Si utiliza vGPU de NVIDIA u otros dispositivos PCI para sus máquinas virtuales, consulte Implementar una máquina virtual con Dispositivos PCI en vSphere IaaS control plane.

Procedimiento

  1. 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/v1alpha2.
    kind Especifica el tipo de recurso de Kubernetes que se debe crear. El único valor disponible es VirtualMachine.
    spec.imageName Especifica el nombre del recurso de imagen de máquina virtual en el clúster de Kubernetes.
    spec.storageClass​ Especifica la clase de almacenamiento que se utilizará para el almacenamiento de los volúmenes persistentes.
    spec.className Especifica el nombre de la clase de máquina virtual que describe la configuración de hardware virtual que se utilizará.
    spec.networkInterfaces Especifica la configuración relacionada con la red para la máquina virtual.
    • networkType. Los valores para esta clave pueden ser nsx-t o vsphere-distributed.
    • networkName. Si es necesario, especifique el nombre o deje el nombre predeterminado.
    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.

    Para obtener más información, incluidos detalles sobre cómo arrancar y personalizar las máquinas virtuales de Windows mediante la herramienta de preparación del sistema de Microsoft (Sysprep), consulte Personalizar un invitado.

    topology.kubernetes.io/zone Controla la colocación de máquinas virtuales en un Supervisor de tres zonas. Por ejemplo, topology.kubernetes.io/zone: zone-a02.
    El siguiente ejemplo de archivo YAML de máquina virtual my-vm utiliza CloudInit como método de arranque. El ejemplo muestra un recurso de VirtualMachine que especifica los datos de usuario en un recurso secreto my-vm-bootstrap-data. El secreto se utilizará para arrancar y personalizar el sistema operativo invitado.

    Los datos del secreto incluyen cloud-config de CloudInit. Para obtener más información sobre el formato cloud-config, consulte los ejemplos de configuración de nube en la documentación oficial.

    Para ver ejemplos con Sysprep como método de arranque, consulte Sysprep.
    apiVersion: vmoperator.vmware.com/v1alpha2
    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.

    Utilice el siguiente ejemplo si va a implementar una máquina virtual en un entorno con zonas.

    Para obtener los valores para ZONE_NAME, ejecute el comando kubectl get vspherezones.

    apiVersion: vmoperator.vmware.com/v1alpha2
    kind: VirtualMachine
    metadata:
      name: <vm-name>
      namespace: <vm-ns>
      labels:
        topology.kubernetes.io/zone: ZONE_NAME
    ...
  2. Implemente la máquina virtual.
    kubectl apply -f my-vm.yaml
  3. Compruebe que se haya creado la máquina virtual.
    kubectl get vm
    NAME              AGE
    my-vm             28s
  4. Compruebe los detalles de la máquina virtual y su estado.
    kubectl describe virtualmachine my-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:         my-vm
    Namespace:    my-namespace
    API Version:  vmoperator.vmware.com/v1alpha2
    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. 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 IaaS control plane.

Qué hacer a continuación

Para obtener más información, consulte el blog Introducción al aprovisionamiento de máquinas virtuales.