¿Cómo configurar máquinas virtuales y contenedores?

Aprender Certificado Fundación Linux en España contenido Técnicos desde Cero en CiberED

La virtualización y los contenedores son tecnologías que permiten ejecutar múltiples entornos aislados sobre un mismo hardware físico. Aunque a menudo se confunden, tienen enfoques distintos:

  • Máquinas virtuales (VMs): emulan hardware completo, ejecutando un sistema operativo invitado independiente. Proporcionan un aislamiento fuerte, pero consumen más recursos.
  • Contenedores: comparten el kernel del host, aislando procesos, redes y sistemas de archivos mediante namespaces y cgroups. Son ligeros y rápidos, ideales para desplegar aplicaciones.

30.1. Introducción

En el contexto de la administración de sistemas Linux, es fundamental conocer las herramientas más comunes:

  • KVM/QEMU: virtualización completa basada en el kernel (Kernel-based Virtual Machine), gestionada con virsh y virt-manager.
  • LXC: contenedores de sistema, similares a entornos completos pero compartiendo kernel.
  • Docker: contenedores de aplicaciones, muy populares para microservicios.

El examen LFCS puede incluir tareas básicas de gestión de estos entornos: instalar KVM, crear una VM, gestionar su ciclo de vida, configurar redes virtuales, y trabajar con contenedores LXC o Docker.

Parte I: Virtualización con KVM/QEMU

30.2. ¿Qué es KVM/QEMU?

KVM es un módulo del kernel que permite que Linux actúe como hipervisor, aprovechando las extensiones de virtualización del procesador (Intel VT-x o AMD-V). QEMU es un emulador que puede usar KVM para ejecutar máquinas virtuales con rendimiento casi nativo. La gestión se realiza con libvirt y sus herramientas (virsh, virt-install, virt-manager).

30.3. Instalación de KVM y libvirt

Verificar que el hardware soporta virtualización:

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

Si el resultado es mayor que 0, el soporte existe.

Instalar paquetes..

Debian/Ubuntu:

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

RHEL/CentOS/Fedora:

sudo yum install qemu-kvm libvirt virt-install bridge-utils

Habilitar e iniciar el servicio:

sudo systemctl enable --now libvirtd

Añadir usuario al grupo libvirt (o kvm) para gestionar sin sudo:

sudo usermod -aG libvirt $(whoami)

Cerrar sesión y volver a entrar para aplicar.

30.4. Herramientas de gestión

  • virsh: interfaz de línea de comandos para administrar dominios (VMs), redes, almacenamiento.
  • virt-install: crear VMs desde línea de comandos.
  • virt-manager: interfaz gráfica (requiere entorno gráfico).
  • virt-viewer: consola gráfica de una VM.

30.5. Redes virtuales

libvirt crea una red virtual por defecto llamada default, normalmente con NAT hacia el host, usando un bridge virtual virbr0. Las VMs conectadas a esta red obtienen IP automáticamente (DHCP) y salen a Internet a través del host.

Para listar redes:

virsh net-list --all
virsh net-dumpxml default

30.6. Crear una máquina virtual

Con virt-install, ejemplo para instalar una VM con ISO:

sudo virt-install \
  --name servidor1 \
  --ram 2048 \
  --vcpus 2 \
  --disk path=/var/lib/libvirt/images/servidor1.qcow2,size=10,format=qcow2 \
  --os-type linux \
  --os-variant ubuntu20.04 \
  --network network=default \
  --graphics vnc \
  --cdrom /ruta/iso/ubuntu.iso
  • --name: nombre de la VM.
  • --ram: memoria en MB.
  • --vcpus: número de CPUs virtuales.
  • --disk: disco virtual (formato qcow2).
  • --os-type y --os-variant: optimizaciones según SO.
  • --network: red virtual.
  • --graphics vnc: salida gráfica.
  • --cdrom: ISO de instalación.

También se puede usar --location para instalación desde red, o --pxe.

30.7. Gestión del ciclo de vida con virsh

  • Listar VMs: virsh list --all
  • Iniciar: virsh start servidor1
  • Apagar: virsh shutdown servidor1 (envía ACPI)
  • Forzar apagado: virsh destroy servidor1
  • Suspender: virsh suspend servidor1
  • Reanudar: virsh resume servidor1
  • Reiniciar: virsh reboot servidor1
  • Eliminar VM (apagada): virsh undefine servidor1
  • Conectar a consola: virsh console servidor1 (requiere configuración de consola serie)

30.8. Almacenamiento

Los discos virtuales suelen ser archivos qcow2 en /var/lib/libvirt/images/. Se pueden crear y asociar con virsh:

virsh vol-create-as default disco_extra.qcow2 5G
virsh attach-disk servidor1 /var/lib/libvirt/images/disco_extra.qcow2 vdb --persistent

También se pueden usar pools de almacenamiento (virsh pool-list, virsh vol-list).

30.9. Clonación y plantillas

Se puede clonar una VM apagada:

virt-clone --original servidor1 --name servidor1-clon --auto-clone

Parte II: Contenedores LXC

30.10. ¿Qué es LXC?

LXC (Linux Containers) es un sistema de contenedores a nivel de sistema operativo, que permite ejecutar múltiples entornos Linux aislados pero compartiendo el kernel del host. Es más ligero que una VM pero menos aislado. LXC se gestiona con lxc-* y se apoya en cgroups y namespaces.

30.11. Instalación

En Debian/Ubuntu:

sudo apt install lxc lxc-templates

En RHEL/CentOS (EPEL puede ser necesario):

sudo yum install lxc lxc-templates

Verificar entorno: lxc-checkconfig.

30.12. Crear un contenedor

Usar una plantilla (por ejemplo, Debian o Ubuntu):

sudo lxc-create -n contenedor1 -t download -- -d ubuntu -r focal -a amd64

Esto descarga la imagen y crea el contenedor en /var/lib/lxc/contenedor1/.

30.13. Gestionar contenedores

  • Listar: sudo lxc-ls
  • Iniciar: sudo lxc-start -n contenedor1 -d
  • Conectar a consola: sudo lxc-attach -n contenedor1
  • Detener: sudo lxc-stop -n contenedor1
  • Destruir: sudo lxc-destroy -n contenedor1

30.14. Configuración

El archivo de configuración está en /var/lib/lxc/contenedor1/config. Ahí se definen redes, recursos y montajes.

Parte III: Contenedores Docker (aplicaciones)

30.15. Docker: contenedores de aplicaciones

Docker empaqueta aplicaciones con todas sus dependencias en imágenes ligeras. Aunque no siempre está en el temario LFCS, es útil conocerlo.

30.16. Instalación

  • Debian/Ubuntu: sudo apt install docker.io
  • RHEL/CentOS: sudo yum install docker (o docker-ce desde repos oficiales)

Habilitar e iniciar:

sudo systemctl enable --now docker

30.17. Comandos esenciales

  • Buscar imagen: docker search nginx
  • Descargar imagen: docker pull nginx
  • Ejecutar contenedor: docker run -d --name web -p 8080:80 nginx
  • Listar contenedores: docker ps, docker ps -a
  • Detener: docker stop web
  • Iniciar: docker start web
  • Eliminar contenedor: docker rm web
  • Listar imágenes: docker images
  • Eliminar imagen: docker rmi nginx

30.18. Ejercicios prácticos

  1. Instalar KVM/libvirt: Verifica soporte de virtualización. Instala KVM y libvirt. Habilita el servicio. Añade tu usuario al grupo libvirt.

  2. Crear una máquina virtual: Descarga una ISO de una distribución ligera (Alpine, Debian netinst). Crea una VM con 1 GB RAM, 1 vCPU, disco de 5 GB, red default. Usa virt-install. Una vez arrancada, gestiona su ciclo de vida con virsh (list, start, shutdown, destroy, undefine).

  3. Redes virtuales: Lista las redes con virsh net-list. Inspecciona la red default. Crea una red aislada (virsh net-define y net-start) y conecta una VM a ella.

  4. Almacenamiento: Crea un volumen de disco adicional y adjúntalo a una VM apagada. Verifica con virsh domblklist.

  5. LXC: Instala LXC. Crea un contenedor Ubuntu usando lxc-create -t download. Inícialo, accede a su consola y ejecuta algunos comandos. Detenlo y destrúyelo.

  6. Docker: Instala Docker. Descarga la imagen de nginx y ejecuta un contenedor exponiendo el puerto 8080. Prueba con curl localhost:8080. Detén y elimina el contenedor.

30.19. Resumen y consejos para LFCS

  • KVM/QEMU es la solución de virtualización nativa en Linux. La gestión con virsh es fundamental.
  • Las redes virtuales de libvirt facilitan la conexión de VMs; conoce al menos la red default y cómo crear otras.
  • LXC proporciona contenedores de sistema; su gestión es simple con lxc-*.
  • Docker es el estándar para contenedores de aplicaciones; los comandos básicos (pull, run, ps, stop, rm) son imprescindibles.
  • En el examen, puedes encontrarte con tareas de creación y gestión de VMs o contenedores. Practica con virsh, lxc y docker en un entorno de laboratorio.

Con esto has completado el bloque de virtualización y contenedores. En el siguiente capítulo aprenderás los fundamentos de Git para gestionar proyectos de manera eficiente, una herramienta esencial para el control de versiones.

Vistas: 0

Descubre más desde CIBERED

Suscríbete y recibe las últimas entradas en tu correo electrónico.

Scroll al inicio