En el tutorial de hoy vamos a mostrar de
forma práctica los pasos necesarios para utilizar la arquitectura
cliente-servidor de Chef. Necesitaremos:
Para empezar, creamos una cuenta de usuario nueva en la página de Hosted Chef (click en Get Chef). Llegará un correo electrónico con un enlace que debemos abrir para validar la cuenta.
Una vez registrados, entramos en el panel de gestión de Hosted Chef y creamos una organización nueva. Hay que rellenar el nombre e identificador de la organización y escoger un plan. Seleccionamos el plan gratuíto, que ofrece hasta un máximo de 5 nodos gestionados por Chef.

En la siguiente pantalla, tras crear la organización, debemos descargar dos ficheros.


Con esto, ya disponemos de los tres ficheros necesarios para configurar el repositorio de Chef.
El Servidor de Chef no almacena recetas sueltas, así que vamos a ver cómo adaptar la receta del último día a un cookbook.
Creamos un cookbook de nombre clock usando
Comprobamos que el nodo aparece entre los gestionados por el servidor:
También hemos aprendido varios comandos básicos de la herramienta
En próximos post profundizaremos en la creación de cookbooks y veremos cómo podemos usar cookbooks creados por la comunidad de Chef.
- Un servidor de Chef.
- Un repositorio local donde almacenar y editar nuestras configuraciones.
- Una máquina donde instalaremos el cliente de Chef.
Hosted Chef
Vamos a utilizar Hosted Chef, un servicio proporcionado por Opscode, que nos ofrece un Servidor de Chef y una completa interfaz web para su gestión. Con esto evitaremos instalar un Servidor de Chef desde cero.Para empezar, creamos una cuenta de usuario nueva en la página de Hosted Chef (click en Get Chef). Llegará un correo electrónico con un enlace que debemos abrir para validar la cuenta.
Una vez registrados, entramos en el panel de gestión de Hosted Chef y creamos una organización nueva. Hay que rellenar el nombre e identificador de la organización y escoger un plan. Seleccionamos el plan gratuíto, que ofrece hasta un máximo de 5 nodos gestionados por Chef.

En la siguiente pantalla, tras crear la organización, debemos descargar dos ficheros.

[tu-organización]-validator.pem
es una clave que nos servirá para registrar en esta organización nuevos clientes de Chef, es decir, los servidores a configurar.knife.rb
contiene la configuración necesaria para usarknife
, la herramienta de línea de comandos de Chef.

Con esto, ya disponemos de los tres ficheros necesarios para configurar el repositorio de Chef.
Puesta a punto del repositorio
Clonamos el repositorio oficial de Chef en un directorio de nuestra máquina local.$ git clone git://github.com/opscode/chef-repo
Creamos un directorio con nombre .chef
dentro de chef-repo
y movemos ahí los ficheros que hemos descargado antes. El contenido debería quedar así:$ ls .chef/
[tu-organización]-validator.pem
[tu-nombre-de-usuario].pem
knife.rb
Nos situamos en el directorio chef-repo
y, con la ayuda de knife
, comprobamos que nuestras credenciales están bien.$ knife client list
[tu-organización]-validator
Nota: Si no tienes knife
en tu sistema, debes instalar el paquete Omnibus de Chef.Crear un cookbook
En el anterior post explicamos lo que era una receta, un fichero escrito en Ruby que contiene una configuración para aplicar en la máquina. Hoy introducimos el concepto de cookbook, que no es más que una colección de recetas relacionadas entre sí. Por ejemplo, un cookbook de MySQL podría contener dos recetas: una que instala el servidor y otra que instala el cliente.El Servidor de Chef no almacena recetas sueltas, así que vamos a ver cómo adaptar la receta del último día a un cookbook.
Creamos un cookbook de nombre clock usando
knife
.$ knife cookbook create clock
** Creating cookbook clock
** Creating README for cookbook: clock
** Creating CHANGELOG for cookbook: clock
** Creating metadata for cookbook: clock
En un editor de texto abrimos la receta por defecto del cookbook (está en cookbooks/clock/recipes/default.rb
) y copiamos el siguiente código.1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
Subir el cookbook al Servidor de Chef
El cookbook que acabamos de crear está en nuestra máquina local, pero para poder aplicarlo en los nodos es necesario subirlo al servidor de Chef.$ knife cookbook upload clock
Uploading clock [0.1.0]
Uploaded 1 cookbook.
Este mismo comando sirve también para subir al servidor actualizaciones que hagamos en nuestro cookbook.Arranque del nodo
Para probar el cookbook necesitamos una máquina donde tengamos acceso SSH y permiso para ejecutar comandos como root consudo
. Ejecutamos:$ knife bootstrap HOSTNAME \
--ssh-user USER \
--run-list "recipe[clock]" \
--sudo
El proceso puede tardar unos minutos. La salida del comando terminará con:localhost Chef Client finished, 1 resources updated
Este comando instala el cliente de Chef en la máquina y ejecuta el cookbook indicado en run_list. Si no devuelve ningún error significa que el estado del nodo es equivalente al especificado en la configuración. Esto es lo que se conoce como convergencia en Chef.Comprobamos que el nodo aparece entre los gestionados por el servidor:
$ knife node list
[nombre-del-nodo]
También podemos loguearnos por SSH en la máquina y comprobar que el paquete ntpdate
está instalado y la entrada del crontab añadida.Borrar el nodo
Desde el momento en el que se ha realizado el bootstrap del nodo, éste ha quedado registrado en el servidor de Chef. Esto sirve para que el cliente pueda recibir actualizaciones del cookbook desde el servidor. Para derregistrarlo podemos hacerlo desde el listado de nodos del panel de gestión, o desde la línea de comandos utilizandoknife
:$ knife node delete NOMBRE_DEL_NODO
$ knife client delete NOMBRE_DEL_NODO
Conclusiones
En este tutorial hemos visto la forma de configurar una máquina con Chef. Podemos intuir la potencia que se esconde tras esta herramienta sabiendo que es posible gestionar de esta manera cientos o miles de nodos.También hemos aprendido varios comandos básicos de la herramienta
knife
, que va a demostrar ser una gran aliada mientras nos sumergimos en el universo de Chef.En próximos post profundizaremos en la creación de cookbooks y veremos cómo podemos usar cookbooks creados por la comunidad de Chef.