virtualización con kvm

15
Virtualización con KVM, virtualización de código abierto KVM me parece una opción de futuro puesto que recientemente Red Hat a apostado fuerte por esta solución, lo que le garantiza un recorrido y un desarrollo importante en los próximos años. KVM se encuentra integrado en el núcleo de Linux a partir de la versión 2.6.20 del kernel. Esta aplicación necesita soporte de hardware para ejecutar la virtualización, ya sea con procesadores de Intel o de AMD. En caso de que nuestro procesador no soporte dichas tecnologías de virtualización será inútil intentar instalarlo. Instalación de KVM Por lo tanto estamos hablando de una solución de virtualización para utilizar en los sistemas Linux. KVM utiliza Virt-Manager como administrador de máquinas virtuales y un Qemu modificado como hypervisor. Para instalarlo lo primero que debemos saber es si nuestro procesador es compatible. Para ello introduciremos los siguientes comandos:

Upload: vicente-blanco-barizo

Post on 14-May-2015

862 views

Category:

Education


4 download

TRANSCRIPT

Page 1: Virtualización con kvm

Virtualización con KVM, virtualización de código abierto

KVM me parece una opción de futuro puesto que recientemente Red Hat a apostado fuerte por esta solución, lo que le garantiza un recorrido y un desarrollo importante en los próximos años. KVM se encuentra integrado en el núcleo de Linux a partir de la versión 2.6.20 del kernel. Esta aplicación necesita soporte de hardware para ejecutar la virtualización, ya sea con procesadores de Intel o de AMD. En caso de que nuestro procesador no soporte dichas tecnologías de virtualización será inútil intentar instalarlo.

Instalación de KVM

Por lo tanto estamos hablando de una solución de virtualización para utilizar en los sistemas Linux. KVM utiliza Virt-Manager como administrador de máquinas virtuales y un Qemu modificado como hypervisor. Para instalarlo lo primero que debemos saber es si nuestro procesador es compatible. Para ello introduciremos los siguientes comandos:

$ cat /proc/cpuinfo | grep vmx # para CPUs Intel$ cat /proc/cpuinfo | grep svm # para CPUs AMD

Si el sistema no nos devuelve nada me temo que no tenemos soporte de virtualización en nuestro procesador o no lo tenemos activado. En caso afirmativo, instalamos los paquetes necesarios:

$ sudo apt-get install kvm libvirt-bin ubuntu-vm-builder bridge-utils

e incluimos el usuario en el grupo de kvm

$ sudo adduser $USER kvm

Una vez realizado todos estos pasos tendremos que reiniciar la sesión, dependiendo de la versión de Ubuntu que estemos utilizando. Si todo ha ido bien, tendremos una nueva

Page 2: Virtualización con kvm

entrada en nuestro menú Aplicaciones/Herramientas del Sistema/Administrador de Máquina Virtual desde donde podemos comenzar la instalación de nuestras máquinas virtuales.

Creación de las máquinas virtuales

Una vez abierto el Administrador de Máquina Virtual tendremos que crear una conexión, en caso de que no nos aparezca por defecto. Para ello lo único que tenemos que seleccionar es QEMU como hipervisor y Local como conexión. Tras seleccionar la nueva entrada creada nos aparecerá activo el botón Nuevo, donde tras pulsarlo accedemos al Asistente para la creación de máquinas virtuales.

Lo primero que tenemos que hacer es asignar un nombre al sistema que vamos a virtualizar, y luego nos permite elegir cómo queremos virtualizarlo, ya sea virtualización completa o paravirtualización. Este segundo método utiliza el hipervisor para compartir el acceso al hardware subyacente pero integra código que está al tanto de la virtualización en el propio sistema operativo. Es necesario que los sistemas operativos alojados sean modificados por el hipervisor. Ofrece un rendimiento próximo al de un sistema no virtualizado. En mi caso he optado por una virtualización completa para tratar de aproximar los resultados al resto de opciones que hemos virtualizado.

Page 3: Virtualización con kvm

Comenzamos con el asistente a definir las opciones de nuestra máquina virtual. Podemos elegir visor, ya sea KVM o QEMU y la instalación la podemos llevar a cabo mediante una imagen ISO, un CD o a través de la red. Lo siguiente que debemos hacer es indicar donde está la imagen *.ISO y dónde vamos a alojar nuestro disco duro virtual. Podemos elegir si le damos el tamaño fijo o dentro del tamaño asignado el archivo de imagen va creciendo a medida que vamos instalando archivos. Después nos bastará con elegir las opciones de red, ya sea red virtual o compartir la tarjeta de red física con el equipo anfitrión. Por último asignamos memoria y CPU a la máquina virtual y ya tendremos creada nuestra máquina virtual.

Una vez creada la máquina virtual tendremos que instalar el sistema operativo que hayamos elegido al igual que haríamos en este caso con un ordenador al que le acabamos de instalar el disco duro. Este proceso nos llevará más o menos tiempo en función de la memoria y procesador que hayamos asignado a nuestra máquina virtual, así como si instalamos a través de CD, de una imagen *.ISO o de la red que son las opciones disponibles.

Funcionamiento general

Las máquinas virtuales tienen un rendimiento muy bueno, comparando con el funcionamiento general de otras máquinas virtuales de las aquí examinadas. No tienen nada que envidiar en ningún aspecto. Una de las cosas que me ha gustado bastante es el modo fluido que funciona automáticamente en Windows sin necesidad de tener que instalar aplicaciones extras para equipos invitados. No ocurre lo mismo con los sistemas

Page 4: Virtualización con kvm

virtualizados en Linux donde no he conseguido tener un modo fluido semejante al obtenido con sistemas Windows.

El soporte de los USB es bastante bueno. Tenemos que seleccionar la opción de añadir hardware en las opciones de la consola, hardware donde tenemos una opción para añadir hardware. En este caso para dispositivos USB podemos añadirlos como dispositivos de almacenamiento, seleccionando directamente la partición de disco y la opción de disco USB. Con esta opción podemos utilizar nuestro dispositivo tanto en nuestro sistema anfitrión como en nuestro invitado. Siempre es posible realizar mejoras en este sector que creo que es uno donde todos los sistemas tiene margen para conseguir que la experiencia del usuario sea más satisfactoria.

Respecto a la instalación de los dispositivos USB uno de los aspectos positivos es que una vez instalado el controlador del dispositivo en el equipo invitado podremos conectarlo directamente en caliente. No es necesario tener previamente seleccionado el dispositivo antes de arrancar el sistema, ni siquiera es necesaria que la unidad esté montada en nuestro sistema. El aspecto que menos me ha gustado ha sido el gráfico, donde creo que KVM rinde peor que otras soluciones en el apartado gráfico puesto que no soporta la aceleración por hardware 3D que si está disponible por ejemplo en VirtualBox.

Un aspecto que me ha parecido interesante es la incorporación de los gráficos de rendimiento de los sistemas virtuales dentro de Virtual Manager que nos indica como se está comportando nuestro sistema virtual, qué uso está haciendo de la CPU o de la memoria, datos que nos ayudan a ver el rendimiento de estas máquinas y hasta que punto podemos tener varias trabajando en paralelo en nuestro ordenador.

Page 5: Virtualización con kvm

Respecto a los puntos negativos de este sistema podemos subrayar que únicamente está disponible para Linux, por lo tanto no se trata de un sistema multiplataforma y esto sin duda le resta puntos. Podríamos decir que es el equivalente de Virtual PC en sistemas Linux, con un buen rendimiento aún a costa de una peor resolución gráfica. La parte buena es que al estar integrado en el kernel de Linux la relación entre sistemas es bastante buena.

En general KVM no me parece muy intuitivo, no es que tampoco podamos decir que es complicado, pero si es verdad que para usuarios noveles no es el sistema con el cual yo les recomendaría que se iniciasen en la virtualización. Existen formas más sencillas de dar soluciones a distintos aspectos de la virtualización, y no me refiero a nivel técnico, sino respecto a la usabilidad del programa, que a veces te puedes perder un poco entre las distintas opciones.

Virtualización con Ubuntu y KVM – parte 2

En esta segunda parte veremos como instalar y gestionar alguna máquina virtual, tanto

windows como linux.

Instalar y manejar VM’s

Para crear y manejar las máquinas virtuales (guests) podemos hacerlo gráficamente o por

consola.

Page 6: Virtualización con kvm

Por línea de comandos (virt-install y virsh):

Tenemos las siguientes herramientas:

ubuntu-vm-builder – es una herramienta desarrollada por Canonical para crear

maquinas virtuales Ubuntu. Realmente lo que instala es el paquete python-vm-builder

python-vm-builder – Script que automatiza la creacción de una VM basada en Linux

(por línea de comandos)

Las instalamos con:

# aptitude install ubuntu-vm-builder

Creación de VM’s por línea de comando – virt-install:

Para mi la mas potente es la herramienta desarrollada por Red Hat (que es la que ha

desarrollado e invertido en KVM. Ubuntu simplemente se ha apuntado al carro en plan

oportunista…como siempre), que es virt-install, ya que permite crear máquinas de todo tipo

(incluido windows).

Virt-install es un Script desarrollado por Red Hat que automatiza la creacción de una VM de

cualquier tipo (Linux, Windows, BSD…). Virt-install utiliza la librería ‘libvirt’.

Lo instalamos con:

# aptitude install virtinst

Para ver todas las opciones hacemos un ‘man virt-install’

Para crear una VM de Lucid Server 64bits haremos:

# virt-install --connect=qemu:///system --name=lucid --ram=512

--vcpus=1 --check-cpu --os-type=linux --hvm --vnc --accelerate

--disk=/home/gonzalo/Src/libvirt/images/lucid.img,size=4,sparse=

true --cdrom=/home/gonzalo/Src/libvirt/ubuntu-10.04-server-

amd64.iso --network=bridge:br0

Lo cual significa:

–name=lucid -> El nombre que le vamos a dar a la VM

–ram=512 -> La RAM que le vamos a asignar (se puede modificar posteriormente)

–vcpus=1 -> CPU’s virtuales que le vamos a asignar

–check-cpu -> Comprueba que el nº de CPU’s asignadas no exceda el del Host y si

es así nos avisa

Page 7: Virtualización con kvm

–os-type=linux -> Tipo de Sistema Operativo que vamos a instalar (linux o

windows)

–os-variant=OS_VARIANT -> Variante para ajustar mas la instalación. Si se pone

esta opción no hace falta la anterior (–os-type). Hay varios tipos ‘winxp’,

‘ubuntukarmic’ (consultar man).

–hvm -> Que utilice full-virtualization. Si quisiésemos usar paravirtualizacion

usaríamos la opción –paravirt

–acelerate -> Esta opción se usa ya por defecto y está deprecated (se puede

omitir)

–disk=/home/gonzalo/Src/libvirt/images/lucid.img,size=4,sparse=true -> El disco

que vamos a crear, size=4 el tamaño en GB, sparse=true que no reserve todo el

espacio y que lo vaya asignando a medida que crece el disco (.img)

–cdrom=/home/gonzalo/Src/libvirt/ubuntu-10.04-server-amd64.iso -> La iso o el

cd si está puesto y montado en la bandeja (

–network=bridge:br0 -> Que utilice como red el dispositivo bridge ‘br0 para ′

poder tener la red en el mismo rango que el host

Mas opciones:

–sound -> Attach a virtual audio device to the guest.

–vnclisten=VNCLISTEN -> Por defecto solo escucha en localhost (127.0.0.1), pero

podemos hacer que se puedan conectar desde una ip en concreto, varias

separadas por comas o rango entero.

Para crear un VM de windows XP:

# virt-install --connect=qemu:///system --name=server2003 --

ram=1024 --vcpus=1 --check-cpu --os-variant=win2k3--hvm --vnc --

accelerate

--disk=/home/gonzalo/Src/libvirt/images/server2003.img,size=14,s

parse=true --cdrom=/home/gonzalo/Src/windows/Windows\ Server\

2003\ R2\ SP2\ Enterprise\ Spanish\ Volume\ License\ Edition\

CD1.iso --network=bridge:br0 --sound

Saldría algo como:

Empezando la instalación...

Page 8: Virtualización con kvm

Creando archivo de almace 100% |=========================| 4.0

GB 00:00

Creando dominio... 0 B 00:00

No se ha podido conectar a una consola gráfica: no está

instalado el virt-viewer. Por favor, instale el paquete "virt-

viewer". La instalación del dominio continúa en progreso. Puede

reconectarse a la consola para completar el proceso de

instalación.

Tal y como indica la instalación empieza pero como no tenemos X, no puede mostrarnos el

proceso. Si tuviesemos X en el mismo servidor, sería tan fácil como:

# sudo virt-viewer vm10

Desde otro equipo podemos instalar el paquete virt-viewer y conectarnos haciendo:

# sudo virt-viewer --connect

qemu+ssh://[email protected]:22003/system lucid

Ahora si se abre la ventana y podemos continuar con la instalación.

Nota: Una vez instalado no reinicia la VM. Esta queda apagada. Habría que iniciarla (lo explico

mas abajo).

También podemos usar virt-install en modo prompt y nos va solicitando las opciones:

# virt-install --prompt

Gestión de las VM’s por línea de comando – virsh:

La creación de la máquina virtual ha generado un archivo xml con el nombre de la VM en

/etc/libvirt/qemu/

Para arrancarlas ejecutamos:

# virsh start lucid

Para crear una VM, no hace falta crearla siempre con ‘virt-install’. Podemos tener una VM

básica modelo y clonarla.

Pueden ser creadas a partir de los ficheros XML.

1º – Volcamos una imagen de una VM ya existente

# virsh dumpxml GuestID > guest.xml

Page 9: Virtualización con kvm

Ej:

# virsh dumpxml 2 > ubuntu.xml

2º – Creamos e iniciamos la nueva máquina:

# virsh create /etc/libvirt/qemu/ubuntu.xml

Para ver las VM’s que tenemos en este mismo momento podemos ejecutar:

# virsh -c qemu:///system list

Id Nombre Estado

----------------------------------

2 lucid ejecutando

Para que arranque la máquina con el host haremos:

# virsh -c qemu:///system autostart nºid

Y para desactivar este arranque:

# virsh -c qemu:///system autostart --disable domain-id

Para apagar una máquina virtual de forma ordenada:

# virsh -c qemu:///system shutdown 2

El dominio 2 está siendo apagado

Para que las VM’s Linux apaguen correctamente hay que instalar el demonio ‘acpid’:

# aptitude install acpid

Si una VM no responde podemos destruir el dominio:

# virsh -c qemu:///system destroy 6

Si hemos definido una VM y la queremos borrar ‘completamente’ hemos de ejecutar el

siguiente comando:

# virsh destroy guindous

# virsh undefine guindous

Esto significa que ya podemos volver a crear un guest que se llame ‘guindous’.

Para poner y quitar un CD o una iso:

Vamos a los xml de configuración de cada guest en /etc/libvirt/qemu y lo editamos.

Donde pone:

<disk type='file' device='cdrom'>

Page 10: Virtualización con kvm

<driver name='qemu' type='raw'/>

<target dev='hdc' bus='ide'/>

<readonly/>

</disk>

Ponemos:

<disk type='file' device='cdrom'>

<driver name='qemu'/>

<source file='/home/gonzalo/Src/windows/winxp.iso'/>

<target dev='hdc' bus='ide'/>

<readonly/>

</disk>

Si en vez de una iso queremos poner el cd o dvd que haya en la bandeja del host, ponemos:

<disk type='file' device='cdrom'>

<driver name='qemu'/>

<source file='/media/cdrom'/>

<target dev='hdc' bus='ide'/>

<readonly/>

</disk>

Gestionar las VM’s Gráficamente:

Para gestionar las Máquinas virtuales gráficamente desde un Ubuntu con X, podemos instalar

el meta-paquete ‘ubuntu-virt-mgmt’, que instala el paquete ‘virt-manager’ y ‘virt-viewer’ en

nuestro desktop para gestionar y crear las máquinas y acceder (por VNC) a los guests.

# aptitude install ubuntu-virt-mgmt

Leyendo lista de paquetes... Hecho

Creando árbol de dependencias

Leyendo la información de estado... Hecho

Leyendo la información de estado extendido

Inicializando el estado de los paquetes... Hecho

Se instalarán los siguiente paquetes NUEVOS:

acl{a} bsd-mailx{a} build-essential{a} cvs{a} dctrl-tools{a}

debootstrap{a} devscripts{a} diffstat{a} dpkg-dev{a} dput{a} g++

{a} g++-4.4{a} gettext{a} intltool-debian{a} kpartx{a} libapt-

Page 11: Virtualización con kvm

pkg-perl{a}

libauthen-sasl-perl{a} libdevel-symdump-perl{a} libio-pty-

perl{a} libio-stringy-perl{a} libipc-run-perl{a} libparse-

debcontrol-perl{a} libpod-coverage-perl{a} libstdc++6-4.4-dev{a}

libterm-size-perl{a} libtest-pod-perl{a} lintian{a}

patchutils{a} postfix{a} python-cheetah{a} python-gtk-vnc{a}

python-libvirt{a} python-urlgrabber{a} python-vm-builder ubuntu-

virt-mgmt virt-manager

virt-viewer virtinst{a} wdiff{a} xz-utils{a}

0 paquetes actualizados, 40 nuevos instalados, 0 para eliminar y

0 sin actualizar.

Necesito descargar 17,0MB de ficheros. Después de desempaquetar

se usarán 62,9MB.

instala entre otros:

virt-manager – Aplicación de escritorio GUI para gestionar máquinas virtuales. Hay

otras como convirt o convirt2 que es por web.

virt-viewer – un VNC para conectarnos a las máquinas

Es conveniente instalrlo en otra máquina con X (desktop o laptop) y no en el mismo servidor,

ya que recordemos que KVM lo estamos instalando en un server sin X y no podríamos acceder

desde el (aunque no pasa nada porque este en la misma máquina si es que si que tenemos las

X instaladas).

Una vez instalado debemos configurar que por defecto cree los guest con la red en modo

bridge (que use br0) por defecto, para así poder poner rangos de red iguales que el host.

La VM’s están definidas en ficheros XML. ubuntu-vm-builder, la utilidad que usaremos en

modo comando para crear las VM’s (solo basadas en linux), se basa en el siguiente template:

/etc/vmbuilder/libvirt/libvirtxml.tmpl

Por lo cual haremos un backup y lo editamos poniendo:

<interface type='network'>

<source network='default'/>

</interface>

a:

Page 12: Virtualización con kvm

<interface type='bridge'>

<source bridge='br0'/>

</interface>