jueves, 6 de mayo de 2010

KVM y libvirt-bin en Kubuntu Lucid Lynx

Vamos a instalar la virtualización basada en KVM y libvirt así como gestión básica de maquinas virtuales.

Requisitos

Yo usaré un GNU\Linux Kubuntu 10.04 LTS Lucid Lynx de 32Bits. Lo recomendado para un servidor es usar un sistema de 64 bits que nos permitirá tener más de 2GB por maquina virtual (VM). Si no estaremos limitados a 2GB para cada VM.

El procesador debe tener soporte de virtualización. Podemos mirarlo en /proc/cpuinfo y ver si tenemos vmx (intel) o svm (amd) en “flags” del procesador. La siguiente linea se repetirá por cada core.

$ egrep '(vmx|svm)' /proc/cpuinfo 
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc arch_perfmon pebs bts aperfmperf pni dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm sse4_1 xsave lahf_lm tpr_shadow vnmi flexpriority

Instalación de paquetes

Instalamos los siguientes paquetes

$ sudo aptitude install kvm libvirt-bin ubuntu-vm-builder bridge-utils virt-manager virt-viewer

  • KVM es la solución de virtualización que se compone de una serie de módulos para el núcleo linux.Usa QEMU
  • Libvirt-bin son unas herramientas para administrar kvm y libvirt.
  • Ubuntu-vm-builder es una herramienta para crear maquinas virtuales.
  • Bridge-utils sirve usar la red local con la red virtual.
  • Virt-manager es una interfaz gráfica. Hay otras como convirt o convirt2 que es por web.
  • Virt-viewer es la consola para entrar en la maquina virtual.
Una vez instalado podemos ver que se han cargado una serie de módulos nuevos.

$ lsmod 
Module                  Size  Used by
...
bridge                 45582  0 
kvm_intel              39384  0 
kvm                   245405  1 kvm_intel
...

Además, habrá añadido nuestro usuario al grupo libvirtd para poder usar las herramientas de virtualización sin ser root. Hay que cerrar la sesión y hacer login para usarlo correctamente, no hace falta reiniciar.

$ groups
adm dialout cdrom plugdev lpadmin admin sambashare libvirtd

Para ver si está todo correcto usamos el siguiente comando para conectar al hypervisor (qemu:///system) y ver la lista de VM o dominios. Vacía claro. Virsh es la herramienta de gestión de dominios.

$ virsh -c qemu:///system list
Id Nombre               Estado
----------------------------------

$

También podríamos conectar al hypervisor con qemu+ssh:///nombrehost..dom.com/system si fuera remoto.

Configuración de Red

Por otro lado hay que crear un bridge para que las maquinas virtuales puedan conectar por red a la red local y que se vean con otras máquinas. Por defecto se crea una conexión NAT. Añadimos la interfaz bridge “br0” al archivo correspondiente.

$ vim /etc/network/interfaces
auto br0
   iface br0 inet static
   address 192.168.3.2
   netmask 255.255.255.0
   network 192.168.3.0
   broadcast 192.168.3.255
   gateway 192.168.3.1
   bridge_ports eth0
   bridge_fd 9
   bridge_hello 2
   bridge_maxage 12
   bridge_stp off

e iniciamos el interfaz

$ sudo ifup br0

Waiting for br0 to get ready (MAXWAIT is 20 seconds).
ssh stop/waiting
ssh start/running, process 5494

$ ifconfig br0
br0       Link encap:Ethernet  direcciónHW 00:1e:2a:cb:1c:db  
Direc. inet:192.168.3.2  Difus.:192.168.3.255  Másc:255.255.255.0
Dirección inet6: fe80::21e:2aff:fecb:1cdb/64 Alcance:Enlace
ACTIVO DIFUSIÓN FUNCIONANDO MULTICAST  MTU:1500  Métrica:1
Paquetes RX:206 errores:0 perdidos:0 overruns:0 frame:0
Paquetes TX:378 errores:0 perdidos:0 overruns:0 carrier:0
colisiones:0 long.colaTX:0 
Bytes RX:44429 (44.4 KB)  TX bytes:301311 (301.3 KB)

Configuración de maquina virtual

Para crear una maquina virtual tenemos virt-install. Podemos hacer lo siguiente:

$ virt-install --connect=qemu:///system --name=00Ubuntults32 --ram=512 \
> --vcpus=1 --check-cpu --os-type=linux --hvm --vnc --accelerate \
> --disk=/home/casa/Vmachines/KVM/00ubults32.img,size=4,sparser=true \
> --cdrom=/media/D750EXT4/Imagenes\ Sistemas/ubuntu-10.04-server-i386.iso


Empezando la instalación...
Creando archivo de almace 100% |=========================| 4.0 GB    00:00     
Creando dominio...                                                 0 B 00:00 

Creará la máquina virtual 00Ubuntults32 con 512 M de ram, usará 1 CPU de las 4 que hay disponibles, el tipo de sistema será linux (se pueden instalar un montón, ver man virt-install) con virtualización pura, consola vnc gráfica y acelerador de hardware. Además el disco donde se almacenará la VM será una imagen RAW llamada 00ubults32.img con 4 G de tamaño y que se vaya llenando progresivamente (sparse). Por último, le decimos donde está la imagen iso del CDROM para instalar el sistema. Hay muchas más opciones.

Nos saldrá una consola con el comienzo de instalación del sistema de forma normal. Y vemos como queda finalizada la instalación de Ubuntu server 10.04 LTS.



KVM crea las maquinas virtuales por defecto en /var/lib/libvirt/images pero nosotros las vamos a tener en /home/casa/Vmachines/KVM/.

La creación de la máquina virtual ha generado un archivo xml con el nombre de la VM en /etc/libvirt/qemu/. Si apagamos la VM podemos volver a arrancarla creando el dominio con

$ sudo virsh -c qemu:///system create /etc/libvirt/qemu/00Ubuntults32.xml
El dominio 00Ubuntults32 creado desde /etc/libvirt/qemu/00Ubuntults32.xml

$ sudo virsh -c qemu:///system list
Id Nombre               Estado
----------------------------------
2 00Ubuntults32        ejecutando

Podemos generar el fichero xml de un dominio ya creado con

$ virsh -c qemu:///system dumpxml 2 > /home/casa/Vmachines/KVM/00ubults32.xml

También podemos gestionar la maquina virtual con virt-manager, que es una aplicación gráfica, creando una conexión nueva a qemu:///system, no la que viene por defecto (qemu:///session)

Por otro lado con virsh podemos gestionar el entorno virtualizado por consola.

$ virsh -c qemu:///system
virsh # create /home/casa/Vmachines/KVM/00ubults32.xml
El dominio 00Ubuntults32 creado desde /home/casa/Vmachines/KVM/00ubults32.xml

virsh # list
Id Nombre               Estado
----------------------------------
2 00Ubuntults32        ejecutando

Salimos con quit.

Para usar la consola gráfica con la VM podemos usar el siguiente comando poniendo el número de dominio.

$ virt-viewer 2

Por supuesto, podemos conectar con nuestra consola (yakuake, konsole,xterm...) a través de ssh y la IP que tenga el dominio, siempre que hayamos instalado el servidor ssh en la maquina virtual.

Para apagar una máquina virtual de forma ordenada, podemos hacerlo desde su consola (sudo init 0) o

$ virsh -c qemu:///system shutdown 2
El dominio 2 está siendo apagado

El dominio a veces sigue encendido, debe ser un bug ya que desde virt-manager si se puede apagar usando Forzar apagado... podemos usar el comando ssh para un buen apagado y no forzar el apagado o destruir el dominio.

Podemos instalar el demonio acpid en la máquina virtual invitada (guest) para apagar correctamente (gracias a Guta por el apunte).

$ ssh administrador@192.168.1.37 sudo init 0

$ virsh -c qemu:///system list
Id Nombre               Estado
----------------------------------


Para ver todas las opciones podemos entrar en virsh y poner help. Con cada comando podemos poner help comando.

Por último. Como tenemos el virtual-manager podemos hacer todo esto de forma gráfica.



Apéndice I – Uso de otros sistemas de virtualización

Puede que queramos usar VirtualBox, VMWare u otros sistemas de virtualización. Esto no es posible si kvm está activo. Tampoco es posible usar KVM si esta VirtualBox activo, o cualquier otro virtualizador.

Para pode usarlos debemos descargar el módulo de kvm_intel o kvm_amd del núcleo linux, depende del procesador que tengamos (intel o amd). En mi caso intel.

$ sudo rmmod kvm_intel
$ lsmod | grep kvm
kvm                   245405  0 

Vemos que solo queda el módulo kvm. Ahora podremos usar Virtualbox o lo que queramos. Para volver a ponerlo y poder usar kvm de nuevo después de usar el otro sistema de virtualización.

$ sudo  modprobe kvm_intel
$ lsmod | grep kvm
kvm_intel              39384  0 
kvm                   245405  1 kvm_intel
Related Posts with Thumbnails