Saltearse al contenido

Orquestación de VMs con KVM/Libvirt

🖧 Infrastructure Context
Network Topology Diagram

Access via SSH from the default terminal. The cluster topology is defined below:

📄 /etc/hosts (Cluster Inventory)

# Management & Controller
10.0.0.15   terminal       # Main Entry Point

# Web & Application Tier
10.0.0.60   web-srv1   # Nginx / Apache
10.0.0.70   app-srv1    # Backend App

# Data Persistence Tier
10.0.0.80   data-001    # Primary DB
10.0.0.90   data-002    # Replica / Backup

# Virtualization & Containers
10.0.0.100  kvm-001        # Libvirt Hypervisor
10.0.0.110  docker-001     # Container Runtime
⚠️
Constraint: Nested SSH is forbidden. Connect directly from terminal to target IPs.

Contexto de Negocio: El equipo de QA requiere una instancia de cómputo dedicada y aislada en el hipervisor kvm-001 para pruebas de integración. El entorno debe ser aprovisionado usando herramientas CLI estándar para asegurar la reproducibilidad.

Objetivos Técnicos:

  1. Estado del Host: Validar el estado del stack qemu-kvm y libvirtd.
  2. Almacenamiento: Aprovisionar un volumen qcow2 de 10 GiB (Thin Provisioned) llamado qa-vm-disk.qcow2.
  3. Definición de Instancia (qa-vm01):
    • Specs: 1 vCPU, 1024 MiB RAM.
    • Red: Bridge NAT por defecto.
    • Consola: Redirección serie (Modo Headless).
  4. Ciclo de Vida: Habilitar auto-inicio en el arranque y realizar prueba de apagado controlado.

  1. Acceso al Nodo Hipervisor

    Conecte al host de virtualización.

    Ventana de terminal
    ssh kvm-001
  2. Verificar Prerrequisitos del Host

    Asegúrese de que el demonio libvirt está activo y habilitado.

    Ventana de terminal
    sudo systemctl is-active libvirtd
    # Si inactivo: sudo systemctl enable --now libvirtd
  3. Aprovisionar Volumen de Almacenamiento

    Cree el disco virtual usando qemu-img.

    Ventana de terminal
    sudo qemu-img create -f qcow2 /var/lib/libvirt/images/qa-vm-disk.qcow2 10G
  4. Definir y Arrancar Instancia

    Ejecute virt-install con parámetros para entorno headless (--graphics none).

    Ventana de terminal
    sudo virt-install \
    --name qa-vm01 \
    --ram 1024 \
    --vcpus 1 \
    --disk path=/var/lib/libvirt/images/qa-vm-disk.qcow2,format=qcow2 \
    --os-variant rocky9 \
    --network network=default \
    --graphics none \
    --console pty,target_type=serial \
    --location "https://download.rockylinux.org/pub/rocky/9/BaseOS/x86_64/os/" \
    --extra-args "console=ttyS0"

    Tip: Para desconectarse de la consola sin matar la VM, presione Ctrl + ].

  5. Configurar Auto-inicio

    Asegure que la VM sobrevive a reinicios del host.

    Ventana de terminal
    sudo virsh autostart qa-vm01
  6. Validar Control de Ciclo de Vida

    Verifique que la VM corre, luego solicite un apagado ACPI.

    Ventana de terminal
    # Verificar estado
    sudo virsh list --all
    # Solicitud de apagado controlado
    sudo virsh shutdown qa-vm01
  • “Guest name already in use”: Si un intento previo falló parcialmente, limpie los metadatos:
    Ventana de terminal
    sudo virsh destroy qa-vm01
    sudo virsh undefine qa-vm01
  • Consola Congelada: Si la consola no muestra salida, asegúrese de que --extra-args "console=ttyS0" fue pasado correctamente para redirigir los logs del kernel al puerto serie.