Upload
vicente-blanco-barizo
View
862
Download
4
Embed Size (px)
Citation preview
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
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.
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
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.
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.
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
–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...
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
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'>
<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-
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:
<interface type='bridge'>
<source bridge='br0'/>
</interface>