miércoles, 30 de julio de 2014

Cómo entender el entorno de configuración de Chef en un VPS

Las herramientas de gestión de configuración proporcionan una vía rápida para el despliegue de varios equipos con una configuración similar. Entre estas herramientas, una de las más utilizadas es Chef, que utiliza Ruby y se encarga de la configuración de las máquinas por medio de archivos de configuración que denominan “recetas”.
Chef proporciona una forma rápida y sencilla de configurar entornos enteros en vez de sólo una serie de aplicaciones individuales. En cualquier proceso donde necesitemos instalar un determinado software o modificar cierta configuración del servidor, podemos hacer uso de Chef para automatizar este proceso.
A lo largo de esta entrada, vamos a ofrecer una visión general de cómo se organiza Chef y que herramientas nos proporciona para lograr sus objetivos.

Términos utilizados por Chef

Antes de nada, es importante entender los diferentes componentes que forman parte de Chef.
1.- Infraestructura de funcionamiento de Chef
Vamos a empezar por ver los diferentes modelos que componen la estrategia de despliegue de alto nivel.
El sistema Chef define roles que cada máquina o recurso desempeña en el proceso de implementación:
  • Chef Server: Es la ubicación central donde se almacenan las recetas de configuración, el nodo y las definiciones de la estación de trabajo. Es la máquina central que se utilizará para la configuración de cualquier otra máquina de la infraestructura.
  • Chef Nodes: son los equipos que están configurados por el Chef. Cada nodo representa una máquina separada, contenido que puede ser un hardware físico o bien virtual. Estos entornos contienen una aplicación cliente que puede conectarse con el servidor Chef.
  • Chef Workstations: Son donde se crean o editan los detalles de la configuración del Chef. Estos archivos de configuración son llevados al servidor Chef, donde están listos para ser desplegados en cualquier nodo.
2.- Detalles del servidor
El servidor es el punto central que es accedido por el resto de máquinas. Básicamente se trata de un gran repositorio con todos los detalles de configuración.
Gestiona las conexiones y permisos de nodos y estaciones de trabajo y organiza los datos para que pueda ser accedido de forma sencilla por los clientes. El servidor también puede incluir una interfaz web con el fin de administrar o configurar algunos detalles.
3.- Detalles de los nodos
Como ya comentamos anteriormente, un nodo puede ser una máquina física o virtual. Sus únicos requisitos son que tiene que tener acceso a la red y que se pueda comunicar con el servidor Chef.
Cada nodo se comunica con el servidor central utilizando una aplicación llamada “chef-client”. Esta se encarga de la extracción de datos fuera del servidor y ejecución de los pasos de configuración para obtener el resultado deseado en el nodo. El cliente y el servidor se comunican a través del uso de una autenticación basada en claves RSA.
El cliente también hace uso de una herramienta llamada “Ohai” para obtener información sobre el nodo. Esto se utiliza con el fin de configurar ciertos detalles y rellenar variables contenidas dentro de los archivos de configuración.
4.- Detalles de la estación de trabajo
Una estación de trabajo cuenta con las herramientas necesarias para crear y modificar los detalles de configuración para cualquiera de los nodos disponibles y se puede comunicar con el servidor Chef para que estén disponibles.
Una herramienta importante para la gestión es “Knife”. Se trata de una puerta de enlace por la que se puede configurar cualquier cosa que se almacene en el servidor. Se puede gestionar los nodos y configuraciones y, en general se puede utilizar para acceder al servidor de la manera especificada por el Chef.
Las configuraciones y definiciones que se crean y modifican en una estación de trabajo están comprometidos con el control de versiones y luego empujados al servidor. El repositorio se llama el “chef-repo”.

Estructura de archivos Chef-repo

Chef maneja la información de configuración acorde a una estructura de directorios especificada. Es importante comprender esta jerarquía con el fin de crear recetas de manera efectiva.
Como mencionamos anteriormente, los archivos de configuración del servidor se deben mantener en el control de versiones en el repositorio se conoce como el “chef-repo”. Esto es sólo un directorio donde podemos encontrar una estructura similar a la siguiente.
  • certificates/: Contiene los certificados SSL que pueden estar asociados con los clientes para la autenticación.
  • chefignore: Muestran los archivos y directorios dentro de la estructura que no se deben incluir en el empuje hacia el servidor.
  • config/: Contiene uno de los dos archivos de configuración del repositorio.
  • cookbooks/: Contiene todas las recetas que configuran la infraestructura de su organización.
  • data_bags/: Contiene varios paquetes de datos para su configuración.
  • environments/: Contiene la ubicación del nivel superior que contiene todos los detalles para el despliegue.
  • Rakefile: Este archivo define las tareas que el Chef puede realizar en sus configuraciones.
  • roles/: Contiene los ficheros que define los roles que pueden ser asignados a los nodos.

Estructura de archivos Chef CookBook

Dentro del directorio cookbooks que forma parte del “chef-repo”, los subdirectorios que nos encontramos dentro de él definen recetas específicas para las aplicaciones. Dentro de cada directorio se especifica cómo se debe instalar ese servicio y qué cambios deben hacerse para que funcione correctamente.
A continuación os indicamos los archivos y definiciones que nos permiten indicar como deben actuar.
El fichero metadata.rb o metadata.json contiene información de metadatos sobre el servicio. Esto incluye información básica como el nombre y la versión pero también es el lugar donde se almacena la información de dependencia. Si este libro de cocina depende de otros libros de cocina que se instalen, puede enumerarlos en este archivo y Chef los instalará antes del libro que este.
El directorio attributes contiene las definiciones de atributos que se pueden utilizar para anular o definir los valores que los nodos tendrán en ese servicio.
El directorio difinitions contiene los archivos de definiciones que indican los recursos a utilizar.
El directorio files describe cómo el Chef debe distribuir los archivos en todo el nodo en el que se está desplegando.
El directorio recipes contiene las recetas que definen cómo se debe configurar el servicio. Las recetas son generalmente pequeños archivos que configuran aspectos específicos del sistema.
El directorio templates se utiliza para proporcionar una gestión de configuración más compleja. Puede proporcionar archivos completos de configuración que contienen comandos de Ruby embebidos.

Por medio de este post hemos intentado explicar la estructura utilizada por Chef a la hora de gestionar sistemas. Próximamente veremos algún ejemplo de cómo crear una receta básica.

No hay comentarios:

Publicar un comentario