10.1 Virtualización con KVM: Fundamentos y Operación en Linux¶
Introducción¶
La virtualización es un pilar fundamental en cualquier infraestructura moderna. Permite ejecutar múltiples sistemas operativos aislados sobre un mismo hardware físico, optimizando recursos y facilitando la gestión.
En el ecosistema Linux, KVM (Kernel-based Virtual Machine) es la solución estándar para virtualización de tipo 1 integrada en el propio kernel. Permite convertir un servidor Linux en un hypervisor completo, capaz de ejecutar máquinas virtuales con alto rendimiento y aislamiento.
Para un Sysadmin senior, dominar KVM implica poder construir entornos reproducibles, aislar cargas de trabajo críticas y desplegar infraestructura eficiente sin depender de soluciones propietarias.
Objetivos de aprendizaje¶
Al finalizar este capítulo serás capaz de:
- Comprender la arquitectura de KVM y su integración con el kernel.
- Identificar los componentes clave del stack de virtualización.
- Instalar y configurar KVM en un sistema Linux.
- Crear y gestionar máquinas virtuales desde CLI.
- Aplicar buenas prácticas en entornos de producción.
Conceptos Teóricos¶
1. ¿Qué es KVM?¶
KVM es un módulo del kernel de Linux que permite transformar el sistema en un hypervisor tipo 1 (bare-metal).
Componentes clave:
- kvm.ko → módulo principal
- kvm-intel.ko / kvm-amd.ko → soporte de CPU
- QEMU → emulación de hardware
- libvirt → capa de gestión
Concepto clave
KVM proporciona virtualización, pero la gestión se realiza mediante herramientas como libvirt y virsh.
2. Tipos de virtualización¶
Virtualización completa¶
- El sistema huésped no sabe que está virtualizado.
- Usa extensiones de CPU (Intel VT-x / AMD-V).
Paravirtualización¶
- Mejora rendimiento mediante drivers optimizados (virtio).
3. Arquitectura del stack¶
Roles:
- QEMU → ejecuta la VM
- libvirt → gestión centralizada
- virsh → CLI administrativa
4. Requisitos del sistema¶
Verificar soporte de virtualización:
Resultado:
0→ no soportado>0→ soportado
5. Tipos de almacenamiento en KVM¶
- archivos (
.qcow2,.raw) - LVM
- NFS / iSCSI
Formato recomendado:
- qcow2 → flexible (snapshots, compresión)
Laboratorio Práctico¶
Escenario¶
Configurar un servidor Linux como hypervisor:
- instalar KVM
- crear una máquina virtual
- arrancarla y comprobar su estado
Parte 1: Instalación de KVM¶
Paso 2: Verificar instalación¶
Paso 3: Añadir usuario a grupo¶
Aplicar cambios:
Parte 2: Crear máquina virtual¶
Paso 1: Descargar ISO¶
Paso 2: Crear VM con virt-install¶
virt-install \
--name test-vm \
--ram 2048 \
--vcpus 2 \
--disk path=/var/lib/libvirt/images/test-vm.qcow2,size=10 \
--os-type linux \
--os-variant ubuntu22.04 \
--cdrom ubuntu-22.04.iso \
--network network=default \
--graphics none
Explicación clave¶
- --name → nombre VM
- --ram → memoria
- --vcpus → CPU
- --disk → almacenamiento
- --network → red virtual
Parte 3: Gestión de la VM¶
Listar máquinas¶
Arrancar VM¶
Apagar VM¶
Acceder a consola¶
Salir:
Output esperado¶
Errores Comunes y Troubleshooting¶
1. CPU sin soporte de virtualización¶
Causa:
- VT-x/AMD-V deshabilitado en BIOS
Solución:
activar en BIOS/UEFI.
2. Permisos insuficientes¶
Errores al usar virsh.
Solución:
3. Servicio libvirt caído¶
4. Red no funcional¶
Reiniciar red:
5. Disco no encontrado¶
Verificar ruta y permisos en:
Buenas Prácticas (Nivel Senior)¶
1. Uso de virtio¶
Mejora rendimiento:
2. Separación de almacenamiento¶
- sistema → disco principal
- datos → volúmenes independientes
3. Snapshots¶
Permiten rollback rápido:
4. Networking avanzado¶
- bridges para integración real
- VLANs en entornos complejos
5. Automatización¶
Integrar con:
- Ansible
- Terraform
6. Seguridad¶
- aislar redes virtuales
- limitar acceso a libvirt
- usar SELinux/AppArmor
7. Monitorización¶
- uso de CPU/RAM
- I/O discos
- latencias
8. Backup de VMs¶
- copiar discos apagados
- usar snapshots coherentes
9. Overcommit controlado¶
Evitar saturar host:
- CPU overcommit moderado
- RAM con ballooning
Resumen y Siguiente Paso¶
Has aprendido a desplegar y gestionar virtualización con KVM, comprendiendo su arquitectura, instalación y operación en entornos Linux. Este conocimiento es la base para construir infraestructuras virtualizadas eficientes y escalables.
El siguiente paso es evolucionar hacia modelos más ligeros y portables:
➡️ 10.2 Containers — Virtualización a nivel de sistema operativo con Docker y tecnologías relacionadas.