KVM (Kernel-based Virtual Machine)
Introducción
KVM (Kernel-based Virtual Machine) es un módulo del kernel Linux que convierte Linux en un hipervisor de tipo 1. Está integrado en el kernel desde la versión 2.6.20 (2007) y es la solución de virtualización estándar en distribuciones Linux para servidores. Se combina siempre con QEMU para emular los dispositivos de hardware de las VMs.
Requisitos de hardware
KVM requiere extensiones de virtualización en la CPU:
- Intel: extensión VT-x (Intel Virtualization Technology)
- AMD: extensión AMD-V (AMD Virtualization)
Para verificar si la CPU las soporta:
# Buscar flags vmx (Intel) o svm (AMD) en la info de CPU
grep -E 'vmx|svm' /proc/cpuinfo
# Alternativa con lscpu
lscpu | grep Virtualization
# Comprobar si el módulo KVM está cargado
lsmod | grep kvm
Si aparece vmx (Intel) o svm (AMD), el hardware es compatible. También hay que asegurarse
de que la virtualización esté habilitada en la BIOS/UEFI.
Instalación
Debian/Ubuntu
apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virtinst virt-manager
RHEL / Rocky Linux / AlmaLinux
dnf install qemu-kvm libvirt libvirt-client virt-install virt-manager
Habilitar y arrancar libvirtd
systemctl enable --now libvirtd
systemctl status libvirtd
Añadir el usuario al grupo libvirt
usermod -aG libvirt $USER
usermod -aG kvm $USER
# Cerrar sesión y volver a entrar para que tenga efecto
Componentes principales
- Módulo kvm (
kvm.ko): núcleo de la virtualización, integrado en el kernel. Carga automáticamentekvm_intelokvm_amdsegún la CPU. - QEMU: emulador que proporciona los dispositivos virtuales (disco, red, USB, VGA). Cuando usa KVM, delega la ejecución de código al módulo del kernel, obteniendo rendimiento casi nativo.
- libvirt: capa de gestión que proporciona una API unificada sobre QEMU/KVM. Es lo que usan
herramientas como
virshyvirt-manager. - virtio: drivers paravirtualizados para red (
virtio-net), disco (virtio-blk,virtio-scsi) y otros dispositivos. Ofrecen mayor rendimiento que la emulación completa.
Verificar la instalación
# Comprobar que KVM está disponible
kvm-ok # en Ubuntu (paquete cpu-checker)
virt-host-validate # validación completa del host
# Ver los módulos cargados
lsmod | grep kvm
# kvm_intel (o kvm_amd)
# kvm
# Ver la versión de QEMU
qemu-system-x86_64 --version
Red por defecto: NAT con virbr0
La instalación de libvirt crea automáticamente una red virtual NAT llamada default, accesible a
través del bridge virbr0 (192.168.122.0/24). Las VMs conectadas a esta red tienen salida a Internet
a través del host pero no son accesibles desde el exterior.
ip addr show virbr0
virsh net-list --all