sudo: Jack of all trades, master of some

The libvirt approach: The KVM way

5 comentarios

Ma, libvirt is fucking awesome!

Introducción

Este material pretende describir los elementos fundamentales para la administración y mantenimiento de un entorno de virtualización seguro utilizando libvirt y KVM sobre Debian GNU/Linux.

Está concebido para utilizarse como una referencia rápida, en la que se describen procesos, conceptos y procedimientos de manera concisa y simple con un enfoque en el sector de empresas pequeñas, medianas así como para usuarios domésticos.

En esta revisión no están detalladas las operaciones con virt-manager este documento ya es bastante extenso y con elementos muy técnicos. virt-manager: The easy path es actualmente un borrador que será publicado una vez listo y resultará un excelente complemento de este.

Existen otras soluciones basadas en libvirt y orientadas a infraestructuras de virtualización mucho más grandes. Por solo citar algunos ejemplos están: oVirt y Openstack.

Siempre son bienvenidas las preguntas, correcciones, sugerencias, críticas y experiencias.

¿Qué es libvirt?

Libvirt es una colección de software que permite, de una forma conveniente, administrar máquinas virtuales y otras funcionalidades de virtualización, como almacenamiento e interfaces de red.

Libvirt se divide básicamente en una biblioteca API, libvirtd (demonio) y virsh (utilidad de líneas de comando).

Entre las características fundamentales están:

¿Qué es KVM?

KVM (Kernel-based Virtual Machine) es una solución de virtualización completa (full virtualization) para Linux en hardware x86 con capacidades de extensiones de virtualización (Intel VT o AMD-V).

KVM consiste en un módulo del kernel (kvm.ko), que proporciona la infraestructura básica de virtualización y un módulo específico para cada procesador (kvm-intel.ko o kvm-amd.ko).

KVM permite ejecutar varias máquinas virtuales corriendo sistemas operativos sin modificar. Cada máquina virtual tiene dispositivos virtuales privados como tarjetas de red, discos, adaptadores gráficos, etc.

¿Qué es QEMU?

QEMU es un emulador y virtualizador génerico de máquinas que permite ejecutar sistemas operativos y programas para un arquitectura específica en otra diferente.

Cuando se usa como virtualizador, QEMU alcanza un rendimiento casi nativo ejecutando el código de la máquina virtual (guest) directamente en el CPU de la máquina física (host).

Terminología

Es importante dominar la terminología utilizada por libvirt, en cualquier documento, referencia, ayuda se usan los siguientes términos:

Requerimientos mínimos

Instalar Debian GNU/Linux preferentemente desde el netinstall para tener un sistema base mínimo que servirá de plataforma para libvirt.

Verificar que el CPU soporta virtualización por hardware ejecutando el comando egrep -wo '(vmx|svm)' /proc/cpuinfo | sort | uniq en la máquina que actuará como servidor, si se obtiene vmx (Intel) o svm (AMD) significa que el procesador soporta esta tecnología. Si la salida es nula es imposible continuar a partir de este punto.

Los requerimientos de hardware dependen de las exigencias de los servicios. Siempre se recomienda tener al menos 4GB de RAM, suficiente espacio para el almacenamiento y un procesador relativamente moderno para soportar una infraestructura modesta.

Instalación de paquetes necesarios

aptitude install libvirt-bin libvirt-daemon qemu-kvm bridge-utils

El la máquina que se utilizará para la administración deben instalarse los paquetes libvirt-bin y virt-manager.

Bridged networking

Las dos configuraciones de red más comunes en libvirt son “virtual network” o “shared physical device” en este material se utilizará el modo bridge, en el que la interface de red física se comparte con los guests

Detener la interface que se utilizará para el bridge

ifdown eth0

Modificar la configuración de la interface física.

editor /etc/network/interfaces

auto br0
iface br0 inet static
    address 192.168.0.2
    netmask 255.255.255.0
    network 192.168.0.0
    broadcast 192.168.0.255
    gateway 192.168.0.1
    bridge_ports eth0
    bridge_stp on
    bridge_maxwait 0

Iniciar la interface del bridge.

ifup br0

Administración remota segura a través de SSH

Libvirt permite la administración remota de las máquinas virtuales a través de varios transportes seguros. Para no hacer más extenso el artículo recomiendo leer autenticación SSH a través de llaves. De este modo la comunicación entre la máquina de administración y el servidor de virtualización permanece segura.

El usuario que se utilizará para la administracion remota debe pertenecer al grupo libvirt.

virt-manager

Con las herramientas básicas de libvirt es posible realizar todas las operaciones para manejar la infraestructura de virtualización, sin embargo, la mayoría de los administradores de sistemas en entornos pequeños o medianos se sienten cómodos utilizando herramientas como virt-manager.

virt-manager es una aplicación de escritorio para administrar máquinas virtuales a través de libvirt. Muestra estadísticas de utilización de recursos y rendimiento. Permite la creación de nuevos dominios, configuración, ajustes de recursos y dispositivos virtuales. A través de un visor de VNC y SPICE muestra una consola gráfica del dominio.

virt-manager requiere de un entorno gráfico, lo que implicaría la instalación de dependencias extras y un impacto en el consumo de recursos. Por tanto es recomendable la administración remota desde una máquina con un entorno gráfico.

Conexión remota

Para conectar remotamente virt-manager con el servidor de virtualización vía SSH:

File > Add Connection, marcar Connect to remote host, seleccionar el método SSH y en el campo hostname la dirección IP o FQDN del servidor.

De aquí en adelante las operaciones deben ser mucho más sencillas gracias a la intuitiva interface de virt-manager.

Referencias y lecturas adicionales

Este material ha sido exclusivamente confeccionado a partir de las siguientes fuentes:

  1. Libvirt
  2. Libvirt Wiki
  3. virt-tools
  4. virt-manager
  5. KVM
  6. QEMU
Comentarios desactivados
  1. Jorge Luis 5 años atrás

    I my good. Ahora mismo comienzo a testear esto.

    1. @Jorge Luis

      Me puedes traducir lo primero que dices en el comentario?
      Por otra parte:
      Oh my god! That’s awesome!

  2. dhunter 5 años atrás

    Congrats! Buen artículo, creo que te enredaste un poco con la autenticación TLS, con SSH lo encuentro mucho más simple.

    1. @dhunter

      De hecho me faltó el soporte de VNC over TLS, voy a darle una actualización al artículo, quitando la sección de TLS, y en otro post trato el TLS para el que desee usarlo, personalmente prefiero esta autenticación

      1. dhunter 5 años atrás
        @oneohthree

        Por lo que leo de TLS está bueno para despliegues masivos con CA y todo cuento (PaaS, Digital Ocean, Linode), es mucho más pro, pero para los que probamos libvirt ahora el SSH va sobrado.

        Yo no me canso de maravillarme del server que tengo acá, la combinación Debian 8 con systemd, libvirt y el último KVM, corre como la seda, que rendimiento.