KVM

Configuración de la pila Libvirt QEMU y KVM en Debian

Configuración de la pila Libvirt QEMU y KVM en Debian
La virtualización basada en QEMU-KVM está en el corazón de la pila de virtualización basada en Linux. Es gratuito y de código abierto y es una de las tecnologías de virtualización más frecuentes en la industria. La mayoría de los proveedores de servicios en la nube utilizan KVM y por una buena razón. Ofrece una pila de virtualización muy eficiente y, sin embargo, muy segura y no hay que lidiar con licencias complicadas. Este no es el caso con su configuración típica de Hyper-V o VMWare. Sin embargo, la compensación es que la configuración puede ser muy compleja, especialmente para usuarios sin experiencia. Este artículo está destinado a reducir esta complejidad para el lector.

Dicho esto, intentemos configurar nuestro propio hipervisor KVM en un servidor Debian 9 .

Habilitación de extensiones VT-x o AMD-V

Idealmente, necesitará una instalación limpia de su distribución de Linux favorita en una máquina (no una VM) que tenga una CPU bastante moderna. La mayoría de las CPU Intel modernas admiten extensiones VT-x y, de manera similar, AMD tiene sus extensiones AMD-V. Estas extensiones son "mejoras" integradas en el silicio de su CPU que permiten una virtualización más rápida y segura. Debe habilitar estas extensiones desde el interior del menú BIOS / UEFI de su placa base. Consulte el manual de su placa base para obtener más información.

Si no desea mancillar su estación de trabajo Linux que funciona perfectamente, puede usar una máquina virtual en la nube para ejecutar estos experimentos. DigitalOcean, por ejemplo, ofrece máquinas virtuales que tienen habilitada la virtualización anidada. Esto le permite ejecutar máquinas virtuales dentro de su máquina virtual alojada en la nube (esto se conoce como virtualización anidada). Obviamente, esta será una forma muy ineficiente de ejecutar prácticamente un hipervisor, pero como experimento funcionará bien. Asegúrese de obtener al menos 4 GB de memoria y más de 2 CPU.

Una vez que haya habilitado dichas extensiones, puede verificarlo ejecutando lscpu y buscando la entrada de Virtualización:

$ lscpu
.. .
Virtualización: VT-x
.. .

Ahora que tenemos las extensiones habilitadas, es hora de avanzar más en la pila.

Instalación de KVM y QEMU

KVM (o máquina virtual basada en kernel) consta de algunos módulos del kernel de Linux que aprovecharán las extensiones de CPU que habilitamos anteriormente. QEMU, por otro lado, consiste en un montón de programas de usuario que nos brindan capacidades de emulación. Como software independiente, QEMU se puede utilizar para ejecutar programas desde una arquitectura, como ARM, en otra como x86_64 y viceversa. Se puede usar para ejecutar cualquier cosa, desde un solo archivo binario hasta un sistema operativo completo.

Por supuesto, lo usaremos solo para virtualizar sistemas operativos x86_64 en la plataforma x86_64. Y para eso solo necesitamos un paquete:

$ sudo apt install qemu-kvm

Puede verificar que el paquete haya cargado todos los módulos requeridos, ejecutando:

$ lsmod | grep kvm
kvm_intel 200704 0
kvm 598016 1 kvm_intel
irqbypass 16384 1 kvm

Eso es todo lo que necesitas, teóricamente. Pero pronto te darás cuenta de que eso es práctico. Las máquinas virtuales son enormemente complejas y necesitamos un envoltorio de software para administrar todas las diversas demandas, como redes, administración de sistemas de archivos, etc., de una manera bastante automatizada (y escalable). Para hacer esto, necesitamos la biblioteca / demonio de virtualización Libvirt.

Instalación de Libvirt

Libvirt es una parte esencial de su pila de virtualización. El demonio libvirtd ejecuta servicios relacionados con la virtualización en segundo plano. Servicios que escuchan solicitudes como "Crear una VM", "Destruir una VM", "Crear una red", etc. y las ejecuta en ellas utilizando las utilidades básicas de Linux como los binarios qemu, iptables, etc.

Libvirt es muy generalizado y se puede utilizar para administrar invitados KVM, contenedores LXC y pila de virtualización Xen. Por ahora solo nos centraremos en Libvirt para invitados de KVM. Libvirtd expone una API que puede ser consumida por aplicaciones GUI como virt-manager u oVirt o herramientas de línea de comandos como virt-install, virsh, etc. Podemos escribir incluso nuestros propios clientes personalizados que utilicen la misma API estándar.  Usaremos las herramientas de línea de comandos, como virsh y virt-install, para mantener las cosas estandarizadas.

Instalemos todas estas herramientas:

$ apt instalar libvirt-clients libvirt-daemon-system virtinst

También necesitaremos otro paquete libguestfs-tools, para ayudarnos a editar o modificar los discos duros y sistemas de archivos de la VM invitada.

Estupendo! Ahora hemos instalado toda la pila y sabemos cómo se distribuye la arquitectura. Para usar libvirt (y herramientas relacionadas) agregue su usuario a los grupos libvirt-qemu y libvirt.

$ sudo usermod -aG libvirt
$ sudo usermod -aG libvirt-qemu

O ejecute los comandos como usuario root.

Virsh e inicio de la red predeterminada

La utilidad de línea de comando virsh es algo que usará mucho al administrar sus máquinas virtuales. Simplemente puede escribir virsh y pasar a la interfaz de línea de comandos de virsh, o escribir virsh [Opciones] de su caparazón habitual. Revise la salida de la ayuda de virsh siempre que esté atascado con alguna operación relacionada con la máquina virtual.

El primer comando virsh que usaremos invocará la red predeterminada a la que se puede conectar una VM:

$ virsh net-autostart predeterminado
$ virsh net-start predeterminado

Esto iniciará la red predeterminada y se asegurará de que se inicie automáticamente cuando el host se reinicie. Para verificar los detalles sobre esta red predeterminada, use el comando:

$ virsh net-dumpxml predeterminado

defecto
3d723dc6-49a4-4f73-bf6d-623d6b46b099












El archivo xml puede mostrarle el rango de posibles direcciones IP y cómo se comunicarán con el mundo exterior. Básicamente, el tráfico les llegará a través de un NAT y no formarán parte de la red externa de su host. Puede utilizar Bridge Networking para exponer cada VM a la LAN de la máquina host.

Para iniciar una máquina virtual

Para iniciar una máquina virtual, necesitamos un medio de instalación (como la ISO de instalación para cualquier sistema operativo) y cuántas CPU y cuánta memoria se debe asignar a la VM, y si necesita VNC. Este paso es donde realmente puede apreciar un instalador de GUI como virt-manager, sin embargo, lo haremos usando un comando virt-install bastante complejo.

Me gusta mantener todos mis medios de arranque en / var / lib / libvirt / boot y todas las máquinas virtuales y su disco duro virtual en / var / lib / libvirt / images (la ubicación predeterminada) esto simplifica la organización.

$ cd / var / lib / libvirt / boot
$ wget http: // lanzamientos.ubuntu.com / 18.04.2 / ubuntu-18.04.2-escritorio-amd64.Yo asi

El comando anterior obtiene la ISO de escritorio de Ubuntu, puede obtener fácilmente CentOS o cualquier otra distribución que desee.

Para crear una nueva máquina virtual y arrancarla, ejecute:

$ virt-install --virt-type kvm \
--nombre myVM \
--memoria 2048 --vcpus = 2 \
--cdrom / var / lib / libvirt / boot / ubuntu-18.04.2-escritorio-amd64.Yo asi \
--tamaño del disco = 40 \
--gráficos vnc, escuchar = 0.0.0.0, puerto = 5900 \
--noautoconsola

El comando anterior es, de hecho, complicado. Sugiero guardar estos comandos en archivos de texto y ejecutarlos como scripts ejecutables cada vez que crea una nueva máquina virtual. La mayoría de los parámetros como virt-type y virt-name son bastante autoexplicativos. Son simplemente tediosos de escribir.

La última opción para la visualización de VNC iniciará un servidor VNC y le permitirá tener acceso de consola a su VM de forma remota, conectándose al puerto 5900 del host. Abra un cliente VNC en su escritorio y vaya a la IP de su host KVM en el puerto 5900. Asegúrese de llegar a la IP del host y no a la IP de la VM. Su VNC se conectará a la salida de video de su VM y podrá continuar con la instalación.

Dónde seguir?

A partir de aquí, puede intentar pausar, detener y eliminar las máquinas virtuales. También puede modificar la infraestructura subyacente agregando grupos de almacenamiento y configurando redes puente. Todos los archivos de configuración, para VM individuales, interfaces de red y grupos de almacenamiento se almacenan en / etc / libvirt / y / etc / libvirt / qemu.

A veces, tendrá que eliminar físicamente los archivos del disco duro guardados en / lib / libvirt / images incluso después de eliminar la VM de libvirt. Para automatizar aún más las cosas, intente importar imágenes qcow2 que la mayoría de las distribuciones de Linux como Ubuntu y CentOS. Estos tienen el sistema operativo preinstalado en ellos.

Conclusión

Configurar esto no es tan fácil como configurar VirtualBox y la razón detrás de esto es múltiple. La mayor parte de la pila es complicada porque está diseñada para ser modular y altamente escalable. No hace ninguna suposición sobre dónde está ejecutando la máquina virtual. El entorno puede ser un escritorio personal o un centro de datos. Trabajar con una GUI puede ayudar a reducir esta complejidad hasta cierto punto. Sin embargo, estos sistemas están diseñados para funcionar con una API REST para conectarse a los sistemas de facturación, sistemas de monitoreo, etc. de su organización. Casi nunca son tocados por un humano después de ser desplegados.

Dicho esto, la automatización es el nombre del juego con libvirt y qemu-kvm. Examine la documentación oficial y escriba su propio script genial para poner en marcha una flota de máquinas virtuales y háganos saber si este tutorial le resultó útil.

Cómo desarrollar un juego en Linux
Hace una década, no muchos usuarios de Linux predecían que su sistema operativo favorito algún día sería una plataforma de juegos popular para videoju...
Puertos de código abierto de motores de juegos comerciales
Las recreaciones gratuitas, de código abierto y de motores de juegos multiplataforma se pueden usar para jugar títulos de juegos antiguos y también al...
Los mejores juegos de línea de comandos para Linux
La línea de comandos no es solo su mayor aliado cuando usa Linux, también puede ser la fuente de entretenimiento porque puede usarla para jugar muchos...