To put some content here, go to Site Admin -> Appearance/Presentation -> Widgets -> Select "Left Sidebar" -> Click "Show" -> Click on "Add" on one of the widgets on the left side -> Click "Save changes" -> Done

Virtualizando GNU/Linux con VServer

En estos días es más y más común tener computadoras con muchos recursos (memoria ram, discos duros, procesadores). La virtualización permite simular a varias computadoras y/o sistemas opertivos en un mismo hardware.

Un poco de teoría - Porque VServer?

Existen muchos métodos de virtualizar un sistema operativo, con los mismos resultados, el poder simular varias computadoras en un solo hardware. El método más común (y mas costoso) es el de simular todo el hardware real o ficticio (Qemu, VirtualBox, etc). Su popularidad está basada a que ni el sistema operativo anfitrión ni el huésped necesita ninguna modificación.

Otro método utilizado para virtualizar consiste en pequeños drivers aplicados al anfitrión o húesped para miniminizar el trabajo adicional de simular el hardware para el húesped. Apesar del gran mejora aún se desperdicián recursos en la mediación entre el anfitrión y el huesped Las más populares implementaciones son UML y XEN.

La gran mayoría de las veces no se dese tener maquinas virtuales con sistemas operativos distintos, sino solo tener varias instancias de del mismo sistema operativo huésped, ya que la gran mayoría de las veces las aplicaciones no necesitan acceso directo al hardware o al kernel del sistema operativo. Para esa opción se puede usar el “chroot” de unix, pero también se puede obtener una solución más avanzada como ser VServer.

Para más detalles de la implementación de VServer pueden leer este Paper de su implementación (muy interesante)

Instalando VServer

Algunas personas critican a VServer porque el huésped necesita tener un kernel Linux “patcheado”, cosa que me parece críticas sin fundamentos, porque compilar el kernel es un juego de niños, con unos cuantos comandos y ~20 minutos (dependiendo del hardware) tendremos nuestro kernel listo para la virtualización. Para ello hay que bajar el patch necesario para la versión del kernel que se desea utilizar de la página de VServer.

wget "http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.22.19.tar.bz2"
wget "http://ftp.linux-vserver.org/pub/kernel/vs2.2/patch-2.6.22.19-vs2.2.0.7.diff"
tar xfvj "linux-2.6.22.19.tar.bz2"
cd "linux-2.6.22.19"
patch -p1 < "../patch-2.6.22.19-vs2.2.0.7.diff"

Ahora ya tenemos preparado nuestro kernel, solo tenemos que configurarlo y compilarlo. El kernel viene con varias aplicaciones que facilitan su configuración, yo uso el menuconfig, pero existe varias otras opciones (make help ayudaría)

make menuconfig

Configuring the kernel

Si puede ven en la lista principal VServer significa que “parchearon” correctamente su kernel, ahora tienen que elegir las opciones de VServer, aqui estan las opciones con las que compilé mi kernel (el Dynamic context id no me funcionó…)

Configuring the kernel

Luego también puede personalizar su kernel sacando lo que no hace falta, y agregando atras necesarias que no estan incluidas por defecto. Una vez configurado el kernel hay que compilarlo (make help para mas info)

#compilamos todo
make all
#instalamos
make install
#reiniciamos
reboot

Luego si el sistema operativo inicia bien, ya terminamos con la parte mas complicada (que no es complicado) del proceso de instalación de VServer, ahora tenemos que instalar algunos utilitarios que nos ayudaran para crear a los huéspedes. Si son “redhateros” pueden hacer lo siguiente:

yum install util-vserver* -y

O si usan debian (no probé personalmente)

apt-get install util-vserver*

Una vez instalado las aplicaciones *-vserver y con el kernel nuevo tenemos que testear si todo nos fue bien, para eso podemos hacer lo siguiente:

wget http://vserver.13thfloor.at/Stuff/SCRIPT/testme.sh
chmod +x testme.sh
./testme.sh

Si todo esta funcionando correctamente tendras que ver algo similar a esto:

Creando a los huespedes

Antes que nada existen varias formas de crear máquinas huésped, yo utilizo Yum para instalar los paquetes necesarios para el la distro huésped, para utilizar yum, necesita ser recompilado con un patch.

#!/bin/bash
NAME=virt01
HOSTNAME=virt01.foo-bar.com
#
ROOTDIR="/virtual/"
PKGBASE=$ROOTDIR/.pkg
VSERVER=$HOSTNAME
IP="eth0:192.168.1.106/24"
INTERFACE=$NAME
CONTEXT="43"
# por defecto VServer solo soporta hasta FC6,
# mas adelante escribiré como instalar versiones posteriores
# de Fedora
DIST="fc6"
PM="yum" 

/usr/sbin/vserver $VSERVER build -m $PM --context $CONTEXT --hostname=$HOSTNAME
--interface $INTERFACE=$IP --rootdir $ROOTDIR --pkgbase $PKGBASE -- -d $DIST

Ahora tenemos una maquina huésped, y para comenzar a jugar con

#para iniciar la máquina virtual
vserver $NAME start
#para "entrar" a la máquina virtual
vserver $NAME enter
#para detener la máquina virtual
vserver $NAME stop
# ejecuta "something" en la máquina virtual
vserver $NAME exec something
# instalar algo en la máquina virtual
vyum $NAME -- install algo
# te queda la curiosidad?
man vserver

Algunas peculiaridades del VServer

VServer no cuenta con aislamiento de red, en vez de la virtualización, lo que en otras palabras significa que si la máquina huésped y el anfitrión utilizan una misma tarjeta pero diferentes IP, en realidad el IP de la máquina huésped es un Alias del IP del host. Claro que desde el huésped (por seguridad) solo se puede ver su IP. Esto es una gran punto a favor en rendimiento, ya que no hay desperdicios de tiempo en el CPU para la virtualización de los paquetes de red.

Sin embargo no todo es tan bueno, ya que generalmente los servicios que escuchan puertos, escuchan utilizando 0.0.0.0 (escucha en todo los IPs y alias de la máquina). Si que queremos tener httpd (o cualquier otro progama) instalado en el anfitrión y el huésped tenemos que fijarnos que desde el anfitrión no escuche desde el IP 0.0.0.0, para ver esto solo pueden ejecutar:

$ netstat -nlp | grep httpd
tcp        0      0 0.0.0.0:80                0.0.0.0:*                   LISTEN      2400/httpd

Si la httpd-anfitrión escucha 0.0.0.0:80, todas las consultas que le hagamos a nuestro httpd-huésped serán recibidas y procesadas por el http-anfitrión (por lo explicado anteriormente). Para solucionar el conflicto tendremos que forzar al httpd-anfitrión que escuche el IP-anfitrión. Si configuramos todo correctamente tendremos que ver algo similar a esto.

$ netstat -nlp | grep httpd
tcp        0      192.168.1.14:80                0.0.0.0:*                   LISTEN      2400/httpd

Debemos repetir el mismo proceso para cada aplicación que escucha el IP 0.0.0.0 y que queríamos ejecutar en el huésped y el anfitrión (eg: mysql, sshd, etc).

Lo que se viene

Conocí VServer gracias a que tuve la necesidad de virtualizar servidores en mi trabajo, y me encanto, ya que es muy similar a los Jails de FreeBSD, ademas que todo el filesystem del huésped es visto desde el anfitrión, ademas que las máquinas pueden compartir directorios entre si. Más adelante escribiré sobre como virtualizar servidores existentes, como instalar versiones más nuevas de Fedora, como forzar a vyum que lea desde el DVD de Fedora en vez de internet, esto es verdaderamente útil para instalaciones nuevas.

Espero que les haya gustado este introducción a VServer… espero sus comentarios con dudas o sugerencias.

Read more at Virtualizando GNU/Linux con VServer

Leave a Reply

 

 

 

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>