Después de convertir el equipo de laboratorio en mi equipo de escritorio, poco a poco lo estoy convirtiendo de nuevo en un equipo de laboratorio :D

Después del desagradable sabor de boca con GNOME Boxes que me dejó mi efímera prueba en Fedora, he recuperado el entorno basado en KVM (aunque no tuviera éxito con Proxmox VE).

En esta entrada describo los pasos seguidos para instalar KVM en Ubuntu 20.04 con las notas que he ido tomando durante el proceso.

KVM es un hipervisor de tipo 1 implementado como un módulo del Kernel de Linux que usa las extensiones de virtualización de los procesadores modernos. Esto permite que las máquinas virtuales user la CPU de manera directa, lo que minimiza la penalización de rendimiento que inflinge la virtualización. Para el sistema operativo, cada máquina virtual es un proceso de Linux.

Comprobación de las capacidades de virtualización del procesador

Para comprobar si el procesador dispone de las extensiones de virtualización, revisa el contenido del fichero /proc/cpuinfo en busca de vmx (para Intel) o svm para AMD.

cat /proc/cpuinfo | egrep 'vmx|svm'

Instalación

Empezamos con la instalación de los paquetes relacionados con KVM:

sudo apt install qemu-kvm libvirt-clients libvirt-daemon-system bridge-utils virtinst libvirt-daemon virt-manager virt-viewer

Una vez finalice la instalación de los paquetes, comprueba que librvirtd ha arrancado automáticamente:

sudo systemctl status libvirtd
● libvirtd.service - Virtualization daemon
     Loaded: loaded (/lib/systemd/system/libvirtd.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2020-06-26 20:23:46 CEST; 3min 45s ago
TriggeredBy: ● libvirtd-ro.socket
             ● libvirtd-admin.socket
             ● libvirtd.socket
...

Otra forma de comprobar que la instalación de KVM ha sido un éxito es usando el comando kvm-ok:

$ sudo kvm-ok
INFO: /dev/kvm exists
KVM acceleration can be used

Revisión de la configuración de red

Por defecto, KVM crea un virtual switch llamado virbr0 que podemos ver mediante el comando ip address show virbr0:

$ ip address show virbr0
4: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 52:54:00:0a:4b:da brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever

virbr0 funciona en modo NAT, lo que permite a las máquinas virtuales la comunicación hacia fuera (hacia el anfitrión e internet) pero sólo conexiones entrantes desde el equipo anfitrión (y máquinas en la misma subred).

Usando la utilidad virsh podemos revisar las redes disponibles para las máquinas virtuales:

l$ sudo virsh net-list --all
Name      State    Autostart   Persistent
--------------------------------------------
default   active   yes         yes

Creación de un linux bridge (br0) para las máquinas virtuales: podemos crear un bridge para conectar la NIC física con un interfaz de tipo puente, de manera que las máquinas virtuales estarían conectadas en la misma red que el equipo anfitrión, recibiendo IPs del DHCP de la red, etc… Puedes revisar el proceso en el paso 4 del artículo How to Install KVM on Ubuntu 20.04 LTS Server (Focal Fossa).

Configuración del almacenamiento

El storage-pool por defecto se encuentra en /var/lib/libvirt/images/. Sin embargo, si tenemos un disco dedicado donde almacenar las imágenes nos puede interesar crear una nueva storage pool, por ejemplo, en /data/kvm/pool:

$ sudo virsh pool-list --all
 Name      State    Autostart
-------------------------------
 default   active   yes

$ virsh pool-define-as kvmpool --type dir --target /data/kvm/pool
Pool kvmpool defined

$ virsh pool-start kvmpool
$ virsh pool-autostart kvmpool

$ virsh pool-list --all
 Name                 State      Autostart
-------------------------------------------
 default              active     yes
 kvmpool              active     yes

Puedes revisar el espacio disponible mediante:

l$ sudo virsh pool-list --details
 Name      State     Autostart   Persistent   Capacity     Allocation   Available
------------------------------------------------------------------------------------
 default   running   yes         yes          878,70 GiB   9,02 GiB     869,68 GiB

En mi escenario actual tengo espacio suficiente en el disco de sistema, pero nunca está de más dejar la puerta abierta para añadir nuevas storage pool en el futuro… Probablemente vuelva a una situación como la del artículo Cómo crear un storage pool en KVM, con una storage pool dedicada a las ISOs.

Como ves, la instalación de KVM no tiene ninguna complicación.

En la siguiente entrada creo una máquina virtual desde línea de comandos (usando virsh),


Referencias: