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:
- Acceso a un clúster de Google Distributed Cloud versión 1.12.0 (
anthosBareMetalVersion: 1.12.0
) o posterior. Puedes usar cualquier tipo de clúster que pueda ejecutar cargas de trabajo. Si es necesario, prueba Google Distributed Cloud en Compute Engine o consulta la descripción general de la creación de clústeres. - La herramienta de línea de comandos
bmctl
. Para obtener más información, consulta Descargar e instalar la herramientabmctl
.
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.
Edita el recurso personalizado
VMRuntime
:kubectl edit vmruntime
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 GDCuseEmulation
: 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 campouseEmulation
tiene el valor predeterminadofalse
.vmImageFormat
: admite dos valores de formato de imagen de disco:raw
yqcow2
. Si no definesvmImageFormat
, el tiempo de ejecución de VM en GDC usa el formato de imagen de discoraw
para crear VMs. El formatoraw
puede ofrecer un mejor rendimiento queqcow2
, 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.
Guarda el recurso personalizado en tu editor.
Verifica que el recurso personalizado
VMRuntime
esté habilitado:kubectl describe vmruntime vmruntime
Los detalles del recurso personalizado
VMRuntime
incluyen una secciónStatus
. El entorno de ejecución de máquinas virtuales de GDC está habilitado y funciona cuandoVMRuntime.Status.Ready
se muestra comotrue
.
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 valortrue
para confirmar que quieres eliminar los recursos de la máquina virtual. El valor predeterminado esfalse
.
Recurso personalizado
Para inhabilitar el tiempo de ejecución, actualiza el recurso personalizado VMRuntime
:
Edita el recurso personalizado
VMRuntime
:kubectl edit vmruntime
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
Guarda la especificación de recursos personalizados actualizada en tu editor.
Para verificar que el recurso personalizado
VMRuntime
está inhabilitado, consulta los pods que se ejecutan en el espacio de nombresvm-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:
Habilitar el entorno de ejecución de máquinas virtuales en GDC
Habilitar el tiempo de ejecución de máquinas virtuales en funciones de GDC, como useEmulation
Actualizar clústeres
Quitar la etiqueta
kubevm.io/VM-SkipSchedule
de los nodosCrea 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 YAMLVMRuntimePreflightCheck
.
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:
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
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:
Buscar las últimas comprobaciones preparatorias realizadas.
kubectl get vmruntimepfc -n vm-system
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 ...
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