Tutorial de títeres para principiantes: ¿Qué es un títere y cómo usarlo?
Antes de aprender Puppet, comprendamos:
¿Qué es la gestión de la configuración?
La gestión de la configuración es el proceso de mantener el software y los sistemas informáticos (por ejemplo, servidores, almacenamiento, redes) en un estado conocido, deseado y consistente. También permite el acceso a un registro histórico preciso del estado del sistema para fines de auditoría y gestión de proyectos.
Los administradores de sistemas realizan principalmente tareas repetitivas como instalar servidores, configurarlos, etc. Estos profesionales pueden automatizar esta tarea escribiendo scripts.
Sin embargo, es un trabajo difícil cuando se trabaja en una infraestructura masiva. Se introdujo la herramienta de gestión de configuración, como Puppet, para resolver estos problemas.
¿Qué es Marioneta?
Marioneta es una herramienta de gestión del sistema para centralizar y automatizar el proceso de gestión de la configuración. Puppet también se utiliza como herramienta de implementación de software. Es un software de gestión de configuración de código abierto ampliamente utilizado para la configuración, gestión, implementación y orquestación de servidores de diversas aplicaciones y servicios en toda la infraestructura de una organización.
Puppet está especialmente diseñado para gestionar la configuración de Linux y Windows sistemas. Está escrito en Ruby y utiliza su exclusivo DOmain Sespecífico L(DSL) para describir la configuración del sistema.
¿Cuáles son las versiones de Títeres?
El títere viene en dos versiones:
- Marioneta de código abierto: Es una versión básica de la herramienta de gestión de configuración Puppet, también conocida como Open Source Puppet. Está disponible directamente desde el sitio web de Puppet y tiene licencia del sistema Apache 2.0.
- Empresa de marionetas: Versión comercial que ofrece funciones como informes de cumplimiento, orquestación, control de acceso basado en roles, GUI, API y herramientas de línea de comandos para una gestión eficaz de los nodos.
¿Qué puede hacer Puppet?
Por ejemplo, tienes una infraestructura con unos 100 servidores. Como administrador del sistema, su función es garantizar que todos estos servidores estén siempre actualizados y funcionando con todas sus funciones.
Para hacer esto, puedes usar Puppet, que te permite escribir un código simple que se puede implementar automáticamente en estos servidores. Esto reduce el esfuerzo humano y hace que el proceso de desarrollo sea rápido y eficaz.
Puppet realiza las siguientes funciones:
- Puppet le permite definir configuraciones distintas para cada host.
- La herramienta le permite monitorear continuamente los servidores para confirmar si la configuración requerida existe o no y no se modifica. Si se cambia la configuración, la herramienta Puppet volverá a la configuración predefinida en el host.
- También proporciona control sobre todo el sistema configurado, por lo que un cambio centralizado se realiza automáticamente.
- También se utiliza como herramienta de implementación, ya que implementa software automáticamente en el sistema. Implementa el infraestructura como código porque las políticas y configuraciones se escriben como código.
Puppet DSL y paradigmas de programación
Antes de aprender Puppet DSL, comprendamos los paradigmas de programación:
Un paradigma de programación es un estilo que se utiliza en la programación de computadoras.
Cuatro tipos de paradigmas son:
- Imperativo.
- Declarativo.
- Funcional (que se considera un subconjunto de ese paradigma declarativo)
- Orientado a objetos.
Nos centraremos en Imperativo y Declarativo.
Paradigmas imperativos
Este paradigma de programación expresa la lógica de un cálculo (Qué hacer) y describe su flujo de control (Cómo hacer).
Ejemplo:
Suponga que va a su oficina, reserva un taxi y comienza a darle instrucciones paso a paso al conductor hasta llegar a la oficina. Especificar qué hacer y cómo hacerlo es un estilo imperativo.
Paradigmas declarativos
Este paradigma de programación expresa la lógica de un cálculo (Qué hacer) sin describir su flujo de control (Cómo hacer).
Ejemplo:
Suponga que va a su oficina, reserva un taxi Uber y especifica el destino final (Oficina). Especificar qué hacer y no cómo hacerlo es un estilo declarativo.
Paradigma | Qué hacer | Cómo hacer |
---|---|---|
imperativo | Sí | Sí |
Declarativo | Sí | No |
Puppet utiliza un paradigma de programación declarativa
Puppet utiliza un enfoque de programación declarativa.
Ejemplo: Crear un usuario en el sistema:
Se puede hacer usando el patrón de programación imperativo mediante un script de shell: aquí especificamos cómo crear el usuario y qué comandos usar en el sistema operativo.
Sin embargo, se puede hacer usando el patrón de programación declarativa con solo unas pocas líneas de código Puppet, lenguaje específico del dominio Puppet (DSL), y aun así lograr el mismo resultado.
Modelos de implementación de herramientas de gestión de configuración.
Hay dos modelos de implementación para herramientas de gestión de la configuración :
- Modelo de implementación basado en push: iniciado por un nodo maestro.
- Modelo de implementación pull-based: iniciado por agentes.
Modelo de implementación basado en push
En este modelo de implementación, el servidor maestro envía las configuraciones y el software a los agentes individuales. Después de verificar una conexión segura, el maestro ejecuta comandos de forma remota en los agentes. Por ejemplo, Ansible y pila de sal.
Modelo de implementación basado en pull.
En este modelo de implementación, los servidores individuales se comunican con un servidor maestro, verifican y establecen una conexión segura, descargan sus configuraciones y software y luego se configuran en consecuencia (por ejemplo, Puppet y Chef).
¿Cómo funciona Marioneta?
Puppet se basa en un modelo de implementación Pull, donde los nodos del agente se registran periódicamente después de cada 1800 segundos con el nodo maestro para ver si es necesario actualizar algo en el agente. Si es necesario actualizar algo, el agente extrae los códigos de títere necesarios del maestro y realiza las acciones requeridas.
Expliquemoslo con un ejemplo:
Ejemplo: Maestro – Configuración del agente:
El Maestro
Una máquina basada en Linux con el software Puppet master instalado. Se encarga de mantener las configuraciones en forma de códigos títeres. El nodo maestro sólo puede ser Linux.
los agentes
Las máquinas de destino administradas por un títere con el software del agente títere instalado en ellas.
El agente se puede configurar en cualquier sistema operativo compatible, como Linux o Windows or Solaris o Mac OS.
La comunicación entre maestro y agente se establece mediante certificados seguros.
Comunicación entre el Maestro y el Agente
Paso 1) Una vez que se establece la conectividad entre el agente y el maestro, el agente Puppet envía los datos sobre su estado al servidor maestro Puppet. Estos se denominan Datos: Esta información incluye el nombre del host, detalles del kernel, dirección IP, detalles del nombre del archivo, etc.
Paso 2) Puppet Master utiliza estos datos y compila una lista con la configuración que se aplicará al agente. Esta lista de configuración a realizar en un agente se conoce como catalogar. Esto podría cambiarse, como instalación de paquetes, actualizaciones o eliminaciones, creación del sistema de archivos, creación o eliminación de usuarios, reinicio del servidor, cambios de configuración de IP, etc.
Paso 3) El agente utiliza esta lista de configuración para aplicar cualquier cambio de configuración requerido en el nodo.
En caso de que no haya desviaciones en la configuración, el Agente no realiza ningún cambio de configuración y deja que el nodo se ejecute con la misma configuración.
Paso 4) Una vez hecho esto, el nodo informa al titiritero indicando que la configuración se ha aplicado y completado.
Bloques de marionetas
Puppet brinda la flexibilidad de integrar informes con herramientas de terceros utilizando las API de Puppet.
Hay cuatro tipos de bloques de construcción de títeres.
- Recursos
- Clases
- Manifiesto
- Módulos
Recursos de marionetas
Los recursos de Puppet son los componentes básicos de Puppet.
Los recursos son los funciones incorporadas que se ejecutan en el back-end para realizar las operaciones requeridas en Puppet.
Clases de títeres
Una combinación de diferentes recursos se puede agrupar en una sola unidad llamada clase.
Manifiesto de marionetas
Manifest es un directorio que contiene archivos DSL de marionetas. Esos archivos tienen una extensión .pp. La extensión .pp significa programa de marionetas. El código de títeres consta de definiciones o declaraciones de clases de títeres.
Módulos de marionetas
Los módulos son una colección de archivos y directorios, como manifiestos y definiciones de clases. Son las unidades reutilizables y compartibles en Puppet.
Por ejemplo, la directriz MySQL módulo para instalar y configurar MySQL o el módulo Jenkins para gestionar Jenkins, etc.
Tipos de recursos de títeres
En general, un sistema consta de archivos, usuarios, servicios, procesos, paquetes, etc. En Puppet, estos se denominan recursos. Los recursos son los pilares fundamentales de
Marioneta. Todas las operaciones con agentes títeres se realizan con la ayuda de recursos títeres.
Los recursos de Puppet son herramientas listas para usar que se utilizan para realizar diversas tareas y operaciones en cualquier plataforma compatible. Podemos utilizar un solo recurso de Puppet para realizar una tarea específica o podemos utilizar varios recursos de Puppet juntos para realizar implementaciones de configuraciones de aplicaciones complejas.
Los recursos pueden tener diferentes tipos. Usos de marionetas recursos y tipos de recursos para describir la configuración de un sistema.
Hay tres tipos de tipos de recursos:
- Núcleo de títeres o tipos de recursos integrados.
- Tipos de recursos definidos por títeres.
- Tipos de recursos personalizados de títeres.
Núcleo de títeres o tipos de recursos integrados
Los tipos de recursos básicos o integrados son los tipos de recursos de Puppet prediseñados que se incluyen con el software de Puppet. Todos los tipos de recursos principales o integrados de Puppet son escritos y mantenidos por el equipo de Puppet.
Tipos de recursos definidos por títeres
Los tipos de recursos definidos son tipos de recursos ligeros escritos en lenguaje declarativo Puppet que utilizan una combinación de tipos de recursos existentes.
Tipos de recursos personalizados de títeres
Los tipos de recursos personalizados son tipos de recursos completamente personalizados escritos en Ruby.
Exploremos los tipos de recursos de títeres...
En la terminal, escriba el siguiente comando para mostrar una lista de subcomandos relevantes de Puppet:
Puppet --help
En nuestro caso nos interesa el subcomando “Recurso”que usaremos para encontrar información sobre los tipos de recursos de títeres incorporados.
En la terminal, escriba cualquiera de los siguientes comandos para mostrar una lista de acciones asociado con el subcomando títere “Recurso"
Puppet help resource Puppet resource --help
En este caso, tenemos la Recurso como subcomando y –tipos como acción.
Puppet tiene 49 tipos de recursos básicos incorporados.
En la terminal, escriba el siguiente comando para mostrar una lista de los tipos de recursos de títeres incorporados disponibles:
puppet resource –types
Cada tipo admite una lista de atributos. Estos atributos proporcionan una descripción detallada que utiliza Puppet para gestionar el recurso.
Para conocer todos los atributos asociados con el tipo de recurso puppet, utilice el siguiente comando:
puppet describe <resource type name>
Los parámetros enumerarán todos los atributos disponibles para ese tipo de recurso.
paquete de descripción de marionetas
Es difícil para una persona nueva comprender y relacionar muchos archivos de código de títeres no administrados. Aquí es donde necesitamos cierta agrupación para unir las operaciones. El objetivo es resolver un único problema, como por ejemplo todas las operaciones necesarias para configurar ssh en un servidor o servicio ntp o un servidor web completo o un servidor de base de datos desde cero.
¿Qué son las clases de títeres?
Las clases de títeres son una colección de recursos de títeres agrupados como una sola unidad.
Puppet introdujo clases para que la estructura fuera reutilizable y organizada.
Primero, necesitamos definir una clase usando la sintaxis de definición de clase; las clases deben ser únicas y pueden declararse solo una vez con el mismo nombre:
class <class-name> { <Resource declarations> }
Ejemplo:
class ntpconfig { file { "/etc/ntp.conf": ensure=> "present", content=> "server 0.centos.pool.ntp.org iburst\n", } }
Hasta ahora solo hemos definido la clase, pero no la hemos usado en ninguna parte. Lo que significa que este código que hemos escrito nunca se ejecutará a menos que declaremos esta clase en otro lugar.
Declaración de clase
Para usar una clase definida en el código, use el incluir palabra clave.
class ntpconfig { file { "/etc/ntp.conf": ensure=> "present", content=> "server 0.centos.pool.ntp.org iburst\n", } } include ntpconfig
Entendamos esto con un caso real.
Instalación de demostración NTP
Primero, asegúrese de que el paquete NTP no esté presente en el servidor; el siguiente comando no devolverá nada si telnet no está presente en el servidor:
rpm -qa | grep -i ntp
Como podemos ver, el paquete NTP ya está presente en el servidor. Eliminemos el paquete NTP existente:
yum remove ntp
Después de eliminar el paquete, asegúrese de que el archivo ntp.conf no exista:
ls -lrt /etc/ntp.conf
Verifique que el servicio ntp no exista ejecutando el siguiente comando:
systemctl status ntp
Cree un nuevo archivo .pp para guardar el código. Desde la línea de comando:
vi demontp.pp
Cambie al modo de inserción presionando i en el teclado.
Escriba el siguiente código para crear un nuevo archivo:
# Class Definition class ntpconfig { # Installing NTP Package package {"ntp": ensure=> "present", } # Configuring NTP configuration file file {"/etc/ntp.conf": ensure=> "present", content=> "server 0.centos.pool.ntp.org iburst\n", } # Starting NTP services service {"ntpd": ensure=> "running", } }
Después de terminar con la edición: presione esc
Para guardar el archivo, presione :wq!
El siguiente paso es check Si el código tiene algún error de sintaxis, ejecute el siguiente comando:
puppet parser validate demontp.pp
Asegúrese de haber cambiado a la raíz para poder completar la prueba sin ningún error, ejecutando el comando:
su root
Prueba es el siguiente paso en el proceso de creación de código. Ejecute el siguiente comando para realizar una prueba de humo:
Puppet applies demontp.pp --noop
El último paso es puedes seguir la marioneta en modo real y verificar el resultado.
puppet apply demontp.pp
Puppet no realizó nada porque la clase de demostración solo estaba se define pero no declaró .
Entonces, hasta que declares la clase de marionetas, el código no se aplicará.
Vamos declarar la clase de demostración dentro del mismo código usando incluir el nombre de la clase al final del código:
# Class Definition class ntpconfig { # Installing NTP Package package {"ntp": ensure=> "present", } # Configuring NTP configuration file file {"/etc/ntp.conf": ensure=> "present", content=> "server 0.centos.pool.ntp.org iburst\n", } # Starting NTP services service {"ntpd": ensure=> "running", } } # Class Declaration include ntpconfig
Otra vez check Si el código tiene algún error de sintaxis, ejecute el siguiente comando:
puppet parser validate demontp.pp
Asegúrese de haber cambiado a la raíz para poder completar la prueba sin ningún error, ejecutando el comando:
su root
Pruebas es el siguiente paso en el proceso de creación de código. Ejecute el siguiente comando para realizar una prueba de humo:
Puppet apply demontp.pp --noop
El último paso es puedes seguir la marioneta en modo real y verificar el resultado.
puppet apply demontp.pp
Esta vez el código se aplica porque la clase fue definida y luego declarada.
Asegúrese de que ntp.conf ya exista:
ls -lrt /etc/ntp.conf
Verifique que el servicio ntp se haya iniciado ejecutando el siguiente comando:
systemctl status ntpd