Puppet, una herramienta de gestión de configuración popularmente conocida para sistemas basados en Unix y Windows que permite a un administrador automatizar fácilmente las tareas de administración del sistema repetitivas y propensas a errores, que incluyen el aprovisionamiento, la instalación de paquetes/software, configuraciones y gestión de toda la infraestructura. Puppet viene en dos sabores:Puppet Enterprise y Puppet de código abierto. Como sugiere el nombre, la versión empresarial es un producto comercial y la versión de código abierto se puede descargar gratis. Este tutorial cubrirá cómo instalar y configurar Puppet de código abierto (versión 4) en sistemas basados en CentOS y Ubuntu.
Antes de comenzar con el procedimiento de instalación, comprendamos la arquitectura de la marioneta.
Arquitectura de Puppet Master/Agent
Puppet generalmente funciona según el modelo Cliente/Servidor, es decir, una arquitectura basada en Maestro/Agente, es decir, Puppet Master y Puppet Agent. El maestro de Puppet controla la información de configuración y los nodos de Puppet Agent administrados solicitan sus propios catálogos de configuración. El siguiente diagrama muestra el flujo de comunicación entre los nodos maestro y agente.
¿Qué es el catálogo?
El catálogo es un documento que contiene información sobre el estado deseado de un sistema. El maestro de marionetas compila el catálogo y los agentes de marionetas lo aplican.
Entorno de instalación de Puppet
En este tutorial, usaré dos nodos:puppetmaster.test.in (Puppet Master) y puppetagent.test.in (Puppet Agent) (son máquinas virtuales que se ejecutan en OpenStack)
¿Cómo instalar y configurar Puppet 4?
En el nodo Puppet Master:
# ping puppetagent PING puppetagent.test.in (10.180.141.126) 56(84) bytes of data. 64 bytes from puppetagent.test.in (10.180.141.126): icmp_seq=1 ttl=64 time=0.347 ms --- puppetagent.test.in ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.347/0.347/0.347/0.000 ms
En el nodo de Puppet Agent:
# ping puppetmaster PING puppetmaster.test.in (10.180.141.125) 56(84) bytes of data. 64 bytes from puppetmaster.test.in (10.180.141.125): icmp_seq=1 ttl=64 time=0.711 ms 64 bytes from puppetmaster.test.in (10.180.141.125): icmp_seq=2 ttl=64 time=0.316 ms --- puppetmaster.test.in ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1000ms rtt min/avg/max/mdev = 0.316/0.513/0.711/0.198 ms
El nodo Puppet Master actuará como una C certificado A autoridad (CA) y emitir certificados para los nodos del agente. Significa que el nodo maestro debe sincronizarse con el tiempo adecuado para evitar problemas al emitir certificados a los nodos de agente. Por lo tanto, debe instalar NTP y sincronizarlo con el servidor horario de su elección.
Consulte las zonas horarias disponibles en el nodo principal:
# timedatectl list-timezones
Establecer la zona horaria regional adecuada:
# timedatectl set-timezone Asia/Kolkata
Instalar NTP:
# yum install ntp
Sincronizar con el servidor horario de su elección:
# ntpdate pool.ntp.org
Abra ntp.conf y agregue los servidores de tiempo de su elección.
# vim /etc/ntp.conf
Guardar y salir.
Iniciar y habilitar el servicio NTP:
# systemctl restart ntpd # systemctl enable ntpd
Nota :También puede configurar NTP en los nodos de agentes. Para hacerlo, solo siga el Paso 2 en los nodos de Puppet Agent también.
Instalar Puppet Server (en el nodo principal)
El servidor de Puppet es un programa que se ejecuta en el nodo maestro de Puppet y, como se muestra en el diagrama de arquitectura, este servicio creará un catálogo y enviará las configuraciones a los nodos de agentes de Puppet.
En CentOS, usaré un repositorio de títeres basado en paquetes rpm.
# rpm -ivh https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm puppetlabs-release-pc1-1.0.0-2.el################################# [100%]
En Ubuntu:
# wget https://apt.puppetlabs.com/puppetlabs-release-pc1-xenial.deb
# dpkg -i puppetlabs-release-pc1-xenial.deb Selecting previously unselected package puppetlabs-release-pc1. (Reading database ... 205725 files and directories currently installed.) Preparing to unpack puppetlabs-release-pc1-xenial.deb ... Unpacking puppetlabs-release-pc1 (1.0.0-2xenial) ... Setting up puppetlabs-release-pc1 (1.0.0-2xenial) ...
# apt-get update
Instalar el paquete del servidor Puppet:
En CentOS:
# yum -y install puppetserver
En Ubuntu:
# apt-get install puppetserver
Iniciar servidor Puppet:
# systemctl start puppetserver
(o)
# service puppetserver start
Permitir que el servidor de marionetas se inicie durante el arranque del sistema
# systemctl enable puppetserver
(o)
# chkconfig puppetserver on
Instalación de Puppet Agent (en nodos de agente)
Instalaremos el servicio Puppet Agent en los nodos del agente y estos son los nodos que reciben el catálogo del nodo maestro de Puppet y los aplican.
Habilitar repositorio de colección de marionetas:
# rpm -ivh https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm
En Ubuntu:
# wget https://apt.puppetlabs.com/puppetlabs-release-pc1-xenial.deb
# dpkg -i puppetlabs-release-pc1-xenial.deb Selecting previously unselected package puppetlabs-release-pc1. (Reading database ... 205725 files and directories currently installed.) Preparing to unpack puppetlabs-release-pc1-xenial.deb ... Unpacking puppetlabs-release-pc1 (1.0.0-2xenial) ... Setting up puppetlabs-release-pc1 (1.0.0-2xenial) ...
$ sudo apt-get update
Instalar Puppet Agent:
En CentOS:
# yum -y install puppet-agent
En Ubuntu:
# apt-get install puppet-agent
Iniciar agente títere:
De forma predeterminada, el agente se referirá al nodo maestro de Puppet como "títere". Además, el siguiente comando mostrará el nombre de host que el Agente usará para conectarse al Maestro.
# /opt/puppetlabs/puppet/bin/puppet agent --configprint server puppet
# /opt/puppetlabs/bin/puppet resource service puppet ensure=running enable=true Notice: /Service[puppet]/ensure: ensure changed 'stopped' to 'running' service { 'puppet': ensure => 'running', enable => 'true', }
Nota :Busca el servidor configuración en puppet.conf para cambiar el nombre de host de Puppet Master.
Nota :De forma predeterminada, Puppet se instalará en /opt/puppetlabs carpeta.
Solicitar certificado para el nodo Agente a la autoridad de certificación
El nodo maestro de Puppet actuará como la autoridad de certificación, que firma el certificado de los nodos de agente.
# /opt/puppetlabs/puppet/bin/puppet agent -t Info: Caching certificate for ca Info: csr_attributes file loading from /etc/puppetlabs/puppet/csr_attributes.yaml Info: Creating a new SSL certificate request for puppetagent.test.in Info: Certificate Request fingerprint (SHA256): BF:E9:8B:85:ED:61:B4:D5:61:2E:F2:C4:0B:0A:24:A3:D5:17:B5:E3:B4:54:53:4F:C7:39:7F:FE:49:1B:AF:4A Info: Caching certificate for ca Exiting; no certificate found and waitforcert is disabled
En el nodo Puppet Master:firma la solicitud de certificado del agente
Enumere las solicitudes de certificados actuales:
# /opt/puppetlabs/puppet/bin/puppet cert list "puppetagent.test.in" (SHA256) BF:E9:8B:85:ED:61:B4:D5:61:2E:F2:C4:0B:0A:24:A3:D5:17:B5:E3:B4:54:53:4F:C7:39:7F:FE:49:1B:AF:4A
Firma el certificado:
# /opt/puppetlabs/puppet/bin/puppet cert sign puppetagent.test.in Notice: Signed certificate request for puppetagent.test.in Notice: Removing file Puppet::SSL::CertificateRequest puppetagent.test.in at '/etc/puppetlabs/puppet/ssl/ca/requests/puppetagent.test.in.pem'
Ver todas las solicitudes firmadas:
# /opt/puppetlabs/puppet/bin/puppet cert list --all + "puppetagent.test.in" (SHA256) 0F:41:D0:67:78:BB:7B:48:F8:4B:10:10:C4:F9:FD:DD:46:19:34:4B:BE:4D:6F:4B:2F:45:57:86:33:C2:BC:45 + "puppetmaster.test.in" (SHA256) 4A:F3:F7:C0:81:7D:76:49:77:31:81:B1:70:50:AE:EE:F9:49:95:22:B0:24:0C:08:C3:5E:30:E6:29:75:28:07 (alt names: "DNS:puppet", "DNS:puppetmaster.test.in")
¡Y listo! Su primera infraestructura de marionetas está lista.
Probemos a Puppet
Puppet usa una herramienta llamada Facter para recopilar información (hechos) sobre los agentes títeres. De forma predeterminada, se recopila información como el nombre del sistema operativo, la versión, el nombre de host, la dirección IP, las claves SSH, etc. Pero también le permite agregar hechos personalizados, que discutiré en un artículo separado.
¿Cómo son útiles los hechos?
Al crear una plantilla de configuración, es posible que desee obtener automáticamente un hecho (por ejemplo, la dirección IP de un nodo de agente) y completarlo en la ubicación adecuada. De manera similar, es posible que desee leer un nombre de host de un nodo de agente y usarlo en la plantilla de configuración.
El siguiente comando (ejecutarlo en el nodo maestro) enumerará todos los datos recopilados de un nodo de agente.
# /opt/puppetlabs/puppet/bin/facter
Salida de muestra:
::::::::::::::::::::::::::::::: partitions => { /dev/vda1 => { filesystem => "xfs", mount => "/", size => "39.99 GiB", size_bytes => 42943138304, uuid => "6c8f1327-a7c0-40a2-8bb3-89ea95a69d82" } } path => /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin processors => { count => 2, isa => "x86_64", models => [ "Intel Core Processor (Haswell, no TSX)", "Intel Core Processor (Haswell, no TSX)" ], physicalcount => 2 } :::::::::::::::::::::::::::::::::::::::::
¡Eso es todo! Ahora necesita comprender los Manifiestos y módulos para usar Puppet de manera efectiva .