¿Qué es puppet?
Puppet es una herramienta de automatización de infraestructura utilizada para configurar y administrar sistemas a través de un lenguaje de configuración declarativo.
¿Por qué usar un administrador de estado?
Analicemos el siguiente problema: usted esta a cargo de una granja de servidores, por ejemplo 10 servidores, donde se ejecutan varios servicios y procesos para un sitio web; ahora usted como administrador de la infraestructura requiere que cada servidor tenga la misma consistencias con las aplicaciones, versiones y configuraciones para que sigan funcionando de forma correcta, para realizar esta tarea realiza modificaciones manuales y ejecución de scripts en cada servidor, y realiza llamados a una ip para verificar el funcionamiento. Ahora usted tambien desea mantener en un estado determinado los servidores y que todos sean homogéneos lo cual requiere una revisión periódica.; con lo mencionado podemos notar el problema que tiene que hacer muchas cosas manual mente para tener la infraestructura controlada, ahora imagine que no son 10 servidores, si no 100, realizar estas tareas se convierte en una complejidad y consumo de su tiempo y esto puede hacer que ocurran problemas de actualizacion de aplicaciones en unos servidores o caídas del servicios que no pueda controlar con la rapides que se requiere.
Un administrador de estados le ayudara a que todos los problemas que se mencionan y pueden surgir se solucionen desde un unico controlador, esto es posible ya que este administrador tendrá un listado de los servidores a administrar ademas de en que estado, aplicaciones, y configuraciones contengan cada servidor.
¿Qué es puppet?
Si leemos la definición que esta en su documentación oficial ¿Qué es Puppet? que dice "Puppet es una herramienta que te ayuda a gestionar y automatizar la configuración de servidores", para abundar en la definicion tenemos:
Puppet es una herramienta de automatización de infraestructura utilizada para configurar y administrar sistemas a través de un lenguaje de configuración declarativo. Con Puppet, los administradores de sistemas pueden describir la configuración deseada de un sistema en un archivo de configuración y luego ejecutar un agente en el sistema para aplicar automáticamente la configuración. Esto permite una mayor consistencia y precisión en la configuración de sistemas, así como una mayor facilidad de implementación y actualización de cambios.
Arquitectura de Puppet
La arquitectura de Puppet se compone de los siguientes componentes:
-
Puppet Master: Es el servidor central que almacena y distribuye los archivos de configuración a los agentes Puppet.
-
Puppet Agent: Es el software que se ejecuta en cada sistema que se está configurando. El agente se comunica con el servidor Puppet Master para obtener su configuración y aplicarla al sistema.
-
Archivos de configuración: Los archivos de configuración se escriben en un lenguaje declarativo y describen cómo se deben configurar los sistemas.
-
Modulos: Puppet cuenta con una gran cantidad de módulos predefinidos para configurar diferentes sistemas y servicios.
-
Certificado: El sistema de certificado de Puppet es responsable de autenticar a los agentes y asegurar que solo los agentes autorizados pueden comunicarse con el servidor Puppet Master.
La arquitectura de Puppet permite automatizar la configuración de múltiples sistemas de manera centralizada y controlada, lo que facilita la implementación de cambios, el monitoreo y la resolución de problemas en un entorno de TI.
El Puppet Master
El Puppet Master es el servidor central que se encarga de almacenar y distribuir los archivos de configuración a los agentes Puppet. Este componente es responsable de compilar y distribuir los cambios en la configuración a los sistemas registrados, que son administrados por los agentes Puppet. El Puppet Master se ejecuta en un servidor y proporciona una interfaz web para la gestión de los archivos de configuración, la asignación de permisos y la generación de informes.
El Puppet Master es el punto central de la arquitectura Puppet, desde aquí se puede controlar y monitorear todos los sistemas que se están configurando. Los agentes Puppet se conectan al servidor Puppet Master para obtener su configuración y aplicarla al sistema. El master también es el encargado de autenticar y autorizar los agentes y asegurar que solo los agentes autorizados pueden comunicarse con él.
El Puppet Agent
El Puppet Agent es el software que se ejecuta en cada sistema que se está configurando mediante Puppet. Este componente se encarga de comunicarse con el servidor Puppet Master para obtener su configuración y aplicarla al sistema. Es responsable de verificar periódicamente si hay actualizaciones en la configuración desde el servidor Puppet Master y, si es necesario, aplicarlas.
El Agente Puppet es el componente que se encarga de realizar las tareas de configuración en los sistemas, estas tareas son especificadas en los archivos de configuración declarativos almacenados en el Puppet Master. Estos archivos contienen las instrucciones para configurar servicios, paquetes, usuarios y cualquier otra característica del sistema. El Agente Puppet se encarga de interpretar estas instrucciones y llevarlas a cabo en el sistema.
En resumen, el Agente Puppet es el componente que se encarga de aplicar la configuración declarada en el servidor Puppet Master a los sistemas controlados, y también se encarga de verificar y aplicar cambios en la configuración periódicamente.
La capa de abstracción de recursos de puppet
La capa de abstracción de recursos de Puppet es un conjunto de herramientas que se utilizan para describir los recursos de un sistema en los archivos manifest de Puppet. Estos recursos incluyen paquetes, servicios, archivos y usuarios, entre otros.
La capa de abstracción de recursos permite describir los recursos de un sistema de manera independiente de la plataforma específica, lo que significa que los mismos archivos de configuración se pueden utilizar para configurar sistemas basados en diferentes distribuciones de Linux o versiones de Windows.
Cada recurso se describe mediante una "definición" que especifica el estado deseado del recurso. Por ejemplo, una definición de paquete especificaría qué paquetes deben estar instalados en el sistema y una definición de servicio especificaría cómo deben estar configurados los servicios en el sistema.
La capa de abstracción de recursos también permite describir relaciones entre recursos y especificar requisitos previos para que un recurso sea configurado. Esto permite una mayor flexibilidad y precisión en la configuración de sistemas y facilita la implementación y actualización de cambios.
En resumen, la capa de abstracción de recursos es un conjunto de herramientas que permite describir los recursos de un sistema de manera independiente de la plataforma específica, lo que facilita la configuración y automatización de tareas en diferentes sistemas con Puppet.
Lenguaje declarativo de puppet
El lenguaje declarativo de Puppet es el lenguaje utilizado para describir la configuración deseada de un sistema en los archivos manifest de Puppet. Este lenguaje permite describir el estado final deseado de un sistema en lugar de escribir scripts para automatizar tareas específicas.
El lenguaje declarativo de Puppet es similar a un lenguaje de programación, pero en lugar de escribir código que indica cómo realizar una tarea, se declara el estado final deseado del sistema y Puppet se encarga de realizar las acciones necesarias para alcanzar ese estado.
Por ejemplo, en lugar de escribir un script para instalar un paquete específico, se puede declarar que el paquete debe estar instalado mediante una definición de paquete en un archivo manifest de Puppet:
package { 'nginx':
ensure => installed,
}
En este ejemplo, se está declarando que el paquete "nginx" debe estar instalado, Puppet se encargará de instalarlo si es necesario.
El lenguaje declarativo de Puppet también permite describir relaciones entre recursos y especificar requisitos previos para que un recurso sea configurado. Esto permite una mayor flexibilidad y precisión en la configuración de sistemas y facilita la implementación y actualización de cambios.
Facter y los facts de puppet
Facter es una herramienta utilizada por Puppet para recolectar información sobre el sistema en el que se está ejecutando el agente de Puppet. Facter recopila información sobre características del sistema como la versión del sistema operativo, la arquitectura, la configuración de red, entre otros. Esta información se conoce como "facts" (hechos).
Los facts son un conjunto de variables que contienen información sobre el sistema y son utilizadas por Puppet para tomar decisiones sobre cómo configurar el sistema. Los facts se utilizan para personalizar la configuración de los sistemas en función de las características específicas de cada uno.
Por ejemplo, un fact podría indicar la versión del sistema operativo, lo que permitiría a Puppet utilizar la configuración adecuada para esa versión específica. Otro ejemplo podría ser la cantidad de memoria RAM, lo que permitiría a Puppet ajustar la configuración del sistema en función de la cantidad disponible.
Los facts son recopilados automáticamente por Facter al ejecutar el agente Puppet y están disponibles para ser utilizados en los archivos manifest de Puppet. Los facts también se pueden definir manualmente en el sistema, lo que permite que Puppet tome decisiones en función de información específica de ese sistema.
Cómo funciona puppet
Puppet funciona mediante la utilización de un servidor central (Puppet Master) y agentes que se ejecutan en los sistemas que se están configurando. La arquitectura se divide en tres fases principales:
-
Autorización: El agente Puppet se conecta al servidor Puppet Master y se autoriza mediante un sistema de certificados. Una vez autorizado, el agente puede recibir y aplicar configuraciones.
-
Recolección de información: El agente utiliza la herramienta Facter para recopilar información sobre el sistema, conocida como "facts". Estos facts son utilizados para personalizar la configuración del sistema.
-
Configuración: El agente recibe los archivos de configuración del servidor Puppet Master y los aplica al sistema. Los archivos de configuración están escritos en un lenguaje declarativo y describen el estado final deseado del sistema. El agente compara el estado actual del sistema con el estado deseado y realiza las acciones necesarias para alcanzar ese estado, como instalar o desinstalar paquetes, configurar servicios, etc.
Puppet se ejecuta de manera periódica, generalmente cada 30 minutos, para asegurar que el sistema sigue la configuración deseada. Esto permite detectar y corregir cualquier desviación en la configuración del sistema de manera automatizada.
En resumen, Puppet funciona mediante la utilización de un servidor central y agentes que se comunican para recopilar información, autorizar y distribuir configuraciones, y aplicarlas a los sistemas de manera automatizada y periódica.