
Detalles del Tutorial
- Dificultad: Aprendiz
- Duración: 20 min
- Hemos habilitado un repo en GitHub para que puedas descargar el código de esta entrada:
- https://github.com/codeheroco/chef
La semana pasada hablamos de Vagrant, una herramienta muy útil que cumple el propósito de facilitar el proceso de construcción de ambientes virtuales de manera automatizada; sin embargo la instalación de software y su configuración en los ambientes es quizás una de las tareas más importantes de este proceso, es por ello que esta semana hablaremos de una de las más utilizadas herramientas de automatización y suministro, Chef.
¿Qué es Chef?
Es un framework de automatización de infraestructura de sistemas, esto permite desplegar aplicaciones y sistemas a cualquier ambiente físico, virtual o en la nube fácilmente con un enfoque en la preparación de instalación y configuración previa del ambiente. Como su nombre lo indica, la herramienta pretende seguir un conjunto de pasos o recetas con el propósito de presentar un producto final ya listo para trabajar y/o probar.Existen 2 tipos de versiones:
Chef Server está enfocado a ser el servidor central que, en comunicación con los equipos de trabajo, permite suministrar a los diferentes ambientes o nodos con las diversas configuraciones que sean necesarias, las cuales se mantienen alojadas en el servidor. Además ofrece varias ventajas particulares del trabajo de varios nodos como balanceo de carga, escalabilidad, búsquedas rápidas por tipo (Ej. todos los ambientes Ubuntu Precise, o todos los ambientes con 4GB de RAM), y mucho más.
Por el contrario, Chef Solo es la versión de código abierto y reside localmente en el nodo, esto quiere decir que toda la información y recetas necesarias para configurar el nodo deben estar presentes en su disco duro.
Para nuestro caso, esta última será la versión que utilizaremos a lo largo de este escrito.
¿De qué esta compuesto?
Como mencionamos anteriormente se encuentran los servidores finales llamados Nodos, los cuales son los principales destinos de todo el proceso que se ejecutará, además tenemos las Estaciones de Trabajo, como su nombre lo indica, es el sistema que los desarrolladores manipulamos directamente para crear las piezas que luego serán desplegadas a los nodos.También tenemos las Recetas, son archivos escritos en lenguaje Ruby que ejecutan una serie de comandos para instalar y configurar software, mientras que un conjunto de recetas relacionadas con un mismo procedimiento se denomina Recetario. Supongamos el caso de un sencillo servidor web, tendríamos una receta que instale Nginx y otra MySQL, podríamos crear un recetario llamado
simple web server cookbook
que contenga estas recetas.A la configuración reutilizable a implementar en cada nodo se le denomina Rol, retomando el ejemplo del servidor web, quisiéramos que cualquier nodo con dicho tipo de rol sea configurado para tener abierto los puertos 80 y 443 (http y https) y que se instale Nginx (mediante una receta), en este caso se crea un rol para el cual se especificarán los atributos involucrados (como los puertos abiertos) y las recetas a utilizar (como la de instalación de Nginx).
Hablando del tema de almacenamiento, entra en juego el Repositorio Chef, también denominado Cocina este se encarga de reunir toda ese código fuente de instalaciones y configuraciones que creamos en nuestras estaciones de trabajo, por lo que es altamente recomendable que sea sincronizado con un control de versiones como Git.
Complementos
Knife, el cuchillo de Chef, es una herramienta de linea de comandos que provee una interface de comunicación entre el repositorio Chef que tenemos localmente en nuestra estación de trabajo y el Chef Server. En nuestro caso como estaremos utilizando Chef Solo, necesitaremos la versión particular de Knife Solo, debido a que el enfoque “Solo” refiere a que no existe un Chef Server sino que nuestro propio nodo actúa como tal, siguiendo el concepto de Knife, su versión Solo nos ofrece una interface de comunicación directa con otros nodos.Librarian, el bibliotecario, nos ofrece un manejo de dependencias de los recetarios en el repositorio, además de facilitar el manejo e recetarios fuera de él, ofreciendo la gran ventaja de utilizar el código de los mismos directo desde la fuente.
Y por supuesto Vagrant, el cual se integra muy bien con Chef, en caso de que quieras desplegar a ambientes virtuales esta herramienta te ayudará a crearlos con una enorme facilidad, de lo contrario igual le puedes sacar gran provecho al crear un ambiente virtual “conejillo de indias” para probar tus configuraciones y recetas de Chef.
¿Cómo comienzo?
Instalemos Vagrant y creemos un ambiente virtual de prueba, posteriormente procedemos a instalar el resto de los componentes que nos harán falta (se recomienda tener una versión de Ruby superior a 1.9.2):Luego creemos un directorio para nuestra cocina e iniciémosla:
Ahora crearemos con Librarian el archivo Cheffile que nos permitirá manejar los recetarios:
site
, en este caso sería el sitio del API de la comunidad de Opscode (site 'http://community.opscode.com/api/v1'
).Finalmente dejamos que Librarian se encargue de buscar y descargar las recetas que necesitamos:
Nodo normal
Crearemos nuestro primer nodo, supongamos que este no tiene el soporte nativo para el suministro de Chef, para esto usaremos nuestro ambiente conejillo de indias de Vagrant sin hacer uso del dicha funcionalidad. Editemos el Vagrantfile y verifiquemos que el script de suministro que teníamos en el tutorial de Vagrant esté comentado:Ahora sabiendo esta IP podremos crear el nodo:
El nombre de usuario y contraseña por defecto del ambiente esEsto detectará automáticamente la versión del sistema operativo que se encuentra en el servidor e instalará Chef, Ruby y Rubygems en él, con la intención de preparar el ambiente para el suministro que se llevará a cabo.vagrant
.
Este proceso creará el directorio
/nodes
un archivo
cascarón .json para que especifiquemos la configuración e instalación,
si lo abrimos veremos que se encuentra casi vacío, lo que nos da entrada
a jugar con la configuración, agreguemos algunos detalles:Por último debemos suministrar al ambiente con nuestra cocina y la configuración de recetas que hemos creado:

¿Cuál es la desventaja de este método?
Debido a que el suministro del ambiente se hace en vivo con knife, si el ambiente es destruido perderemos la configuración y tendremos que volver a suministrarlo utilizando:Este comando es equivalente a hacerprepare
y luegocook
.
Nodo Vagrant con soporte nativo
Debido a una incompatibilidad entre la versión de Chef que trae la caja de Vagrant que usamos en el tutorial pasado y la ultima versión del recetario apt nos vemos en la necesidad de editar el Cheffile y usar recetarios más antiguos, quedando de la siguiente manera:
Luego, usando Librarian, volvemos a construir los recetarios:
/nodes
:vagrant_node.json
¿Cuál es la ventaja de este método?
Debido a que el suministro se hace durante el proceso de levantamiento y que la configuración de dicho suministro está ligada al Vagrantfile, no importa si los ambientes son destruidos, con solo ejecutarvagrant up
nuevamente tendremos nuestro ambiente virtual previamente configurado.
No hay comentarios:
Publicar un comentario