Virtualización

Todo lo relacionado con Xen, KVM/QEMU, VMWare, VirtualBox, etc.

Los "virtual appliances" de rPath y JumpBox

Hoy descubrí en el trabajo los virtual appliances de rPath y JumpBox, y fue al mismo tiempo excitante y descorazonador.

Los virtual appliances son máquinas virtuales hechas a medida para albergar una aplicación. Las que vi yo eran sobre todo LAMPs: Drupal, Joomla, Mediawiki, etc. Te descargas una máquina virtual, la levantas, y ya tienes esa aplicación funcionando. Luego puedes configurar la aplicación por web; pero lo importante es que también puedes configurar el sistema por web. Todos estos appliances traen un panel de control web para gestionar el sistema operativo.

¿Qué significa esto? Que los administradores Linux "expertos" ya no son necesarios. Lo eran cuando hacía falta saber bastante para instalar y configurar Linux en un ordenador para que albergara una aplicación. Pero ahora te descargas un fichero con todo el sistema operativo instalado y configurado, creas una máquina virtual en tu virtualizador preferido (las imágenes de rPath y JumpBox vienen en varios formatos: QEMU, VMWare, el nosécómosellama de Microsoft ...), y luego le pasas la URL al encargado de la aplicación para que toque ahí lo que le haga falta. Todo a golpe de ratón. Sin tocar ficheros, ni usar ssh, ni vi, ni nada de eso. Puedes despedir a tu gurú de Linux, contratar a un becario por la mitad del precio y quedarte el resto. ¡Viva el progreso!

Lo mismo debió sentir el primer operario de General Motors (o cualquier otro gran fabricante de coches) cuando vio los primeros robots en sus fábricas. O los zapateros de toda la vida cuando vieron los primeros Nike. O los vendedores de Nike legales cuando vieron lo que llegaban desde China y se vendía a un precio ridículo. En fin: que nos jubilan. Que tantos años de aprender cómo funcionan las tripas de un operativo se han devaluado y van a ser mucho menos valiosos de ahora en adelante.

Debería servir como cura de humildad para muchos.

Provisionamiento de máquinas virtuales RedHat/Fedora/CentOS

Es una vergüenza que la manera más rápida de crear máquinas virtuales con RedHat, Fedora o CentOS sea instalar un cacharro con Debian y usar rinse.

Hagamos rewind y dejen que les ponga en antecedentes.

Si quieres meterte seriamente con el tema de la virtualización, uno de los primeros problemas con los que tienes que enfrentarte es el del provisionamiento de las máquinas virtuales. "Provisionamiento" no es más que un palabro que se inventó alguien para referirse a la creación e instalación de máquinas virtuales. Supongo que tiene algún origen razonable, pero lo desconozco.

Esto quiere decir que tienes que buscar una manera de crear máquinas virtuales que no sea cargar el virtualizador (Xen, KVM/QEMU, VMWare, lo que sea) y ejecutar todo el proceso de instalación como si fuera una máquina de verdad. "Virtualizar" no significa crearte una máquina Windows en tu escritorio para ejecutar algún juego que no puedes ejecutar en Linux. Estamos hablando de virtualización "industrial": por ejemplo, teniendo dos máquinas físicas, crear diez máquinas virtuales que van a desempeñar labores de firewalling (sí, se puede hacer en una máquina virtual; no, yo tampoco lo haría, pero hay gente para todo), servidor de correo, servidor "LAMP", servidor de aplicaciones con Tomcat, y dios sabe qué más. Y además, tienes que hacerlo rápido. Instalar todas esas máquinas de la forma tradicional te podría llevar, siendo optimistas, media hora cada una. Nuestro plan es instalarlas en cuestión de minutos, o menos.

Si han jugado un poco con estos temas, lo de instalar una máquina virtual en un par de minutos lo verán como algo razonable. Para los que no se han metido con estos temas y tienen como referencia la instalación "manual", puede parecer preposterous (absurdo, vaya). Pero es cierto: en el trabajo "provisionamos" máquinas virtuales con Debian "Lenny" en 15 segundos. Eso es sin ningún servicio, claro; lo que lleva más tiempo luego es instalarle lo que vaya a necesitar para "trabajar". Pero es un comienzo.

En Debian existe la herramienta debootstrap desde hace años. Sirve para crear chroots con Debian, originalmente para poder crear paquetes de las versiones inestables o antiguas de Debian sin tener que actualizar (o desactualizar) todo el sistema. debootstrap se baja los paquetes necesarios para instalar el sistema desde un mirror que le digamos, lo que tiene de malo que tarda un rato (dependiendo e nuestra conexión) pero tiene de bueno que son los paquetes de la distribución "real", no una base estática que pudiéramos tener guardada por ahí. Desde que han aparecido las técnicas de virtualización, es una herramienta indispensable para crear máquinas virtuales Debian. Por si no lo han usado nunca, además es facilísimo. Un ejemplo:

        debootstrap lenny /un/directorio/

O sea, que en Debian ya partíamos con ventaja cuando todo esto de la virtualización se puso de moda. Podíamos crear la base de una máquina virtual (su imagen de disco), usar debootstrap para meter ahí un sistema Debian básico, y arrancarlo. Todo en cuestión de minutos.

En Ubuntu tienen una utilidad que se llama python-vm-builder y que da el paso siguiente: además de usar debootstrap para crear el sistema básico, también crea la imagen de disco e incluso te deja (en el caso de QEMU/KVM, que es el que he probado yo) un script para arrancarla con los parámetros adecuados. O sea, que crear una máquina virtual completa, lista para correr, se reduce a esto:

        vmbuilder kvm hardy

Y luego ejecutar el script run.sh que te deja en el directorio que crea. Lo malo es que no soporta (que yo haya visto) Debian, sólo Ubuntu, pero debería ser trivial apañar algo para que lo haga. Seguro que alguien por ahí lo ha hecho ya.

Si usas Xen, mejor todavía. "De serie" viene con Debian (y Ubuntu) xen-create-image (paquete xen-tools), que es una utilidad que hace absolutamente todo lo que te hace falta para crear una máquina virtual Debian/Ubuntu para Xen de forma tan sencilla como esto:

        xen-create-image --hostname mimaquina

Hay otros parámetros que hay que configurar, pero se pueden poner en un fichero y usar eso por defecto salvo que se indique otra cosa. Se puede usar debootstrap para crear máquinas con xen-create-image, pero lo más rápido es usar un tar.gz con un sistema creado previamente, o directamente un árbol de directorios en el que hayas hecho el debootstrap previamente. Si quieres crear tropecientas máquinas con Etch o Lenny, puedes tener los árboles creados de antemano y luego usar el método copy de xen-create-image. Es así como alcanzamos el "récord" de crear una máquina virtual en 15 segundos en el trabajo. xen-create-image también crea el fichero de configuración de Xen. No tienes que hacer nada más. Permite muchas otras customizaciones que lo hacen todavía más potente, pero no me voy a meter en eso ahora.

Pues bien. Resulta que en las distribuciones RedHat, Fedora y CentOS (Suse es más comercial y ya ni hablo de ella; Mandriva ... ¿existe todavía?) no hay nada así de fácil. Por lo que he estado mirando, hay dos formas serias:

Desconozco si hay otros métodos, y si alguien lee esto y los conoce, por favor, que me los diga. Estoy escribiendo este rollo porque me parece tan increíble como ridículo que no haya algo estándar y Open Source como debootstrap/xen-create-image/vmbuilder en las distribuciones basadas en rpm.

La gran diferencia de virt-install y cobbler con los programas de antes es que el provisionamiento se basa en arrancar el programa de instalación nativo de la distribución y darle unos valores predefinidos en forma de fichero kickstart. Eso quiere decir que la instalación va por el camino que tú le has prefijado, y que quedará un sistema con las preferencias que tú le has dado. Pero sigues teniendo que pasar por todas las etapas de la instalación, aunque sea de forma desatendida (sólo tienes que sentarte a mirar cómo se instala todo, dicho de otra forma), lo que es mucho más lento que copiar ficheros (como haces con xen-create-image).

Eso sí, tanto cobbler como virt-install te permiten instalar también otros sistemas operativos. Yupi.

Pero hete aquí que en Debian, y del mismo autor de las xen-tools, hay un paquete que se llama rinse y que instala, a la debootstrap, distribuciones basadas en rpm. Hace lo que parece obvio (pero no debe serlo tanto): se descarga los rpms y los descomprime en el directorio que le digas. Ejemplo de ejecución:

        rinse --distribution centos-5 --directory /mi/directorio

No todo es juerga, claro. rinse tiene que hacer algún truco un poco sucio para acabar la instalación. Pero funciona, y es más rápido (con diferencia) que cobbler o virt-install.

O sea, que lo mejor para provisionar máquinas con distribuciones basadas en rpm es una distribución que no usa rpm como formato nativo. Oh, the irony.

Syndicate content