Habilitar o inhabilitar el entorno de ejecución de máquinas virtuales en GDC

En este documento se explica cómo habilitar o inhabilitar VM Runtime en Google Distributed Cloud actualizando el recurso personalizado VMRuntime o ejecutando comandos bmctl.

Antes de empezar

Para habilitar o inhabilitar el entorno de ejecución de máquinas virtuales en GDC, necesitas acceder a los siguientes recursos y herramientas:

Habilitar el entorno de ejecución de máquinas virtuales en GDC

VM Runtime en GDC se instala automáticamente en Google Distributed Cloud 1.10 o versiones posteriores, pero está inhabilitado de forma predeterminada. Para poder ejecutar recursos de VM en Google Distributed Cloud, debes habilitar el tiempo de ejecución de VM en GDC.

bmctl

  • Para habilitar el tiempo de ejecución, usa la herramienta bmctl:

    bmctl enable vmruntime --kubeconfig KUBECONFIG_PATH
    

    Proporciona la ruta al archivo kubeconfig de tu clúster. Google Distributed Cloud genera el archivo kubeconfig en la estación de trabajo de administrador cuando creas un clúster. De forma predeterminada, la ruta es bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig.

    Si el tiempo de ejecución de máquinas virtuales en GDC ya está habilitado, el comando devuelve un error.

Se pueden configurar ajustes adicionales, como la emulación o el formato de imagen, editando el recurso personalizado VMRuntime.

Recurso personalizado

Para habilitar el entorno de ejecución, actualiza el recurso personalizado VMRuntime. Este recurso personalizado se instala de forma predeterminada.

  1. Edita el recurso personalizado VMRuntime:

    kubectl edit vmruntime
    
  2. Define enabled:true en la especificación:

    apiVersion: vm.cluster.gke.io/v1
    kind: VMRuntime
    metadata:
      name: vmruntime
    spec:
      enabled: true
      # useEmulation defaults to "false" if not set.
      useEmulation: true
      # vmImageFormat defaults to "qcow2" if not set.
      vmImageFormat: qcow2
    

    En la sección spec anterior, se pueden definir los siguientes valores:

    • enabled: se define como true para habilitar el tiempo de ejecución de máquinas virtuales en GDC
    • useEmulation: si tu nodo no admite la virtualización de hardware o no lo tienes claro, asigna el valor true. Si está disponible, la virtualización de hardware ofrece un mejor rendimiento que la emulación de software. Si no se especifica, el campo useEmulation tiene el valor predeterminado false.
    • vmImageFormat: admite dos valores de formato de imagen de disco: raw y qcow2. Si no defines vmImageFormat, el tiempo de ejecución de VM en GDC usa el formato de imagen de disco raw para crear VMs. El formato raw puede ofrecer un mejor rendimiento que qcow2, un formato de copia en escritura, pero puede usar más espacio en disco. Para obtener más información sobre los formatos de imagen de tu VM, consulta Formatos de archivo de imagen de disco en la documentación de QEMU.
  3. Guarda el recurso personalizado en tu editor.

  4. Verifica que el recurso personalizado VMRuntime esté habilitado:

    kubectl describe vmruntime vmruntime
    

    Los detalles del recurso personalizado VMRuntime incluyen una sección Status. El entorno de ejecución de máquinas virtuales de GDC está habilitado y funciona cuando VMRuntime.Status.Ready se muestra como true.

Inhabilitar el tiempo de ejecución de máquinas virtuales en GDC

Cuando ya no necesites usar VM Runtime en GDC, puedes inhabilitar esta función.

bmctl

  • Para inhabilitar el tiempo de ejecución, usa la herramienta bmctl:

    bmctl disable vmruntime --kubeconfig KUBECONFIG_PATH \
      --force=true
    

    Proporciona la ruta al archivo kubeconfig de tu clúster y los valores de las siguientes opciones de configuración:

    • --force: debe tener el valor true para confirmar que quieres eliminar los recursos de la máquina virtual. El valor predeterminado es false.

Recurso personalizado

Para inhabilitar el tiempo de ejecución, actualiza el recurso personalizado VMRuntime:

  1. Edita el recurso personalizado VMRuntime:

    kubectl edit vmruntime
    
  2. Define enabled:false en la especificación:

    apiVersion: vm.cluster.gke.io/v1`
    kind: VMRuntime
    metadata:
      name: vmruntime
    spec:
      enabled: false
      useEmulation: true
      vmImageFormat: qcow2
    
  3. Guarda la especificación de recursos personalizados actualizada en tu editor.

  4. Para verificar que el recurso personalizado VMRuntime está inhabilitado, consulta los pods que se ejecutan en el espacio de nombres vm-system:

    kubectl get pods --namespace vm-system
    

    El tiempo de ejecución de VM en GDC se inhabilita cuando solo se ejecutan en el espacio de nombres los pods que pertenecen a la implementación vmruntime-controller-manager.

Entender el comportamiento de las VMs en ejecución

La anotación baremetal.cluster.gke.io/vmrumtime-force-disable se puede usar en el tiempo de ejecución de la máquina virtual en el recurso de GDC para definir el comportamiento cuando el tiempo de ejecución está inhabilitado mientras las máquinas virtuales se ejecutan en el clúster.

En el siguiente ejemplo se muestra que el valor de esta anotación es false de forma predeterminada:

// VM runtime yaml file
apiVersion: vm.cluster.gke.io/v1
kind: VMRuntime
metadata:
  annotations:
    baremetal.cluster.gke.io/vmrumtime-force-disable: "false"
  name: vmruntime
[...]

Si esta anotación se define como false, VM Runtime en GDC intenta proteger las VMs en ejecución. Elimina todas las máquinas virtuales en ejecución antes de que se inhabilite el tiempo de ejecución de las máquinas virtuales en GDC o especifica el parámetro --force=true con el comando bmctl disable vmruntime, tal como se muestra en la sección anterior.

En la siguiente tabla se explica qué ocurre con las VMs en ejecución cuando se asigna el valor true o false a esta anotación y si se especifica el parámetro --force=true o no:

Estado del clúster Parámetro --force Anotación vmrumtime-force-disable Comportamiento
No hay ninguna VM N/A N/A Inhabilita el entorno de ejecución de máquinas virtuales en GDC.
Máquinas virtuales Verdadero Verdadero Elimina todas las máquinas virtuales en ejecución y los recursos relacionados. Inhabilita el entorno de ejecución de máquinas virtuales en GDC.
Verdadero Falso Elimina todas las máquinas virtuales en ejecución y los recursos relacionados. Inhabilita el entorno de ejecución de máquinas virtuales en GDC.
Falso Verdadero Se te pedirá que elimines las VMs en ejecución y los recursos relacionados. Cuando se hayan eliminado todas las VMs en ejecución, inhabilita el entorno de ejecución de VMs en GDC.
Falso Falso No elimines ninguna máquina virtual que esté en ejecución. No inhabilite el entorno de ejecución de máquinas virtuales en GDC. El comando bmctl devuelve un error.

Comprobación preparatoria del entorno de ejecución de máquinas virtuales en GDC

La comprobación previa del tiempo de ejecución de máquinas virtuales en GDC valida un conjunto de requisitos previos en el entorno de la máquina antes de usar el tiempo de ejecución de máquinas virtuales en GDC y las máquinas virtuales. La creación de la VM se bloquea si falla la comprobación preliminar del tiempo de ejecución de la VM en GDC. La comprobación previa de VM Runtime en GDC se ejecuta automáticamente cuando spec.enabled se define como true.

kubectl label nodes NODE_NAME "kubevm.io/VM-SkipSchedule"= --kubeconfig KUBECONFIG_PATH

La comprobación preparatoria del tiempo de ejecución de máquinas virtuales en GDC se ejecuta cuando realizas cualquiera de las siguientes operaciones:

  1. Habilitar el entorno de ejecución de máquinas virtuales en GDC

  2. Habilitar el tiempo de ejecución de máquinas virtuales en funciones de GDC, como useEmulation

  3. Actualizar clústeres

  4. Quitar la etiqueta kubevm.io/VM-SkipSchedule de los nodos

  5. Crea de forma independiente el objeto de comprobación previa de VM Runtime en GDC ejecutando el comando bmctl check vmruntimepfc --kubeconfig KUBECONFIG_PATH o aplicando un manifiesto YAML VMRuntimePreflightCheck.

Puedes iniciar las VMs cuando se complete la comprobación previa del entorno de ejecución de VMs más reciente en GDC. Si la comprobación previa falla, se bloqueará la creación de la VM y se mostrarán errores de comprobación previa.

Verificar que las comprobaciones preparatorias se han realizado correctamente

Para verificar si las comprobaciones previas se han realizado correctamente, ejecuta los siguientes comandos:

  1. Para ver las últimas comprobaciones preparatorias realizadas, sigue estos pasos:

    kubectl get vmruntimepfc -n vm-system --kubeconfig KUBECONFIG_PATH
    

    La salida debería tener el siguiente aspecto:

    NAME                                                             PASS    AGE
    vmruntime-preflight-check-6ee61513-ea5d-4340-9374-90396cac129e   false   42s
    vmruntime-preflight-check-f8d71751-a01c-471e-bab5-3370fc2addd5   true    21s
    
  2. Para consultar el estado de una comprobación previa, ejecuta el siguiente comando:

    kubectl get vmruntime vmruntime -o yaml --kubeconfig KUBECONFIG_PATH
    
    ...
      preflightCheckSummary:
      preflightCheckSummary:
        featureStatuses:
          CPU:
            passed: true
          KVM:
            passed: true
        preflightCheckName: vmruntime-preflight-check-f8d71751-a01c-471e-bab5-3370fc2addd5
        preflightCheckPassed: true
    ...
    

Depurar errores de comprobación preparatoria

Si la comprobación previa falla, sigue estos pasos para depurar:

  1. Buscar las últimas comprobaciones preparatorias realizadas.

    kubectl get vmruntimepfc -n vm-system
    
  2. Consulta el estado de esa comprobación de solicitudes preparatorias para obtener más información.

    kubectl get vmruntimepfc -n vm-system \
        vmruntime-preflight-check-6ee61513-ea5d-4340-9374-90396cac129e -o yaml \
        --kubeconfig KUBECONFIG_PATH
    
    ...
    status:
    checks:
      worker-0--52229ee15841099-22c41577139a7b8c.lab.anthos:
        passed: false
        results:
        - checkName: CPU
          passed: true
        - checkName: KVM
          message: |
            command terminated with exit code 1
            ls: /mnt/dev/kvm: No such file or directory
          passed: false
    ...
    
  3. Soluciona el problema y vuelve a ejecutar la comprobación previa del tiempo de ejecución de máquinas virtuales en GDC. A continuación, se muestra un ejemplo de manifiesto YAML de VMRuntimePreflightCheck:

    apiVersion: vm.cluster.gke.io/v1
    kind: VMRuntimePreflightCheck
    metadata:
      name: vmruntime-preflight-check-manual
      namespace: vm-system
    

Siguientes pasos