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 with Tanzu, 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 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. 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
  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 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. 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, puede indicar networkName, pero no es necesario que lo haga.

    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/v1alpha1
    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/v1alpha1
    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 -n my-vm.yaml
    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/v1alpha1
    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 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                                                 |
    +-----------------------------------------------------------------------------+