The libvirt approach: The KVM way
5 comentariosMa, 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:
- Operaciones relacionadas con el ciclo de vida de máquinas virtuales tales como, iniciar, detener, pausar, guardar, restaurar o migrar.
- Operaciones de conexión de dispositivos en caliente incluyendo, discos, interfaces de red, memoria y CPU.
- Soporte para máquinas remotas, todas las funcionalidades de libvirt son accesibles en cualquier máquina que ejecute el demonio libvirt, a través de varios transportes seguros como SSH, STARTLS/SSL y SASL.
¿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:
- Node: La máquina física o host.
- Hypervisor: Capa de software que permite virtualizar un conjunto de máquinas.
- Domain: Instancia de un sistema operativo que se ejecuta en una máquina
virtual proporcionada por el hypervisor. - Pool: Recurso de almacenamiento para contener volumes y manejar discos
físicos, servidores NFS, grupos LVM, entre otros. - Volume: volumen de almacenamiento que se asigna a un guest. Puede ser un dispositivo de bloque, un archivo raw o de un formato especial.
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
libvirt-bintoolkit de herramientas y APIs.libvirt-daemonnecesario para la administración remota.qemu-kvmhypervisor y módulos del kernel necesarios.bridge-utilsherramientas para el soporte de redes de tipo bridge.
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:
I my good. Ahora mismo comienzo a testear esto.
Me puedes traducir lo primero que dices en el comentario?
Por otra parte:
Oh my god! That’s awesome!
Congrats! Buen artículo, creo que te enredaste un poco con la autenticación TLS, con SSH lo encuentro mucho más simple.
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
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.