En esta página, se muestra cómo implementar VM en clústeres de Anthos en equipos físicos mediante el entorno de ejecución de VM de Anthos. El entorno de ejecución de VM de Anthos usa KubeVirt para organizar las VM de los clústeres, lo que te permite trabajar con tus apps y cargas de trabajo basadas en VM en un entorno de desarrollo uniforme. Puedes habilitar el entorno de ejecución de VM de Anthos cuando creas un clúster nuevo y en clústeres existentes.
Antes de comenzar
En estas instrucciones, se supone que tienes un clúster en funcionamiento. De lo contrario, puedes seguir las instrucciones de la guía de inicio rápido para clústeres de Anthos alojados en equipos físicos para configurar un clúster en tu estación de trabajo con rapidez.
Habilita el entorno de ejecución de VM de Anthos
El entorno de ejecución de VM de Anthos está inhabilitado de forma predeterminada. Para habilitar el entorno de ejecución de VM de Anthos, edita el recurso personalizado VMRuntime
en el clúster. A partir de los clústeres de Anthos en la versión 1.10.0 de equipos físicos, el recurso personalizado VMRuntime
se instala de forma automática en los clústeres.
Para habilitar el entorno de ejecución de VM de Anthos, sigue estos pasos:
Actualiza el recurso personalizado
VMRuntime
para establecerenabled
entrue
.apiVersion: vm.cluster.gke.io/v1 kind: VMRuntime metadata: name: vmruntime spec: enabled: true # useEmulation default to false if not set. useEmulation: true # vmImageFormat default to "qcow2" if not set. vmImageFormat: qcow2
Si tu nodo no admite la virtualización de hardware, o no estás seguro, establece
useEmulation
entrue
.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 enfalse
, si no se especifica.apiVersion: vm.cluster.gke.io/v1 kind: VMRuntime metadata: name: vmruntime spec: enabled: true # useEmulation default to false if not set. useEmulation: true # vmImageFormat default to "qcow2" if not set. vmImageFormat: qcow2
Puedes cambiar el formato de imagen que se usa para las VM que creas si configuras el campo
vmImageFormat
.El campo
vmImageFormat
admite dos valores de formato de imagen de disco:raw
yqcow2
. Si no configurasvmImageFormat
, el entorno de ejecución de VM de Anthos usa el formato de imagen de discoraw
para crear VM. El formatoraw
puede proporcionar un rendimiento mejorado sobreqcow2
, 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.apiVersion: vm.cluster.gke.io/v1 kind: VMRuntime metadata: name: vmruntime spec: enabled: true # useEmulation default to false if not set. useEmulation: true # vmImageFormat default to "qcow2" if not set. vmImageFormat: qcow2
Guarda la configuración y verifica que el recurso personalizado
VMRuntime
esté habilitado:kubectl describe vmruntime vmruntime
En los detalles del recurso personalizado
VMRuntime
, se incluye una secciónStatus
. El entorno de ejecución de VM de Anthos está habilitado y funciona cuandoVMRuntime.Status.Ready
se establece entrue
.
Actualiza clústeres
El recurso personalizado VMRuntime
se instala de forma automática en los clústeres actualizados a la versión 1.10.0 o superior. Cuando actualizas un clúster 1.9.x a la versión 1.10.0 y superior, el proceso de actualización verifica la configuración del clúster y configura el recurso personalizado VMRuntime
para que coincida con la configuración del entorno de ejecución de VM de Anthos en tu clúster 1.9.x. Si spec.kubevirt
está presente en el recurso del clúster 1.9.x, el proceso de actualización habilita el entorno de ejecución de VM de Anthos.
La configuración de recursos personalizados de VMRuntime
tiene prioridad sobre la configuración heredada del clúster de entorno de ejecución de la VM de Anthos, como spec.kubevirt.useEmulation
, en clústeres de la versión 1.10.0 o superior. Actualiza el recurso personalizado VMRuntime
para cambiar la configuración del entorno de ejecución de VM de Anthos para el clúster 1.10.0 o superior.
Instale virtctl
Instala la herramienta de la CLI
virtctl
como un complementokubectl
export GOOGLE_APPLICATION_CREDENTIALS="bm-gcr.json" sudo -E ./bmctl install virtctl
Verifica que
virtctl
esté instalado:kubectl plugin list
Si
virtctl
aparece en la respuesta, significa que se instaló correctamente.
Cree una VM
Una vez que habilites KubeVirt en tu clúster e instales el complemento virtctl
para kubectl
, puedes comenzar a crear VM en tu clúster con el comando kubectl virt create vm
. Antes de ejecutar este comando, te recomendamos configurar un archivo cloud-init para asegurarte de tener acceso de consola a la VM una vez creada.
Crea un archivo cloud-init personalizado para el acceso a la consola
Hay dos formas de crear un archivo cloud-init personalizado. La forma más sencilla es especificar la marca --os=<OPERATING_SYSTEM>
cuando se crea la VM. Este método configura automáticamente un archivo cloud-init simple y funciona para los siguientes sistemas operativos.
- Ubuntu
- En CentOS
- Debian
- Fedora
Una vez que se crea la VM, puedes acceder a ella por primera vez con las siguientes credenciales y, luego, cambiar la contraseña:
user: root
password: changeme
Si tu imagen contiene un SO diferente basado en Linux o necesitas una configuración más avanzada, puedes crear de forma manual un archivo cloud-init personalizado y especificar la ruta al archivo mediante la marca --cloud-init-file=<path/to/file>
. En su forma más básica, el archivo cloud-init es un archivo YAML que contiene lo siguiente:
#cloud-config
user: root
password: changeme
lock_passwd: false
chpasswd: {expire: false}
disable_root: false
ssh_authorized_keys:
- <ssh-key>
Para obtener opciones de configuración más avanzadas, consulta los ejemplos de configuración de Cloud.
Una vez que hayas determinado qué método usar, estarás listo para crear una VM.
Ejecuta el comando kubectl virt create vm
Puedes crear VM a partir de imágenes públicas o personalizadas.
Imagen pública
Si tu clúster tiene una conexión externa, puedes crear una VM a partir de una imagen pública si ejecutas lo siguiente:
kubectl virt create vm VM_NAME \
--boot-disk-access-mode=MODE \
--boot-disk-size=DISK_SIZE \
--boot-disk-storage-class="DISK_CLASS" \
--cloud-init-file=FILE_PATH \
--cpu=CPU_NUMBER \
--image=IMAGE_NAME \
--memory=MEMORY_SIZE
Reemplaza lo siguiente:
- VM_NAME por el nombre de la VM que deseas crear.
- MODE por el modo de acceso del disco de arranque. Los valores posibles son
ReadWriteOnce
(predeterminado) oReadWriteMany
. - DISK_SIZE por el tamaño que deseas para el disco de arranque. El valor predeterminado es
20Gi
. - DISK_CLASS por la clase de almacenamiento del disco de arranque. El valor predeterminado es
local-shared
. Para obtener una lista de las clases de almacenamiento disponibles, ejecutakubectl get storageclass
. - FILE_PATH por la ruta completa del archivo cloud-init personalizado.
Según la imagen, es posible que se requiera para obtener acceso de consola a la VM después de crearla. Si planeas configurar el archivo cloud-init con la marca
--os
de forma automática, no especifiques la marca--cloud-init-file
. Si especificas la marca--cloud-init-file
, se ignorará la marca--os
. Los valores aceptables para--os
sonubuntu
,centos
,debian
yfedora
. - CPU_NUMBER por la cantidad de CPU que deseas configurar para la VM.
El valor predeterminado es
1
. - IMAGE_NAME por la imagen de VM, que puede ser
ubuntu20.04
(predeterminado),centos8
o una URL de la imagen. - MEMORY_SIZE por el tamaño de memoria de la VM. El valor predeterminado es
4Gi
.
Imagen personalizada
Cuando creas una VM a partir de una imagen personalizada, puedes especificar una imagen de un servidor de imágenes HTTP o una imagen almacenada de forma local.
Servidor de imágenes HTTP
Puedes configurar un servidor HTTP mediante Apache o nginx y subir la imagen personalizada a su carpeta expuesta. Luego, puedes crear una VM a partir de la imagen personalizada si ejecutas el siguiente comando:
kubectl virt create vm VM_NAME \
--boot-disk-access-mode=DISK_ACCESS_MODE \
--boot-disk-size=DISK_SIZE \
--boot-disk-storage-class=DISK_CLASS \
--cloud-init-file=FILE_PATH \
--cpu=CPU_NUMBER \
--image=http://SERVER_IP/IMAGE_NAME \
--memory=MEMORY_SIZE
Reemplaza lo siguiente:
- VM_NAME por el nombre de la VM que deseas crear.
- DISK_ACCESS_MODE por el modo de acceso del disco de arranque. Los valores posibles son
ReadWriteOnce
(predeterminado) oReadWriteMany
. - DISK_SIZE por el tamaño que deseas para el disco de arranque. El valor predeterminado es
20Gi
. - DISK_CLASS por la clase de almacenamiento del disco de arranque. El valor predeterminado es
local-shared
. Para obtener una lista de las clases de almacenamiento disponibles, ejecutakubectl get storageclass
. - FILE_PATH por la ruta completa del archivo cloud-init personalizado.
Según la imagen, es posible que se requiera para obtener acceso de consola a la VM después de crearla. Si planeas configurar el archivo cloud-init con la marca
--os
de forma automática, no especifiques la marca--cloud-init-file
. Si especificas la marca--cloud-init-file
, se ignorará la marca--os
. Los valores aceptables para--os
sonubuntu
,centos
,debian
yfedora
. - CPU_NUMBER por la cantidad de CPU que deseas configurar para la VM. El valor predeterminado es
1
. - SERVER_IP por la dirección IP del servidor que aloja la imagen.
- IMAGE_NAME por el nombre del archivo de la imagen personalizada.
- MEMORY_SIZE por el tamaño de memoria de la VM. El valor predeterminado es
4Gi
.
Imagen almacenada de forma local
Puedes almacenar la imagen personalizada de forma local y crear una VM a partir de ella si ejecutas el siguiente comando:
kubectl virt create vm VM_NAME \
--boot-disk-access-mode=DISK_ACCESS_MODE \
--boot-disk-size=DISK_SIZE \
--boot-disk-storage-class=DISK_CLASS \
--cloud-init-file=FILE_PATH \
--cpu=CPU_NUMBER \
--image=IMAGE_PATH \
--memory=MEMORY_SIZE \
Reemplaza lo siguiente:
- VM_NAME por el nombre de la VM que deseas crear.
- DISK_ACCESS_MODE por el modo de acceso del disco de arranque. Los valores posibles son
ReadWriteOnce
(predeterminado) oReadWriteMany
. - DISK_SIZE por el tamaño que deseas para el disco de arranque. El valor predeterminado es
20Gi
. - DISK_CLASS por la clase de almacenamiento del disco de arranque. El valor predeterminado es
local-shared
. - FILE_PATH por la ruta completa del archivo cloud-init personalizado.
Según la imagen, es posible que se requiera para obtener acceso de consola a la VM después de crearla. Si planeas configurar el archivo cloud-init con la marca
--os
de forma automática, no especifiques la marca--cloud-init-file
. Si especificas la marca--cloud-init-file
, se ignorará la marca--os
. Los valores aceptables para--os
sonubuntu
,centos
,debian
yfedora
. - CPU_NUMBER por la cantidad de CPU que deseas configurar para la VM. El valor predeterminado es
1
. - IMAGE_PATH por la ruta de acceso del archivo local a la imagen personalizada.
- MEMORY_SIZE por el tamaño de memoria de la VM. El valor predeterminado es
4Gi
.
Cambia los valores predeterminados para las marcas
El comando kubectl virt create vm
usa valores predeterminados para autocompletar marcas no especificadas cuando se ejecuta el comando. Para cambiar estos valores predeterminados, ejecuta el siguiente comando:
kubectl virt config default FLAG
Reemplaza FLAG por la marca del parámetro del que deseas cambiar el valor predeterminado.
Ejemplo: Con el siguiente comando, se cambia la configuración predeterminada de la CPU del valor predeterminado inicial de 1
a 2
:
kubectl virt config default --cpu=2
Para obtener una lista de las marcas compatibles y sus valores predeterminados actuales, ejecuta lo siguiente:
kubectl virt config default -h
Los parámetros de configuración predeterminados se almacenan del lado del cliente como un archivo local llamado ~/.virtctl.default
. También puedes cambiar la configuración predeterminada si editas este archivo.
Accede a tu VM
Puedes acceder a las VM mediante los siguientes métodos:
Acceso a Console
Para acceder a una VM desde Console, ejecuta el siguiente comando:
kubectl virt console VM_NAME
Reemplaza VM_NAME por el nombre de la VM a la que deseas acceder.
Acceso de VNC
Para acceder a una VM mediante VNC, ejecuta:
# This requires remote-viewer from the virt-viewer package and a graphical desktop from where you run virtctl
kubectl virt vnc VM_NAME
Reemplaza VM_NAME por el nombre de la VM a la que deseas acceder.
Acceso interno
Todos los otros pods en el clúster pueden acceder directamente a las direcciones IP de las VM de tu clúster. Para encontrar la dirección IP de una VM, ejecuta este comando:
kubectl get vmi VM_NAME
Reemplaza VM_NAME por el nombre de la VM a la que deseas acceder.
El comando muestra un resultado similar al siguiente:
NAME AGE PHASE IP NODENAME
vm1 13m Running 192.168.1.194 upgi-bm002
Acceso externo
Las VM creadas en tu clúster tienen direcciones de red de pod a las que solo se puede acceder desde el clúster. Para acceder a las VM del clúster de forma externa, sigue estos pasos:
Expón la VM como un servicio de balanceador de cargas:
kubectl virt expose vm VM_NAME \ --port=LB_PORT \ --target-port=VM_PORT \ --type=LoadBalancer \ --name=SERVICE_NAME
Reemplaza lo siguiente:
- VM_NAME por el nombre de la VM a la que deseas acceder.
- LB_PORT por el puerto del servicio del balanceador de cargas que se expone.
- VM_PORT por el puerto en la VM al que deseas acceder a través del servicio del balanceador de cargas.
- SERVICE_NAME por el nombre que deseas darle a este servicio de balanceador de cargas.
Obtén la dirección IP externa del servicio del balanceador de cargas como sigue:
kubectl get svc SERVICE_NAME
Reemplaza SERVICE_NAME por el nombre del servicio del balanceador de cargas que expone la VM.
Puedes acceder al puerto de destino de la VM mediante la dirección IP que aparece en el campo
EXTERNAL-IP
de la respuesta.
Ejemplo
Si tienes una VM llamada galaxy
a la que deseas acceder desde fuera del clúster mediante SSH, debes ejecutar lo siguiente:
kubectl virt expose vm galaxy \
--port=25022 \
--target-port=22 \
--type=LoadBalancer \
--name=galaxy-ssh
Obtén la dirección IP del balanceador de cargas:
kubectl get svc galaxy-ssh
El comando muestra un resultado similar al siguiente:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
galaxy-ssh LoadBalancer 10.96.250.76 21.1.38.202 25000:30499/TCP 4m40s
Ahora puedes acceder a la VM mediante SSH a través de 21.1.38.202:25022
(VIP:port) desde fuera del clúster:
ssh root@21.1.38.202:22 -p 25022
Inspecciona los registros de la consola y la telemetría de VM
Los registros de la consola y la telemetría de VM se integraron en la consola de Google Cloud. La información de telemetría y los datos de registro son fundamentales para supervisar el estado de las VM y solucionar cualquier problema con las VM del clúster.
Telemetría de VM
En el panel Estado de VM de clústeres de Anthos, se proporcionan datos de telemetría activos para las VM del clúster.
Para ver información de telemetría de las VM de tu clúster, haz lo siguiente:
En la consola de Google Cloud, selecciona Monitoring o haz clic en el siguiente botón:
Selecciona Paneles.
Haz clic en Estado de VM de clústeres de Anthos en la lista Todos los paneles.
Registros de la consola de VM
Los registros de la consola en serie de VM se transmiten a Cloud Logging y se pueden ver en el Explorador de registros.
Borra las VM y sus recursos
Borra solo la VM
kubectl virt delete vm VM_NAME
Reemplaza VM_NAME por el nombre de la VM que deseas borrar.
Borra solo los discos de VM
kubectl virt delete disk DISK_NAME
Reemplaza DISK_NAME por el nombre del disco que deseas borrar. Si intentas borrar un disco de una VM antes de borrarla, este se marcará para su eliminación pendiente de eliminación de la VM.
Borra VM y recursos
kubectl virt delete vm VM_NAME --all
Reemplaza VM_NAME por el nombre de la VM que deseas borrar.
Si deseas verificar los recursos que usa la VM que se borrarán, puedes especificar la marca --dry-run
junto con --all
.
Inhabilita el entorno de ejecución de VM de Anthos
Cuando ya no necesites usar el entorno de ejecución de VM de Anthos, puedes inhabilitar esta función.
bmctl
Para inhabilitar el entorno de ejecución, usa la herramienta de
bmctl
:bmctl disable vmruntime --kubeconfig KUBECONFIG_PATH \ --timeout TIMEOUT_IN_MINUTES \ --force true
Proporciona la ruta de acceso al archivo kubeconfig del clúster y los valores para las siguientes opciones de configuración:
--timeout
: TIMEOUT_IN_MINUTES para esperar a que se borren los recursos de VM existentes. El valor predeterminado es de 10 minutos.--force
: se establece entrue
para confirmar que deseas borrar los recursos de VM existentes. El valor predeterminado esfalse
.
Recurso personalizado
Antes de inhabilitar el entorno de ejecución de VM de Anthos en un clúster mediante la edición del recurso personalizado VMRuntime
, debes asegurarte de que todas las VMs de ese clúster se hayan borrado.
Para inhabilitar el entorno de ejecución, actualiza el recurso VMRuntime
personalizado:
Verifica si hay VM existentes en el clúster.
kubectl get vm
Si el comando muestra que todavía hay VM en tu clúster, debes borrarlas antes de continuar.
Edita el recurso personalizado
VMRuntime
:kubectl edit vmruntime
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
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 entorno de ejecución de VM de Anthos se inhabilita cuando solo se ejecutan los Pods que pertenecen a la implementación de
vmruntime-controller-manager
en el espacio de nombres.
¿Qué sigue?
- Obtén información sobre los problemas conocidos del entorno de ejecución de VM de Anthos.
- Consulta la guía del usuario de KubeVirt.