Editar la configuración de una VM en el tiempo de ejecución de VMs de GDC

Este documento está dirigido a los propietarios de aplicaciones que usan VM Runtime en GDC para ejecutar máquinas virtuales en clústeres creados con Google Distributed Cloud (solo software) en hardware desnudo. En este documento se explica cómo editar las máquinas virtuales que se ejecutan en clústeres de hardware desnudo. Por ejemplo, puedes editar la asignación de recursos, como la CPU y la memoria, o cambiar la red a la que se conecta una máquina virtual.

Puede modificar cualquier campo de la sección spec de un recurso VirtualMachine. También puedes editar las etiquetas de una máquina virtual. Otros campos, como el nombre de la VM (metadata.name), no se pueden editar. De forma predeterminada, tu VM debe estar en un estado Stopped antes de que edites el recurso. Sin embargo, a partir de la versión 1.13.0 de Google Distributed Cloud, puedes configurar tu VirtualMachine recurso para que se reinicie automáticamente cada vez que cambies la configuración.

Si las modificaciones que has hecho en el recurso VirtualMachine contienen errores al guardarlas, los cambios se rechazarán y verás una notificación. Corrige los errores e intenta guardar el recurso VirtualMachine de nuevo. Si tu VM no se inicia después de hacer cambios, usa el comando kubectl describe gvm VM_NAME para ver información sobre cómo solucionar problemas y corregir los errores.

Antes de empezar

Para completar este documento, necesitas tener acceso a los siguientes recursos:

Editar recursos de computación

Si cambian las demandas de tu carga de trabajo de computación, puedes actualizar el número de CPUs virtuales y la cantidad de memoria virtual que asignes a tus máquinas virtuales. Para editar tus cargas de trabajo de computación, sigue estos pasos:

  1. Detén la VM que quieras editar:

    kubectl virt stop VM_NAME
    

    Sustituye VM_NAME por el nombre de la VM que quieras detener.

  2. Usa kubectl para editar la VM:

    kubectl edit gvm VM_NAME
    

    Sustituye VM_NAME por el nombre de la máquina virtual que quieras editar.

  3. En el editor, actualice los valores de los recursos de computación que quiera cambiar.

    Por ejemplo, el siguiente manifiesto de VirtualMachine muestra que el recurso de VM tiene asignadas 2 vCPUs:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      name: vm1
    spec:
      ...
      compute:
        cpu:
          vcpus: 2
    ...
    

    Si quiere actualizar el número de vCPUs asignadas, cambie el valor en su editor, tal como se muestra en el siguiente ejemplo:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      name: vm1
    spec:
      ...
      compute:
        cpu:
          vcpus: 4
    ...
    
  4. Guarda y cierra el manifiesto de la VM.

  5. Inicia la VM que has editado:

    kubectl virt start VM_NAME
    

    Sustituye VM_NAME por el nombre de la VM que has editado.

  6. Comprueba el STATUS de tu VM:

    kubectl get gvm VM_NAME
    

    Asegúrate de que tu VM esté en estado Running. Si tu VM solicita más recursos de computación de los que puede proporcionar el host, no podrá iniciarse. Si la VM no está en estado Running, comprueba el manifiesto de recursos VirtualMachine y la disponibilidad de recursos de computación en el host.

    En el siguiente ejemplo de salida se muestra la máquina virtual en estado Running:

    NAME   STATUS    AGE   IP
    vm1    Running   1m    192.168.2.72
    
  7. Para ver información detallada sobre una VM con kubectl describe gvm, sigue estos pasos:

    kubectl describe gvm VM_NAME
    

    Sustituye VM_NAME por el nombre de la VM que has editado.

    En el siguiente ejemplo de salida se muestra la información resumida de una VM, con un cambio en el número de vCPUs aplicado correctamente:

    Name:         vm1
    Namespace:    default
    Labels:       <none>
    Annotations:  <none>
    API Version:  vm.cluster.gke.io/v1
    Kind:         VirtualMachine
    ...
    Spec:
      Compute:
        Cpu:
          Vcpus:  4
    ...
    

Para obtener más información, consulta cómo crear VMs con configuraciones de cálculo de vCPU y memoria específicas.

Editar recursos de disco

Si cambian tus requisitos de almacenamiento, puedes añadir o quitar discos virtuales de una máquina virtual. Para editar los discos conectados a tu VM, sigue estos pasos:

  1. Detén la VM que quieras editar:

    kubectl virt stop VM_NAME
    

    Sustituye VM_NAME por el nombre de la VM que quieras detener.

  2. Usa kubectl para editar la VM:

    kubectl edit gvm VM_NAME
    

    Sustituye VM_NAME por el nombre de la máquina virtual que quieras editar.

  3. En el editor, actualiza la sección spec.disks para adjuntar o separar discos.

    Por ejemplo, el siguiente manifiesto de VirtualMachine muestra que solo hay un disco de arranque conectado a la VM:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      name: vm1
    spec:
      ...
      disks:
        - boot: true
          virtualMachineDiskName: vm1-boot-dv
      ...
    

    Si quieres añadir un disco vacío que ya tengas, actualiza la configuración del disco en tu editor, como se muestra en el siguiente ejemplo:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      name: vm1
    spec:
      ...
      disks:
        - boot: true
          virtualMachineDiskName: vm1-boot-dv
        - virtualMachineDiskName: DISK_NAME
      ...
    

    Sustituye DISK_NAME por el nombre del disco que quieras adjuntar.

  4. Guarda y cierra el manifiesto de la VM.

  5. Inicia la VM que has editado:

    kubectl virt start VM_NAME
    

    Sustituye VM_NAME por el nombre de la VM que has editado.

  6. Comprueba el STATUS de tu VM:

    kubectl get gvm VM_NAME
    

    Asegúrate de que tu VM esté en estado Running. Si tu máquina virtual solicita una StorageClass o una asignación de disco que el host no puede proporcionar, tu máquina virtual no podrá iniciarse. Si la VM no está en estado Running, comprueba los manifiestos de recursos VirtualMachine y VirtualMachineDisk, así como la compatibilidad con el almacenamiento del host.

  7. Para ver información detallada sobre una VM con kubectl describe gvm, sigue estos pasos:

    kubectl describe gvm VM_NAME
    

    Sustituye VM_NAME por el nombre de la VM que has editado.

    El siguiente ejemplo de salida muestra la información condensada de una VM, con un cambio aplicado correctamente a los discos conectados:

    Name:         vm1
    Namespace:    default
    Labels:       <none>
    Annotations:  <none>
    API Version:  vm.cluster.gke.io/v1
    Kind:         VirtualMachine
    ...
    Spec:
      Disks:
        Name:  vm1-boot-dv
        Name:  data-disk-01
    ...
    

Para obtener más información, consulta cómo crear y gestionar discos.

Editar recursos de red

A medida que cambia tu infraestructura, es posible que quieras modificar la configuración de red de una máquina virtual. Por ejemplo, puede que quieras conectar la VM a otra red virtual o asignar manualmente una dirección IP. Para editar la configuración de red de una máquina virtual, sigue estos pasos:

  1. Detén la VM que quieras editar:

    kubectl virt stop VM_NAME
    

    Sustituye VM_NAME por el nombre de la VM que quieras detener.

  2. Usa kubectl para editar la VM:

    kubectl edit gvm VM_NAME
    

    Sustituye VM_NAME por el nombre de la VM que quieras editar.

  3. En el editor, actualice la configuración de red que quiera cambiar.

    Por ejemplo, el siguiente manifiesto de VirtualMachine muestra que la VM se conecta a una red llamada backend-vlan100 y usa DHCP, ya que no se ha definido ninguna dirección IP:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      name: vm1
    spec:
      ...
      interfaces:
        - name: eth0
          networkName: backend-vlan100
          default: true
    ...
    

    Si quieres cambiar la red a la que se conecta la VM o asignar una dirección IP manual, actualiza la configuración de la red en tu editor, como se muestra en el siguiente ejemplo:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      name: vm1
    spec:
      ...
      interfaces:
        - name: eth0
          networkName: NETWORK_NAME
            ipAddresses:
              - IP_ADDRESS
          default: true
    ...
    

    Sustituye NETWORK_NAME por el nombre de la red a la que quieras conectarte o añade la sección ipAddresses y especifica la IP_ADDRESS que debe usar tu VM.

  4. Guarda y cierra el manifiesto de la VM.

  5. Inicia la VM que has editado:

    kubectl virt start VM_NAME
    

    Sustituye VM_NAME por el nombre de la VM que has editado.

  6. Comprueba el STATUS de tu VM:

    kubectl get gvm VM_NAME
    

    Asegúrate de que tu VM esté en estado Running. Si tu máquina virtual solicita una conexión de red que el host no puede proporcionar, no podrá iniciarse. Si la máquina virtual no está en estado Running, comprueba el manifiesto de recursos VirtualMachine y la compatibilidad de la red del host.

  7. Para ver información detallada sobre una VM con kubectl describe gvm, sigue estos pasos:

    kubectl describe gvm VM_NAME
    

    Sustituye VM_NAME por el nombre de la VM que has editado.

    En el siguiente ejemplo de salida se muestra la información resumida de una máquina virtual, con un cambio en la configuración de la red y la dirección IP que se ha aplicado correctamente:

    Name:         vm1
    Namespace:    default
    Labels:       <none>
    Annotations:  <none>
    API Version:  vm.cluster.gke.io/v1
    Kind:         VirtualMachine
    ...
    Spec:
      Compute:
      Interfaces:
        Name:          eth0
        Network Name:  backend-vlan200
    ...
    Status:
      ...
      Interfaces:
        Dns Config:
          Nameservers:
            8.8.8.8
        gateway4:  10.200.0.9
        Ip Addresses:
          10.200.0.22/24
        Mac Address:    22:b4:e3:d2:ef:fb
        Name:           eth0
        Resource Name:  vm1-eth0-f2468
    ...
    

Para obtener más información, consulta cómo crear y gestionar redes virtuales.

Configurar una máquina virtual para que se reinicie automáticamente

Para aplicar muchos cambios en la configuración de las VMs, como los cambios en los ajustes de compute, es necesario detener y reiniciar la VM para que los cambios se sincronicen con la instancia de VM correspondiente (VirtualMachineInstance). Las VMs que se ejecutan en clústeres de la versión 1.13.0 o posterior se pueden configurar para que se reinicien automáticamente cada vez que hagas cambios en su configuración. Cuando configuras una VM para que use esta función, no tienes que detenerla y reiniciarla cuando editas su recurso personalizado. El entorno de ejecución de máquinas virtuales de GDC monitoriza la máquina virtual y, si detecta un cambio en la configuración, reinicia la máquina virtual automáticamente para sincronizar los cambios.

Si usas Config Sync para gestionar tus archivos de configuración YAML, esta función te resultará especialmente útil. Sin esta función, debes detener la VM manualmente antes de hacer cambios en el recurso personalizado VirtualMachine y volver a iniciarla manualmente cuando hayas terminado.

Para habilitar los reinicios automáticos, sigue estos pasos:

  1. Usa kubectl para editar la VM:

    kubectl edit gvm VM_NAME
    
  2. En el editor, añade el campo autoRestartOnConfigurationChange y asigna el valor true.

    Puedes hacer cambios adicionales en tu VM, como actualizar el vcpus valor. Si editas la configuración de compute, VM Runtime en GDC reinicia tu VM automáticamente cuando guardas los cambios.

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      ...
      name: vm-sample-01
      namespace: default
      resourceVersion: "16711824"
      uid: ed623879-0cfa-52de-ad2c-b63308e6116c
    spec:
      autoRestartOnConfigurationChange: true
      compute:
        cpu:
          vcpus: 2
          ...
    
  3. Guarda y cierra el manifiesto de la VM.

    Si has hecho otros cambios en la VM que deben sincronizarse con la instancia de VM correspondiente, VM Runtime en GDC reinicia la VM. Si solo has habilitado los reinicios automáticos, no es necesario reiniciar la máquina virtual.

  4. Comprueba el status de tu VM:

    kubectl get gvm VM_NAME
    

    En función de la rapidez con la que obtengas la VM, es posible que veas state: Starting cuando se reinicie la VM. Cuando la VM se haya reiniciado correctamente, verás state: Running. Los cambios de configuración posteriores en el recurso personalizado VirtualMachine no requieren que detengas e inicies la VM manualmente. Los cambios posteriores en el recurso personalizado se reflejan de forma coherente en la instancia de VM.

Ten en cuenta el siguiente comportamiento de la función contextual:

  • Si detienes una VM manualmente antes de editar el recurso personalizado VirtualMachine, el cambio de configuración no activará un reinicio. El estado detenido de la VM antes de que se conserve el cambio de configuración.

  • Si ha hecho cambios en las etiquetas o en la programación de la máquina virtual antes de habilitar la función de reinicio automático, al añadir autoRestartOnConfigurationChange ahora sin hacer ningún otro cambio, no se activará el reinicio. Lo ideal es que esta función mantenga la coherencia entre la instancia de VM y la configuración de VM. Sin embargo, el tiempo de ejecución de máquinas virtuales en GDC no puede detectar inconsistencias anteriores.

Siguientes pasos