Dicho esto, intentemos configurar nuestro propio Hypervisor KVM en un servidor Debian 9 .
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 de Intel modernas admiten extensiones VT-X y, de manera similar, AMD tiene sus extensiones AMD-V. Estas extensiones son "mejoras" construidas directamente en el silicio de su CPU que permite una virtualización más rápida y segura. Tienes que habilitar estas extensiones desde el interior del menú BIOS/UEFI de tu placa base. Consulte su manual de placa base para obtener más información.
Si no desea manchar su estación de trabajo de Linux perfectamente que funciona, puede usar una máquina virtual en la nube para ejecutar estos experimentos. DigitalOcean, por ejemplo, ofrece máquinas virtuales que tiene una virtualización anidada habilitada. Esto le permite ejecutar máquinas virtuales dentro de su VM 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 para avanzar más en la pila.
Instalación de KVM y QEMU
KVM (o máquina virtual basada en el núcleo) consiste en algunos módulos de núcleo de Linux que aprovecharán las extensiones de CPU que habilitamos anteriormente. QEMU, por otro lado, consiste en un grupo de programas de usuarios que nos proporcionan capacidades de emulación. Como un software independiente, QEMU se puede usar para ejecutar programas de una arquitectura, como ARM, en otro 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 los sistemas operativos x86_64 en la plataforma x86_64. Y para eso necesitamos solo 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 requerimos un envoltorio de software para administrar todas las diversas demandas, como redes, administración del sistema de archivos, etc. de una manera bastante automatizada (y escalable). Para hacer esto necesitamos Libvirt Virtualization Library/Daemon.
Instalación de libvirt
Libvirt es una parte por excelencia de su pila de virtualización. El Daemon 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 ejecutarlas en ellas utilizando las utilidades básicas de Linux como Binarios QEMU, IPTables, etc.
Libvirt es muy generalizado y se puede usar para administrar invitados de KVM, contenedores LXC y pila de virtualización XEN. Nos centraremos en libvirt para invitados de KVM por ahora. Libvirtd expone una API que puede ser consumida por aplicaciones de GUI como Virt-Manager o Ovirt o herramientas de línea de comandos como Virt-Install, Virsh, etc. Podemos escribir incluso a nuestros propios clientes personalizados que usan 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 instalación libvirt-clients libvirt-daemon-system virtinst
También necesitaremos otro paquete Libguestfs-Tools, para ayudarnos a editar o modificar los discos y sistemas de archivos de VM de invitado.
Excelente! Ahora hemos instalado toda la pila y sabemos cómo se presenta 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 y comenzar la red predeterminada
La utilidad de la línea de comandos de Virsh es algo que usará mucho, al administrar sus máquinas virtuales. Simplemente puede escribir en Virsh y caer en la interfaz de línea de comandos Virsh, o escribir [opciones] Virsh desde su shell regular. Realice la salida de ayuda Virsh siempre que esté atascado con alguna operación relacionada con VM.
El primer comando Virsh que utilizaremos invocará la red predeterminada a la que una VM puede conectarse:
$ Virsh Net-Autostart por defecto
$ 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 predeterminadopor 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 llegará a ellos a través de un NAT y no serán parte de la red externa de su anfitrión. Puede usar la red de puentes 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 el 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 de Instalación Virt 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/imágenes (la ubicación predeterminada) esto simplifica la organización.
$ cd/var/lib/libvirt/boot
$ wget http: // versiones.ubuntu.com/18.04.2/Ubuntu-18.04.2-desktop-amd64.Yo asi
El comando anterior obtiene iso de escritorio ubuntu, puede obtener centOS o cualquier otra distribución que desee.
Para crear una nueva VM y iniciarlo en ejecución:
$ virt-install --virt-type kvm \
--Nombre myvm \
--memoria 2048 --vcpus = 2 \
--cdrom/var/lib/libvirt/boot/ubuntu-18.04.2-desktop-amd64.Yo asi \
--Tamaño del disco = 40 \
--gráficos vnc, escuchar = 0.0.0.0, puerto = 5900 \
--noautoconsole
El comando anterior es, de hecho, complicado. Sugiero guardar estos comandos en archivos de texto y ejecutarlos como scripts ejecutables cada vez que crea un nuevo VM. La mayoría de los parámetros como Virt-Type y Virt-Name se explican por sí mismos. Son tediosos de escribir.
La última opción para la pantalla VNC iniciará un servidor VNC y le permitirá tener acceso de consola a su VM de forma remota, conectando al puerto 5900 del host 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 alcanzar la IP del host y no la IP de la VM. Su VNC se conectará a la salida de video de su VM y puede continuar con la instalación.
DÓNDE A continuación?
De aquí en adelante puedes intentar hacer una pausa, detener y eliminar las máquinas virtuales. También puede modificar la infraestructura subyacente agregando grupos para el almacenamiento y la configuración de las redes de puente. Todos los archivos de configuración, para máquinas virtuales 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 de disco duro guardados en/lib/libvirt/imágenes incluso después de eliminar la VM de Libvirt. Para automatizar 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.
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 VM. 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 trabajar con una API REST para conectarse a los sistemas de facturación de su organización, sistemas de monitoreo, etc. 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. Examinar a través de la documentación oficial y escribir su propio guión genial para girar una flota de máquinas virtuales y háganos saber si encontró este tutorial útil.