Habilita o inhabilita el entorno de ejecución de VM en Google Distributed Cloud

En este documento, se muestra cómo habilitar o inhabilitar el entorno de ejecución de VM en Google Distributed Cloud mediante la actualización del recurso personalizado VMRuntime o la ejecución de los comandos bmctl.

Antes de comenzar

Para habilitar o inhabilitar el entorno de ejecución de VM en Google Distributed Cloud, necesitas acceso a los siguientes recursos y herramientas:

Habilita el entorno de ejecución de VM en Google Distributed Cloud

El entorno de ejecución de VM en Google Distributed Cloud se instala de manera automática en GKE en Bare Metal versión 1.10 o superior, pero está inhabilitado de forma predeterminada. Antes de ejecutar los recursos de VM en GKE en Bare Metal, debes habilitar el entorno de ejecución de VM en Google Distributed Cloud.

bmctl

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

    bmctl enable vmruntime --kubeconfig KUBECONFIG_PATH
    

    Proporciona la ruta de acceso al archivo kubeconfig del clúster. GKE en Bare Metal genera el archivo kubeconfig en la estación de trabajo de administrador cuando creas un clúster. De forma predeterminada, la ruta de acceso es bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig.

    Si el entorno de ejecución de VM en Google Distributed Cloud ya está habilitado, el comando mostrará un error.

Puedes editar ajustes adicionales en el recurso VMRuntime, como la emulación o el formato de imagen.

Recurso personalizado

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

  1. Edita el recurso personalizado VMRuntime:

    kubectl edit vmruntime
    
  2. Establece 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 establecer los siguientes valores:

    • enabled: Se establece como verdadero para habilitar el entorno de ejecución de VM en Google Distributed Cloud.
    • useEmulation: Si tu nodo no admite la virtualización de hardware, o no estás seguro, establece el valor en verdadero. Si está disponible, la virtualización de hardware proporciona un mejor rendimiento que la emulación de software. El campo useEmulation se configura de forma predeterminada en false, si no se especifica.
    • vmImageFormat: Admite dos valores de formato de imagen de disco: raw y qcow2. Si no configuras vmImageFormat, el entorno de ejecución de VM en Google Distributed Cloud usa el formato de imagen de disco raw para crear las VM. El formato raw puede proporcionar un rendimiento mejorado sobre qcow2, una copia en formato de escritura, pero puede usar más capacidad de disco. Si deseas obtener más información sobre los formatos de imagen para 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
    

    En los detalles del recurso personalizado VMRuntime, se incluye una sección Status. El entorno de ejecución de VM en Google Distributed Cloud está habilitado y funciona cuando VMRuntime.Status.Ready se muestra como true.

Inhabilitar el entorno de ejecución de VM en Google Distributed Cloud

Cuando ya no necesites usar el entorno de ejecución de VM en Google Distributed Cloud, puedes inhabilitar esta función.

bmctl

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

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

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

    • --force: se establece en true para confirmar que deseas borrar los recursos de VM existentes. El valor predeterminado es false.

Recurso personalizado

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

  1. Edita el recurso personalizado VMRuntime:

    kubectl edit vmruntime
    
  2. Establece 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 entorno de ejecución de VM en Google Distributed Cloud se inhabilita cuando solo los Pods que pertenecen a la implementación de vmruntime-controller-manager se ejecutan en el espacio de nombres.

Comprende el comportamiento de las VM en ejecución

La anotación baremetal.cluster.gke.io/vmrumtime-force-disable se puede usar en el entorno de ejecución de VM en el recurso de Google Distributed Cloud para definir el comportamiento cuando el entorno de ejecución está inhabilitado mientras las VM se ejecutan en el clúster.

En el siguiente ejemplo, se muestra que el valor de esta anotación se establece en 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
  [...]

Cuando esta anotación se establece en false, el entorno de ejecución de VM en Google Distributed Cloud intenta proteger las VMs en ejecución. Borra todas las VM en ejecución antes de que se inhabilite el entorno de ejecución de VM en Google Distributed Cloud o especifica el parámetro --force=true con el comando bmctl disable vmruntime como se muestra en la sección anterior.

En la siguiente tabla, se explica qué sucede con la ejecución de VM cuando esta anotación se establece en true o false y si se especifica el parámetro --force=true o no:

Estado del clúster Parámetro --force anotación vmruntime-force-disable Comportamiento
No hay VM No disponible No disponible Inhabilitar el entorno de ejecución de VM en Google Distributed Cloud
VM existentes Verdadero Verdadero Borra todas las VM en ejecución y los recursos relacionados. Inhabilita el entorno de ejecución de VM en Google Distributed Cloud.
Verdadero Falso Borra todas las VM en ejecución y los recursos relacionados. Inhabilita el entorno de ejecución de VM en Google Distributed Cloud.
Falso Verdadero Solicitud para borrar VMs en ejecución y recursos relacionados. Cuando se hayan borrado todas las VMs en ejecución, inhabilita el entorno de ejecución de VM en Google Distributed Cloud.
Falso Falso No borres las VM existentes que se estén ejecutando. No inhabilites el entorno de ejecución de VM en Google Distributed Cloud. El comando bmctl muestra un error.

Verificación preliminar del entorno de ejecución de VM en Google Distributed Cloud

La verificación previa del entorno de ejecución de VM en Google Distributed Cloud valida un conjunto de requisitos previos en el entorno de la máquina antes de usar el entorno de ejecución de VM en las VMs y Google Distributed Cloud. La creación de VM se bloquea si falla la verificación preliminar del entorno de ejecución de VM en Google Distributed Cloud. La verificación previa del entorno de ejecución de VM en Google Distributed Cloud se ejecuta de forma automática cuando spec.enabled se establece como verdadero.

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

La verificación preliminar del entorno de ejecución de VM en Google Distributed Cloud se ejecuta cuando realizas cualquiera de las siguientes operaciones:

  1. Habilita el entorno de ejecución de VM en Google Distributed Cloud
  2. Habilita el entorno de ejecución de VM en las funciones de Google Distributed Cloud, como useEmulation
  3. Actualiza los clústeres
  4. Quitar la etiqueta kubevm.io/VM-SkipSchedule de los nodos
  5. Para crear el entorno de ejecución de VM de forma independiente en el objeto de verificación previa de Google Distributed Cloud, ejecuta el comando bmctl check vmruntimepfc --kubeconfig KUBECONFIG_PATH o aplica un manifiesto YAML VMRuntimePreflightCheck.

Puedes iniciar las VM cuando se realice correctamente la verificación previa más reciente del entorno de ejecución de VM en Google Distributed Cloud. Si falla la verificación preliminar, se bloquea la creación de la VM y obtienes errores de verificación previa.

Cómo verificar que la comprobación preliminar se realizó correctamente

Para verificar si las comprobaciones preliminares se realizaron de forma correcta, ejecuta los siguientes comandos:

  1. Busca las últimas comprobaciones preliminares realizadas:

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

    El resultado debería verse como el siguiente ejemplo:

    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 encontrar el estado de una comprobación preliminar, 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
       ...
    
     ```
    

Falla la comprobación preliminar de depuración

Si la verificación preliminar falla, realiza los siguientes pasos para depurar:

  1. Busca las últimas comprobaciones preliminares realizadas.

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

    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 verificación preliminar del entorno de ejecución de VM en Google Distributed Cloud. 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
    

¿Qué sigue?