Como ingeniero de desarrollo y operaciones, puede revisar los recursos de máquina virtual disponibles y aprovisionar una máquina virtual independiente en un espacio de nombres en un Supervisor. Use el comando kubectl para llevar a cabo las siguientes tareas.

Requisitos previos

Para poder implementar una máquina virtual independiente en vSphere with Tanzu, 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:

Ver recursos de máquina virtual disponibles en un espacio de nombres en vSphere with Tanzu

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 Usar Tanzu Kubernetes Grid 2 con vSphere with Tanzu .

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 virtualmachineclassbindings
    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.
    NAME                                              VERSION  OSTYPE                FORMAT  IMAGESUPPORTED  AGE
    centos-stream-8-vmservice-v1alpha1-xxxxxxxxxxxxx           centos8_64Guest       ovf     true            4d3h
  5. Para describir una imagen específica, utilice el siguiente comando.
    kubectl describe virtualmachineimage/centos-stream-8-vmservice-v1alpha1-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
  7. Si utiliza vSphere Distributed Switch para las redes de carga de trabajo, obtenga el nombre de la red.
    Nota: Utilice esta información para especificar el parámetro networkName en el archivo YAML de la máquina virtual cuando networkType sea vsphere-distributed. No es necesario obtener ni especificar el nombre de red si utiliza VMware NSX.
    kubectl get network
    NAME      AGE
    primary   7d2h

Implementar una máquina virtual en vSphere with Tanzu

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, 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.
  • 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

  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/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.
    spec.storageClass​ Identifica 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. Especifique el nombre solo si networkType es vsphere-distributed. Puede obtener esta información mediante el comando kubectl get network.

      Si networkType es nsx-t, no es necesario que indique networkName.

    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.
    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.
    Utilice lo siguiente como ejemplo de un archivo YAML ubuntu-impish-vm.yaml.
    apiVersion: vmoperator.vmware.com/v1alpha1
    kind: VirtualMachine
    metadata:
      name: ubuntu-impish-vm
      namespace: sr-1
      annotations:
        vmoperator.vmware.com/image-supported-check: disable
    spec:
      networkInterfaces:
      - networkName: ""
        networkType: nsx-t
      className: best-effort-medium
      imageName: ubuntu-impish-21.10-cloudimg 
      powerState: poweredOn
      storageClass: vsan-default-storage-policy
      vmMetadata:
        configMapName: user-data-2
        transport: CloudInit
    ---
    apiVersion: v1
    kind: ConfigMap
    metadata:
        name: user-data-2
        namespace: sr-1
    data:
      user-data: |
        #cloud-config
        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
    ConfigMap contiene el blob de cloud-config que especifica el nombre de usuario y la contraseña del SO invitado.
    Para obtener más información sobre las especificaciones de cloud-config, consulte https://cloudinit.readthedocs.io/en/latest/topics/examples.html.
  2. Implemente la máquina virtual.
    kubectl apply -f ubuntu-impish-vm.yaml
  3. Compruebe que se haya creado la máquina virtual.
    kubectl get vm -n ubuntu-impish-vm
    NAME              AGE
    ubuntu-impish-vm  28s
  4. Compruebe el estado de la máquina virtual y los eventos asociados.
    kubectl describe virtualmachine ubuntu-impish-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:         ubuntu-impish-vm
    Namespace:    sr-1
    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:  best-effort-medium
      Image Name:  ubuntu-impish-21.10-cloudimg
      Network Interfaces:
        Network Name:  ""
        Network Type:  nsx-t
      Power State:     poweredOn
      Storage Class:   vsan-default-storage-policy
      Vm Metadata:
        Config Map Name:  user-data-2
        Transport:        CloudInit
    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 with Tanzu.

Qué hacer a continuación

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

Instalar el controlador invitado de NVIDIA en una máquina virtual en vSphere with Tanzu

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 with Tanzu, instale el controlador de gráficos NVIDIA vGPU para habilitar completamente las operaciones de GPU.

Requisitos previos

  • Asegúrese de que la máquina virtual que creó haga referencia a la clase de máquina virtual con la definición de vGPU. Consulte Agregar dispositivos PCI a una clase de máquina virtual en vSphere with Tanzu.
  • Compruebe que descargó el paquete de software de vGPU del sitio de descargas de NVIDIA, descomprimió el paquete y tiene listo el componente de la unidad de invitado. Para obtener información, consulte la documentación correspondiente del software de GPU virtual de NVIDIA.
    Nota: La versión del componente del controlador debe corresponder a la versión de vGPU Manager que un administrador de vSphere instaló en el host ESXi.

Procedimiento

  1. Copie el paquete de controladores Linux del software de NVIDIA vGPU, por ejemplo, NVIDIA-Linux-x86_64- versión -grid.run, en la máquina virtual invitada.
  2. Antes de intentar ejecutar el instalador del controlador, finalice todas las aplicaciones.
  3. Inicie el instalador del controlador NVIDIA vGPU.
    sudo ./NVIDIA-Linux-x86_64-version-grid.run
  4. Acepte el acuerdo de licencia de software de NVIDIA y seleccione para actualizar automáticamente los ajustes de configuración de X.
  5. Compruebe que se haya instalado el controlador.
    Por ejemplo:
    ~$ nvidia-smi
    Wed May 19 22:15:04 2021
    +-----------------------------------------------------------------------------+
    | NVIDIA-SMI 460.63       Driver Version: 460.63       CUDA Version: 11.2     |
    |-------------------------------+----------------------+----------------------+
    | GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
    | Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
    |                               |                      |               MIG M. |
    |===============================+======================+======================|
    |   0  GRID V100-4Q        On   | 00000000:02:00.0 Off |                  N/A|
    | N/AN/AP0    N/A/  N/A|    304MiB /  4096MiB |      0%      Default |
    |                               |                      |                  N/A|
    +-------------------------------+----------------------+----------------------+
    
    +-----------------------------------------------------------------------------+
    | Processes:                                                                  |
    |  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
    |        ID   ID                                                   Usage      |
    |=============================================================================|
    |  No running processes found                                                 |
    +-----------------------------------------------------------------------------+