Migrando de XEN a KVM en Ubuntu

Patxi Echarte, October 6th, 2008

Hace unos meses comencé a utilizar XEN como plataforma de virtualización en mi servidor doméstico, sin embargo con la actualización a Ubuntu 8.04 LTS comenzó a darme problemas de conectividad entre las máquinas virtuales, el host e internet. Tras mucho investigar averigüé que habían sacado la versión 8.04 sin resolver unos problemas con la plataforma AMD64 (y eso que es un LTS), y dado que la opción preferente era KVM no tenía visos de resolverse rápido. Así pues no me ha quedado más remedio que pasarme a KVM. El cambio ha sido mejor de lo que pensaba porque KVM, combinado con libvirt y virt-manager, está bastante más maduro que cuando lo probé hace un año, pero esto no quita para que Ubuntu haya hecho algo bastante poco apropiado, más acorde con otro tipo de compañías.

Instalación y Configuración

Antes de nada hay que tener en cuenta que para ejecutar KVM es necesario disponer de un procesador que soporte virtualización. El siguiente comando debería devolver algo, en caso contrario es que no se dispone del soporte necesario.

$ egrep '(vmx|svm)' /proc/cpuinfo

Para instalar KVM es suficiente con utilizar apt-get y solicitar instalar el paquete correspondiente, así como algún otro paquete que utilizaremos más adelante.

$ sudo apt-get install qemu virt-manager libvirt-bin kvm bridge-utils
$ sudo modprobe kvm
$ sudo lsmod | grep kvm
   kvm_intel              39232  0
   kvm                   131800  1 kvm_intel

Para que el usuario activo sea capaz de ejecutar máquinas virtuales sin requerir el uso de sudo se añade el usuario al grupo kvm.

$ sudo adduser $USER kvm

El último comando nos indica que KVM está activo, por lo que podemos continuar con su configuración. De partida KVM permitirá que las máquinas virtuales que creemos tengan acceso a la red y sean visibles entre ellas, así como desde el servidor anfitrión, creando una subred específica y utilizando NAT. Sin embargo las máquinas no serán directamente accesibles desde el resto de la red, por lo que en caso de requerir que formen parte de ella como cualquier otro equipo, será necesario configurar un bridge, para lo cual será necesario también deshabilitar el NetworkManager.

El primer paso consite en detener el NetworkManager y deshabilitarlo.

$ sudo /etc/dbus-1/event.d/26NetworkManagerDispatcher stop
$ sudo /etc/dbus-1/event.d/25NetworkManager stop

A continuación hay que crear dos archivos con la palabra “exit” en ellos. Los archivos son:

/etc/default/NetworkManager
/etc/default/NetworkManagerDispatcher

Una vez hecho esto hay que configurar la configuración del interfaz de red. Para ello primero detendremos el interfaz de red sobre el que queremos definir el bridge, por ejemplo eth0.

$ sudo ifdown eth0

A continuación modificaremos la definición del interfaz en el archivo /etc/network/interfaces, sustituyendo la definición de eth0 por la de br0.

 auto br0
 iface br0 inet static
         address 192.168.2.4
         netmask 255.255.255.0
         network 192.168.2.0
         broadcast 192.168.2.255
         gateway 192.168.2.2
         bridge_ports eth0
         bridge_stp off
         bridge_maxwait 5

Esta configuración define br0 como un bridge construido sobre eth0, asignando una configuración de red al puente de forma estática, aunque lo mismo podría haberse hecho de forma dinámica con DHCP.

auto br0
iface br0 inet dhcp
         bridge_ports eth0
         bridge_stp off
         bridge_maxwait 5

Ahora ya puede iniciarse el interfaz creado br0.

$ sudo ifup br0

Finalmente hay que añadir al archivo /etc/sysctl.conf las siguientes líneas

net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0

Y cargar la nueva configuración.

$ sudo sysctl -p /etc/sysctl.conf

Ahora ya deberíamos disponer de un dispositivo físico compartido, al cual podríamos asignar las máquinas virtuales que creemos, obteniendo acceso completo a la LAN tanto de entrada como de salida.

$ sudo brctl show
   bridge name     bridge id               STP enabled     interfaces
   virbr0          8000.000000000000       yes
   br0             8000.00188b7c932d       no              eth0

Configuración de las máquinas virtuales

La creación de máquinas virtuales es realmente sencilla con el asistente que viene con virt-manager. Aunque en nuestro caso lo que nos interesa en la reutilización de las máquinas que teníamos definidas en XEN y que estaban basadas en HVM, podemos utilizar también virt-manager para definirlas en KVM, indicando manualmente las características del hardware de cada una y utilizando el archivo con la imagen de la máquina.

La siguiente imagen muestra un pantallazo de virt-manager con las dos máquinas virtuales que antes funcionaban con XEN, funcionando ahora con KVM.

Esta otra imagen muestra el acceso a ambas máquinas desde otro equipo de la red. Puede verse como se realiza una conexión por RDP a la máquina con Windows XP y una conexión con VNC al XUbuntu.

El único problema que me he encontrado a la hora de definir las máquinas para KVM ha sido con el Windows XP, ya que si lanzaba la máquina desde línea de comandos con KVM funcionaba, pero no si lo hacía desde virt-manager, ya que se bloqueaba antes siquiera de salir el logo de windows. Para resolver este problema hay que editar el archivo XML con la configuración de la máquina virtual windows (/etc/libvirt/qemu/<nombremáquina>.xml) y añadir las siguientes líneas justo al final.

<features>
<acpi/>
</features>

Tras hacer estos cambios hay que ejecutar lo siguiente.

$ sudo virsh
define /etc/libvirt/qemu/<nombremaquina>.xml
quit

Más información

Comparte esta información

Un comentario para “Migrando de XEN a KVM en Ubuntu”

  1. EsLoMas.com » Cómo agrandar el tamaño de una imagen KVM dice:

    […] Por falta de previsión me he encontrado con un problema de espacio en una de las máquinas virtuales que tengo configuradas con KVM. El caso es que por defecto suelo crear imágenes de 4GB, pero parece que no es suficiente para el avaricioso Windows XP, aunque para ser honesto, era de esperar después de instalar el Office 2003 y alguna cosilla más. El caso es que continuamente me estaban saltando alertas y el rendimiento de la máquina virtual era cercano a insoportable, por lo que me puse a ampliar el tamaño de la imagen. Aunque utilizo virt-manager, no es posible realizar esta acción desde él. La solución más sencilla pasa por utilizar qemu-img y luego arrancar con una imagen Ubunto (por ejemplo) y utilizar GParted. […]

Deja un comentario