lunes, 18 de agosto de 2014

Crea Máquinas Virtuales rápidamente con Vagrant + Chef

Vagrant es una herramienta que permita la compresión y distribución de Máquinas Virtuales (VM). Estas VM pueden ser de distintos proveedores ("Providers") como: VirtualBox, VMware, Docker, Hyper-V, etc.

El proceso es el siguiente: Primero se crea una VM con un proveedor determinado, luego se comprime en un formato ".box", para utilizar este "box" como base para crear nuevos "boxes".



Beneficios
  • El proceso de clonación de VMs es lento y poco flexible. Copias la máquinas virtuales "as-is"
  • Vagrant permite modular los recursos de la VM, como memoria RAM, CPUs, espacio de disco duro.
  • Vagrant permite agregar Provisionadores, como Puppet o Chef, para automatizar la instalación y configuración de aplicaciones y servicios.

Nota: Para crear VMs en la nube (Amazon, OpenStack, Google Compute Engine, etc.), los mismo creadores de Vagrant, han creado Packer. Esta herramienta, además de crear ambientes en la nube, permite automatizar el proceso de creación de VMs en VirtualBox y VMware desde un archivo ISO con el Sistema Operativo.

Objetivos

  • Crear una VM en VirtualBox, utilizando Vagrant y las "base box" disponibles en vagrantbox.es
  • Como aumentar el espacio en disco de las VMs
  • Agregar servicios con Chef

Solución

Primero se debe instalar Vagrant y VirtualBox, y agregar las rutas al PATH de tu sistema operativo:


Inicializar Vagrant Box

Para iniciar un box de Vagrant, simplemente debemos crear una carpeta y ejecutar "vagrant init" para crear el Vagrantfile:


Este comando crea el archivo de configuración de Vagrant, implementado con Ruby.

La única información especificada es la versión de Vagrant: 2, y el nombre del box: "base".

Vagrant tiene una solución en la nube para alojar boxes: Vagrant Cloud. Pero uno puede crear sus propios "box" base, o utilizar los "box" base de este sitio: Vagrantbox.es

En este caso vamos a utiliza un "box" base de Oracle Linux 6.5 con Chef y Puppet instalado:


Yo prefiero descargar el "box" y luego direccionarlo directamente desde mi archivo de configuración, pero se puede direccionar directamente a la URL:

Una vez definido el box, podemos iniciarlo ejecutando "vagrant up":


Bueno ya tenemos una copia de la virtual descargada en ejecución, que más podemos hacer?

Podemos ver que boxes tenemos instalados:


Podemos destruirla, eliminando la virtual:

Ok, pero si queremos aumentar los recursos de la virtual, instalarle algún software? Bueno para esto hay que ir al archivo Vagrantfile y programar estos comportamientos:

Configurar las propiedades del Box, carpetas compartidas y las redes


Configurar las propiedades de VirtualBox

Para modificar los recursos de RAM, CPU, cambia el nombre de la virtual de VirtualBox, podemos agregar:






Agregar un Disco Duro adicional a la Máquina Virtual

El caso del disco duro es especial. Como las máquinas virtuales vienen con un disco de 10 GB y tienen un formato genérico (.VMDK) no puede ser expandido facilmente. Por otro lado, el espacio de SWAP también es reducido.



Por lo tanto tenemos que crear un nuevo disco, agregarlo al sistema operativo y mapearlo para que sea reconocido por Linux.

Agregar los siguientes archivos a la carpeta de vagrant y agregar los cambios al Vagrantfile para crear el archivo "file_to_disk" de 100 GB y agregar 4 GB de Swap:



Vagrant Shell es el tipo de provisionamiento más sencillo, que ejecuta scripts directamente al sistema operativo creado.


Agregar Software con Chef

A las herramientas que permiten agregar software, se les conoce como Provisionadores (Chef o Puppet, entre otros).

En este caso usaré Chef para instalar el servicio de Apache HTTP.

Crear una carpeta "chef/cookbook/http/recipes/" con el archivo "install-httpd.rb" con el formato "cookbook/[nombre de libro de recetas]/recipes/[nombre de receta].rb"



Reiniciar el "box" con "vagrant reload" y ejecutar "vagrant provision" para ejecutar la receta.


Así podemos ir automatizando continuamente nuestras instalaciones hasta convertirlas en "one-click" y simplemente esperar a que el ambiente este preparado para ejecutar nuestras aplicaciones.

Recursos