Guía completa de KVM en Ubuntu: instalación, configuración y uso práctico de la virtualización

目次

Introducción

Ubuntu es una de las distribuciones de Linux más utilizadas en todo el mundo. Es ampliamente adoptada en entornos que van desde usuarios individuales hasta empresas, siendo muy empleada en la construcción de servidores y entornos de desarrollo. Si deseas implementar una virtualización avanzada en Ubuntu, una de las opciones más potentes es KVM (Kernel-based Virtual Machine).

KVM es una tecnología de virtualización de tipo hipervisor integrada de forma nativa en el kernel de Linux. Aprovecha las funciones de virtualización de hardware (Intel VT o AMD-V) para ofrecer un alto rendimiento y estabilidad. Al ser de código abierto, permite construir una infraestructura de virtualización avanzada sin costes de licencia, lo cual constituye una de sus grandes ventajas.

La virtualización puede sonar compleja para muchos usuarios. Sin embargo, con la combinación de Ubuntu y KVM, incluso los principiantes pueden crear y gestionar máquinas virtuales de forma relativamente sencilla. Por supuesto, también resulta recomendable para usuarios intermedios que quieran optimizar los recursos de servidores físicos, así como para ingenieros que necesiten virtualizar sistemas de producción.

En este artículo explicaremos paso a paso cómo construir un entorno de virtualización con KVM en Ubuntu: desde la instalación inicial y el uso básico, hasta consejos prácticos, resolución de problemas comunes y recomendaciones de optimización. Si estás pensando en implementar KVM o deseas aprovechar al máximo la virtualización en Ubuntu, este recurso es para ti.

Comparación de KVM con otras tecnologías de virtualización

Existen diferentes tecnologías de virtualización, pero en entornos Ubuntu las más comunes son KVM, VirtualBox y VMware. A continuación, detallamos las características, diferencias y ventajas/desventajas de cada una.

Tipos principales de tecnologías de virtualización

  • KVM (Kernel-based Virtual Machine)
    KVM está integrado en el kernel de Linux, por lo que requiere un sistema anfitrión basado en Linux. Su gran fortaleza es que, gracias a las funciones de virtualización de hardware (Intel VT o AMD-V), ofrece un rendimiento elevado y es apto para entornos de producción. Puede gestionarse mediante comandos o herramientas gráficas como virt-manager.
  • VirtualBox
    VirtualBox es un software de virtualización desarrollado por Oracle, diseñado principalmente para escritorios y compatible con Windows, Mac y Linux. Su interfaz es sencilla, lo que lo hace popular para uso personal y aprendizaje. Sin embargo, no siempre es la mejor opción para entornos de producción o cargas intensivas en comparación con KVM.
  • VMware (VMware Workstation/ESXi, etc.)
    VMware es una solución comercial ampliamente utilizada en entornos empresariales. Ofrece funciones avanzadas y soporte profesional, pero requiere licencias de pago. Es muy común en grandes empresas, aunque supone un coste significativo frente a opciones de código abierto.

Ventajas de KVM

  • Alto rendimiento y estabilidad
    Al formar parte del kernel de Linux, KVM gestiona los recursos de manera eficiente y permite un control detallado sobre CPU y memoria asignados a cada máquina virtual. Es suficientemente estable para sistemas críticos en producción.
  • Código abierto y sin costes de licencia
    KVM es completamente open source, lo que lo convierte en la opción ideal para quienes buscan virtualización avanzada con bajo coste.
  • Amplias herramientas de gestión y automatización
    Se puede administrar con herramientas de línea de comandos (virsh, virt-install) o interfaces gráficas (virt-manager). Además, facilita la automatización y la integración en flujos de DevOps.

Desventajas de KVM

  • Limitado a Linux como sistema anfitrión
    KVM requiere un sistema Linux en el host, por lo que no es compatible de forma nativa con Windows o macOS.
  • Requiere conocimientos de Linux
    Aunque existen herramientas gráficas, la configuración avanzada de red o la resolución de problemas suelen requerir experiencia en administración Linux.

¿Cuándo elegir KVM?

  • Cuando se desea optimizar los recursos de servidores físicos
  • Para virtualizar sistemas de producción o servidores
  • Si se busca una plataforma potente sin costes de licencia
  • Cuando se planea automatizar la administración de servidores Linux

KVM es recomendable no solo para administradores experimentados, sino también para quienes quieran dar sus primeros pasos en la gestión profesional de servidores.

Configuración del entorno KVM en Ubuntu [Instalación y ajustes iniciales]

Para utilizar KVM en Ubuntu es necesario cumplir con algunos requisitos previos y realizar la instalación de los paquetes correspondientes. En esta sección explicamos los pasos a seguir para que incluso principiantes puedan configurar su entorno de virtualización de manera fluida.

Requisitos y comprobaciones previas

El procesador de tu ordenador o servidor debe ser compatible con funciones de virtualización asistida por hardware (Intel VT o AMD-V).
Primero, verifica con el siguiente comando si la función está habilitada:

egrep -c '(vmx|svm)' /proc/cpuinfo

Si el resultado es un valor mayor o igual a 1, la virtualización está disponible.
Además, es imprescindible que se trate de una versión de Ubuntu de 64 bits.

Instalación de KVM y paquetes necesarios

Instala el paquete principal de KVM junto con las herramientas asociadas (libvirt, virt-manager, etc.).
Ejecuta los siguientes comandos en orden:

sudo apt update
sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager
  • qemu-kvm: componente principal de virtualización KVM
  • libvirt-daemon-system, libvirt-clients: servicios de gestión de máquinas virtuales
  • bridge-utils: utilidades para redes en puente
  • virt-manager: herramienta GUI para administrar máquinas virtuales

Configuración de grupos y permisos de usuario

Tras la instalación, añade el usuario actual a los grupos kvm y libvirt. Así podrás gestionar máquinas virtuales sin necesidad de privilegios de superusuario.

sudo usermod -aG libvirt $(whoami)
sudo usermod -aG kvm $(whoami)

Para aplicar los cambios, cierra la sesión y vuelve a iniciarla, o reinicia el sistema.

Verificación del servicio KVM

Comprueba que KVM se haya instalado correctamente y que los servicios estén en ejecución:

sudo systemctl status libvirtd

Si aparece el estado active (running), todo funciona correctamente.
También puedes verificar que KVM está activo con:

virsh list --all

Si se muestra la lista de máquinas virtuales (vacía en este momento), significa que el entorno de KVM está listo.

Creación y operaciones básicas de máquinas virtuales

Una vez configurado el entorno, puedes empezar a crear y administrar máquinas virtuales. KVM ofrece tanto herramientas gráficas (virt-manager) como de línea de comandos (virt-install, virsh), que pueden utilizarse según la situación.

Creación de máquinas virtuales con virt-manager (GUI)

virt-manager permite crear y gestionar máquinas virtuales mediante una interfaz gráfica intuitiva. Es especialmente útil si utilizas un entorno de escritorio Linux.

  1. Ejecuta virt-manager desde el menú de aplicaciones o la terminal.
  2. Haz clic en el botón “Nuevo”.
  3. Selecciona la ubicación de la imagen ISO y elige el tipo de sistema operativo invitado (ej.: Ubuntu, Windows).
  4. Configura CPU, memoria y almacenamiento asignados.
  5. Revisa la configuración y haz clic en “Finalizar” para iniciar la instalación de la máquina virtual.

Con virt-manager también puedes iniciar, detener, reiniciar máquinas, crear snapshots y configurar redes o discos adicionales.

Creación de máquinas virtuales con virt-install (CLI)

En servidores o entornos remotos, suele ser más práctico crear máquinas virtuales mediante la línea de comandos.
Ejemplo de uso básico de virt-install:

sudo virt-install 
  --name ubuntu-vm 
  --memory 2048 
  --vcpus 2 
  --disk size=20 
  --cdrom /path/to/ubuntu.iso 
  --os-type linux 
  --os-variant ubuntu20.04 
  --network network=default 
  --graphics vnc
  • --name: nombre de la máquina virtual
  • --memory: memoria asignada en MB
  • --vcpus: número de núcleos de CPU
  • --disk: tamaño del disco virtual en GB
  • --cdrom: ruta de la ISO de instalación
  • --os-type y --os-variant: tipo y versión del sistema operativo
  • --network: configuración de red
  • --graphics: modo gráfico (ej.: VNC)

Una vez ejecutado, la instalación se abrirá en modo gráfico o vía VNC.

Gestión básica: inicio, apagado y snapshots

Algunas operaciones comunes con virsh:

  • Iniciar una máquina virtual
virsh start <nombre>
  • Apagar una máquina virtual
virsh shutdown <nombre>
  • Forzar apagado
virsh destroy <nombre>
  • Eliminar una máquina virtual
virsh undefine <nombre>
  • Crear un snapshot
virsh snapshot-create-as <nombre> <snapshot>

Estas mismas acciones también están disponibles en la interfaz gráfica de virt-manager.

Configuración y expansión de red

La configuración de red es un aspecto fundamental al operar máquinas virtuales con KVM. Aunque la configuración por defecto suele ser suficiente en muchos casos, para entornos de producción o uso corporativo es necesario personalizar la red. En esta sección explicamos las configuraciones básicas y algunas opciones avanzadas.

Diferencias entre NAT (virbr0) por defecto y red en puente

Al instalar KVM, se crea automáticamente un puente virtual llamado virbr0, que utiliza el modo NAT (Network Address Translation). Sus características principales son:

  • Características de virbr0 (modo NAT)
  • Las máquinas virtuales pueden acceder a Internet.
  • Para acceder a la VM desde el host u otra red, es necesario configurar reenvío de puertos.
  • Ideal para entornos domésticos, de desarrollo o pruebas.

En cambio, una red en puente (bridge) conecta las máquinas virtuales directamente a la red física:

  • Características de la red en puente
  • La máquina virtual forma parte del mismo segmento de red que el host.
  • Es accesible directamente desde otros equipos físicos o servidores.
  • Es la opción recomendada para servidores en producción y servicios expuestos en red.

Creación y configuración de un puente de red personalizado (LAN)

Si necesitas que tus máquinas virtuales sean accesibles desde otros equipos, deberás configurar un puente de red. A continuación, un ejemplo con la interfaz física eth0:

  1. Instalar bridge-utils (si no lo está ya):
sudo apt install bridge-utils
  1. Editar el archivo de configuración de red
    En Ubuntu 18.04 o superior se utiliza Netplan.
    Ejemplo de configuración en /etc/netplan/01-netcfg.yaml:
network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      dhcp4: no
  bridges:
    br0:
      interfaces: [eth0]
      dhcp4: yes
  1. Aplicar cambios
sudo netplan apply
  1. Asignar el nuevo puente a las VMs
    Configura la interfaz de red de la VM en br0 usando virt-manager o virsh.

Configuración de IP fija y reenvío de puertos

  • Dirección IP fija
    Puedes asignar una IP estática dentro de la máquina virtual o usar reservas de DHCP vinculadas a la MAC.
  • Reenvío de puertos (cuando se usa NAT)
    Permite acceder a servicios de la VM desde el host. Ejemplo: redirigir el puerto SSH:
virsh nat-forward --network default --add-port tcp:2222:22

* También puedes configurar reglas más avanzadas editando los archivos XML de libvirt o usando firewalld.

Gestión de almacenamiento y discos

El almacenamiento es otro componente clave en la virtualización con KVM. Aquí veremos los tipos de discos virtuales, la gestión de pools de almacenamiento y la ampliación de discos.

Tipos de discos virtuales: qcow2 y raw

KVM soporta principalmente dos formatos de disco:

  • qcow2
    Formato estándar de KVM.
    Soporta snapshots, compresión y uso eficiente del espacio.
    Ideal para pruebas y entornos flexibles.
  • raw
    Formato simple sin compresión ni conversión.
    Ofrece el máximo rendimiento de E/S.
    Recomendado para producción cuando el rendimiento es prioritario.

Creación y gestión de pools de almacenamiento

KVM organiza el almacenamiento mediante “pools”.

  • Pool por defecto
    El directorio /var/lib/libvirt/images/ se usa como almacenamiento inicial para discos.
  • Crear un nuevo pool
    Ejemplo:
  1. Crear el directorio:
    sudo mkdir /data/kvm-images && sudo chown libvirt-qemu:kvm /data/kvm-images
  2. Definir el pool con virsh:
    virsh pool-define-as --name mypool --type dir --target /data/kvm-images
    virsh pool-autostart mypool
    virsh pool-start mypool

Ampliación de discos y uso de snapshots

  • Ampliar disco virtual
    Ejemplo de añadir 10 GB a un disco qcow2:
sudo qemu-img resize /var/lib/libvirt/images/ubuntu-vm.qcow2 +10G

Después, expande la partición dentro del sistema operativo invitado.

  • Snapshots
    Con discos qcow2 puedes guardar el estado de la VM en cualquier momento:
virsh snapshot-create-as <nombre_vm> <nombre_snapshot>

Muy útil para pruebas, actualizaciones o rollback rápido.

Instalación y operación del sistema operativo invitado

En esta sección veremos cómo instalar sistemas operativos dentro de máquinas virtuales KVM y las mejores prácticas para su operación. Incluye ejemplos de instalación de Ubuntu y Windows, el uso de imágenes ISO y consejos para mejorar el rendimiento.

Procedimiento de instalación de sistemas operativos invitados

KVM soporta múltiples sistemas operativos como invitados, incluyendo Ubuntu, CentOS, Windows, entre otros. A continuación, ejemplos de instalación:

  • Ubuntu
  1. Descarga la última imagen ISO desde el sitio oficial de Ubuntu.
  2. En virt-manager, selecciona “Crear nueva máquina virtual” y elige “Medio de instalación local”.
  3. Indica la ruta del archivo ISO descargado.
  4. Configura CPU, memoria y disco asignados.
  5. Completa la instalación siguiendo los pasos habituales de Ubuntu.
  • Windows
  1. Descarga la ISO de Windows desde el sitio oficial de Microsoft.
  2. Crea una máquina virtual en virt-manager o con virt-install y selecciona la ISO.
  3. Para mejorar el rendimiento, instala los controladores virtio durante la instalación (requiere montar la ISO de virtio además de la de Windows).

Obtención y carga de imágenes ISO

  • Descarga las imágenes ISO de los sistemas operativos desde sus sitios oficiales.
  • En la creación de la VM, especifica la ruta de la ISO para montarla como CD/DVD virtual.
  • Es posible montar varias ISOs al mismo tiempo (ej.: sistema operativo + drivers virtio).

Consejos de operación y optimización del rendimiento

  • Optimización de recursos
    Asigna CPU y memoria de forma equilibrada. Evita sobreasignar recursos, ya que puede afectar al host y a otras VMs.
  • Drivers virtio
    En Windows o distribuciones Linux antiguas, instalar virtio mejora significativamente el rendimiento de red y disco.
  • Deshabilitar servicios innecesarios
    Desactiva servicios que no uses en el SO invitado para ahorrar recursos.
  • Uso de QEMU Guest Agent
    Instalar el agente de invitado permite un control más preciso sobre apagados, estadísticas y comunicación entre host e invitado.

Casos prácticos y consejos de automatización

KVM no solo sirve para crear y ejecutar máquinas virtuales, sino que también puede integrarse en flujos de trabajo de desarrollo, pruebas y operaciones IT. Con scripts o herramientas de automatización, es posible optimizar la gestión de múltiples VMs.

Ejemplos de uso en servidores

  • Entornos de desarrollo y prueba
    Crea VMs separadas por proyecto para probar distintas versiones de sistemas y aplicaciones sin afectar al entorno principal.
  • Servicios internos
    Implementa servidores de archivos, web o bases de datos en VMs independientes. Esto facilita el aislamiento y mejora la capacidad de recuperación en caso de fallo.

Automatización con CLI o Ansible

  • Scripts en CLI
    Ejemplo de creación masiva de VMs con bash:
for i in {1..5}
do
  virt-install --name test-vm-$i --memory 1024 --vcpus 1 \
    --disk size=10 --cdrom /path/to/ubuntu.iso \
    --os-type linux --os-variant ubuntu20.04 \
    --graphics none --network network=default --noautoconsole
done
  • Automatización con Ansible
    Con un playbook, puedes automatizar la creación de VMs, configuración inicial y despliegue de aplicaciones. Muy útil en entornos con múltiples servidores o donde se requiere consistencia en la infraestructura.

Operación estilo “nube”

  • Plantillas de máquinas virtuales
    Crea plantillas de VMs preconfiguradas para desplegar nuevos servidores rápidamente.
  • Integración con APIs y herramientas web
    Libvirt expone APIs que permiten integraciones con paneles de control o sistemas de gestión. Herramientas como Cockpit facilitan la administración visual de VMs en entornos grandes.

Resolución de problemas y errores comunes

Durante la operación de entornos KVM pueden surgir errores relacionados con el arranque de las máquinas virtuales, la red o el rendimiento. En esta sección se presentan los problemas más frecuentes y cómo resolverlos, además de métodos para revisar registros y fuentes de soporte.

Problemas comunes en KVM

  • La máquina virtual no arranca o no se crea
  • La función de virtualización (Intel VT, AMD-V) está deshabilitada en la BIOS/UEFI.
  • No hay suficiente memoria o espacio en disco asignado.
  • El pool de almacenamiento o la ruta de la ISO son incorrectos.
  • Problemas de red
  • La interfaz de red de la VM no está configurada correctamente.
  • Errores en la configuración del puente o del NAT, o fallos en DHCP.
  • Restricciones por firewall o reglas de seguridad.
  • Bajo rendimiento
  • Asignación excesiva o insuficiente de recursos.
  • Falta de instalación de controladores virtio (especialmente en Windows).
  • Cuellos de botella en disco (I/O).

Revisión de logs y flujo básico de solución

Cuando ocurre un problema, revisar los registros es el primer paso:

  • Logs del sistema
sudo journalctl -xe

Busca mensajes de error relacionados con KVM o libvirt.

  • Logs de libvirt
    Revisa los archivos en /var/log/libvirt/ (ej.: libvirtd.log).
  • Logs por VM
    En virt-manager o con virsh puedes ver detalles y registros específicos de cada máquina virtual.
  • Estado de la red
ip a
brctl show
virsh net-list --all

Estos comandos permiten verificar la configuración de interfaces y puentes de red.

Flujo de resolución recomendado:

  1. Identificar cuándo comenzó el problema.
  2. Revisar logs y configuraciones.
  3. Corregir configuraciones, reiniciar servicios o recrear la VM si es necesario.

Uso de documentación y comunidad

Fuentes de soporte útiles:

Seguridad y optimización del rendimiento

Para garantizar un entorno de virtualización seguro y eficiente con KVM, es fundamental aplicar medidas de seguridad y optimización de recursos. A continuación se presentan las más importantes.

Mejoras de seguridad en la virtualización

  • Deshabilitar servicios innecesarios
    Reduce la superficie de ataque desactivando servicios que no se utilicen, tanto en el host como en las VMs.
  • Firewalls y control de acceso
    Configura reglas estrictas con ufw o firewalld. Para SSH, utiliza autenticación con claves, cambia el puerto y considera fail2ban.
  • Aislamiento de VMs
    Separa redes virtuales para servidores críticos, o utiliza redes físicas independientes para limitar el impacto de un posible ataque.
  • Actualizaciones regulares
    Mantén actualizado tanto el host como los sistemas invitados con los últimos parches de seguridad.

Optimización de recursos (CPU, memoria, I/O)

  • Asignación equilibrada
    Distribuye CPU y memoria de manera adecuada, dejando margen al host. Evita asignar más recursos de los que realmente dispones.
  • Optimización del disco
    Para VMs críticas, utiliza SSDs de alto rendimiento. Evita abusar de snapshots en qcow2, ya que pueden degradar el rendimiento.
  • Uso de controladores virtio
    Instalar virtio en los invitados mejora notablemente el rendimiento de red y disco.

Automatización de backups y snapshots

  • Snapshots periódicos
    En VMs de producción, programa snapshots para poder restaurar rápidamente en caso de fallo.
  • Backups de discos y configuraciones
    Haz copias regulares de las imágenes de disco (qcow2, raw) y de los archivos XML de libvirt.
  • Automatización con cron o Ansible
    Integra backups y snapshots en tareas programadas para mayor confiabilidad.

Resumen y recursos de aprendizaje

En este artículo hemos visto cómo instalar, configurar y operar KVM en Ubuntu, desde los fundamentos hasta consejos prácticos de optimización. A continuación, un repaso de los puntos más importantes y recursos adicionales para seguir aprendiendo.

Resumen del artículo

  • Visión general y ventajas de KVM
    KVM es una tecnología de virtualización de alto rendimiento y de código abierto, muy utilizada en servidores Linux.
  • Instalación y configuración
    Revisamos cómo verificar compatibilidad de CPU, instalar paquetes, configurar permisos y crear máquinas virtuales.
  • Red, almacenamiento y gestión
    Explicamos cómo configurar NAT o puentes de red, administrar pools de almacenamiento, expandir discos y usar snapshots.
  • Resolución de problemas y seguridad
    Aprendimos a identificar errores comunes, revisar logs, aplicar medidas de seguridad y optimizar recursos.

Próximos pasos y recursos recomendados

KVM es una plataforma versátil que puede aprovecharse tanto en entornos personales como empresariales. Con los conocimientos básicos adquiridos, puedes ampliar tu experiencia implementando configuraciones más avanzadas y adaptadas a tus necesidades.

Cheat sheet: comandos y configuraciones comunes

Disponer de un listado de comandos y configuraciones frecuentes es muy útil para la administración diaria de VMs con KVM y libvirt.

Comandos principales de KVM/virsh/virt-manager

  • Listar máquinas virtuales
virsh list --all
  • Iniciar una VM
virsh start <nombre_vm>
  • Apagar una VM
virsh shutdown <nombre_vm>
  • Forzar apagado
virsh destroy <nombre_vm>
  • Crear VM con virt-install
virt-install --name <nombre> --memory <MB> --vcpus <núcleos> \
  --disk size=<GB> --cdrom <ruta_ISO> \
  --os-type linux --os-variant ubuntu20.04
  • Eliminar configuración de VM
virsh undefine <nombre_vm>

Ejemplos de configuración de red

  • Listar redes
virsh net-list --all
  • Crear una nueva red (ejemplo con XML)
    Coloca el archivo XML en /etc/libvirt/qemu/networks/ y actívalo:
virsh net-define <archivo.xml>
virsh net-start <nombre_red>

Gestión de almacenamiento

  • Listar pools de almacenamiento
virsh pool-list --all
  • Expandir disco
sudo qemu-img resize /path/to/disk.qcow2 +10G
  • Crear snapshot
virsh snapshot-create-as <nombre_vm> <nombre_snapshot>

Otros tips frecuentes

  • Configurar arranque automático de una VM
virsh autostart <nombre_vm>
  • Mostrar información detallada de una VM
virsh dominfo <nombre_vm>
  • Iniciar virt-manager (modo gráfico)
virt-manager

FAQ (Preguntas frecuentes)

A continuación, algunas preguntas frecuentes relacionadas con la configuración y uso de KVM en Ubuntu.

Q1: ¿Cuál es la diferencia entre KVM, VirtualBox y VMware?

A1: KVM está integrado en el kernel de Linux y es ideal para servidores y producción. VirtualBox es más sencillo y orientado a escritorios. VMware ofrece funciones avanzadas y soporte comercial, pero requiere licencias de pago.

Q2: ¿Cómo hago copias de seguridad de las VMs?

A2: Copia los archivos de disco virtual (qcow2 o raw) y guarda los XML de configuración. También puedes usar snapshots de virsh.

Q3: ¿Cómo usar dispositivos USB en una VM?

A3: En virt-manager añade hardware USB, o configura passthrough con virsh para montar memorias, discos externos o impresoras.

Q4: ¿Cómo iniciar una VM automáticamente con el host?

A4: Usa virsh autostart <nombre_vm> para que arranque con el sistema anfitrión.

Q5: ¿Qué hacer si la VM va lenta?

A5: Revisa la asignación de CPU/memoria, cambia a discos raw para mejor rendimiento, instala virtio y usa almacenamiento rápido (SSD).

Q6: Tengo problemas de red, ¿cómo los soluciono?

A6: Verifica el estado de redes con virsh y brctl. Revisa configuración de Netplan o NetworkManager y recrea redes si es necesario.

Q7: ¿Es posible crear clústeres o alta disponibilidad (HA) con KVM?

A7: Sí, combinando KVM con herramientas como Pacemaker, Corosync y almacenamiento compartido (NFS, iSCSI). Esto permite alta disponibilidad y migración en vivo, aunque requiere conocimientos avanzados.