Crear servidores KVM en Ubuntu 14.04
Algunas veces necesito una maquina virtual para probar aplicaciones antes de desplegarlas, o para trastear con alguna configuración, este tutorial describe el método para crearlas más rápido y sencillo que he encontrado.
Instalación
En el huésped en el que se van a alojar las maquinas, son necesarios los siguientes paquetes:
$ sudo apt-get install ubuntu-virt-server qemu-kvm libvirt-bin ubuntu-vm-builder bridge-utils
desde donde vayas gestionar las maquinas, es recomendable instalar:
$ sudo apt-get install virt-manager
Configuracion de red
El siguiente paso es modificar la configuración de red del anfitrión, yo prefiero usar bridging de manera que las maquinas virtuales tengan asignadas direcciones de red validas. El funcionamiento es ingenioso, se crea un switch virtual usando la tarjeta de red física, al que los huéspedes se conectan como si se tratara de una conexión real.
Solo es necesario modificar en archivo /etc/network/interfaces, por ejemplo si este es el archivo original:
#/etc/network/interfaces
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.0.42
network 192.168.0.0
netmask 255.255.255.0
broadcast 192.168.0.255
gateway 192.168.0.1
dns-nameserver 80.53.60.25
Debemos convertir el interfaz eth0 en br0 y añadir las opciones:
#/etc/network/interfaces
auto lo
iface lo inet loopback
auto br0
iface br0 inet static
address 192.168.0.42
network 192.168.0.0
netmask 255.255.255.0
broadcast 192.168.0.255
gateway 192.168.0.1
dns-nameserver 80.53.60.25
bridge_ports eth0
bridge_stp off
bridge_fd 0
bridge_maxwait 4
Tras esto reinicia el sistema o el servicio de red.
$ /etc/init.d/networking restart
$ reboot
Configuración del sistema
Añade un usuario al grupo de libvirtd y kvm para que pueda manipulas las maquinas, sin necesidad de ser root:
$ sudo adduser `id -un` libvirtd
$ sudo adduser `id -un` kvm
Crea un directorio donde almacenar las imágenes KVM, por ejemplo:
$ mkdir /home/kvm-images
$ chown libvirt-qemu:libvirtd /home/kvn-images
Adicionalmente puedes crea un par de claves ssh para el usuario, de forma que no tengas que introducir la clave cada vez que administras remotamente la máquina. En este post explico como se hace.
Crear la máquina virtual
Con todo configurado ya estamos listos para crear la máquina con el comando ubuntu-vm-builder:
$ sudo ubuntu-vm-builder kvm trusty \
--domain servidor \
--hostname kvm1 \
--arch amd64 \
--mem 2048 \
--cpus 1 \
--rootsize 20000 \
--swapsize 2048 \
--destdir /home/kvm-images/kvm2 \
--user secnot \
--pass secreto \
--bridge br0 \
--ip 192.168.0.201 \
--mask 255.255.255.0 \
--net 192.168.0.0 \
--bcast 192.168.0.255 \
--gw 192.168.0.1 \
--dns 80.53.60.25 \
--components main,universe \
--addpkg acpid \
--addpkg openssh-server \
--addpkg linux-image-generic \
--addpkg unattended-upgrades \
--libvirt qemu:///system ;
Aunque todos esos parámetros parecen muy complicados, sólo la primera linea es necesaria, las demás permiten especificar la configuración para el huésped:
- destdir - Directorio en el que quieres que se cree la imagen.
- domain, hostname - Dominio y nombre de host del huésped.
- arch - Arquitectura de la maquina a instalar.
- mem, cpus - Cuanta memoria y CPUs son asignadas al huésped.
- rootsize, swapsize - Tamaño del disco raíz en MB (por defecto 4000MB), y de la partición de intercambio.
- user, pass - Nombre de usuario y clave para la primera cuenta de usuario en el huésped.
- bridge - Indica a que bridge conectar el interfaz de red del huésped.
- ip, mask, bcast, gw, dns - Configuración de red para el huésped.
- mirror, components - Indica al huésped de que repositorio descargar los paquetes, útil para acelerar la instalacion si tienes copias locales.
- addpkg - Paquetes a instalar en el huesped durante su creación. Algunos paquetes son imprescindibles, acpid para poder apagar la maquina, openssh-server para poder conectarse remotamente, y linux-image-generic para evitar el error "This kernel does not support a non-PAE CPU"
- libvirt - Indica al instalador en que host debe instalar la maquina.
- ssh-key - Añade la clave pública suministrada (ruta absoluta) a la lista de claves autorizadas del root.
Podemos comprobar que está funcionando correctamente con virsh:
$ virsh list --all
Id Nombre Estado
----------------------------------------------------
1 kvm1 ejecutando
Si no fue arrancado automáticamente, puedes hacerlo a mano con:
$ virsh start kvm1
Se ha iniciado el dominio kvm1
y detenerlo con:
$ virsh shutdown kvm1
El dominio kvm1 está siendo apagado
Gestión remota
Si además quieres gestionar de forma remota todos los huéspedes KVM, instala virt-manager, y añade la dirección ip del anfitrión con Archivo>Añadir conexión... usando como nombre de usuario la cuenta que añadiste a los grupos de kvm. El resultado debería ser similar a esto:
Si haces doble click en cualquiera de las máquinas, puedes abrir una consola, o la página de detalles de configuración seleccionando vista en la barra de tareas: