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. mas información en ¿Qué es puppet? | CodigoElectronica
Entrono de trabajo
Programas
- Microsoft Windows [Versión 10.0.19044.2728]
- VirtualBox Versión 6.1.40 r154048 (Qt5.6.2)
- Vagrant 2.2.19, Instalar configurar vagrant virtualbox
- Ubuntu focal 20.04
- Puppet 6
Distribucion de las maquinas
Para este entorno de trabajo y el ejemplo que vamos a ejecutar, trabajaremos con Vagrant y VirtualBox, estos programas nos ayudaran a crear de forma rapida las maquinas virtuales, ademas de poder destruirlas si necesitamos volver a construir todo de nuevo.
En la siguiente imagen podemos ver la distribucion de las maquinas, el nombre y las IP´s de cada una de ellas.
Las maquinas tendrán la distribucion de Ubuntu focal cómo sistema operativo.
Carpeta y archivos de trabajo
Primero crearemos la carpeta de trabajo en donde guardaremos los archivos de Vagrant y donde se crean los temporal que que Vagrant necesita.
En esta carpeta creamos e archivo vagrantfile.
C:.
Vagrantfile
Archivo vagrantfile
Procedemos a explicar el contenido del archivo Vagrant file:
# -*- mode: ruby -*-
# vi: set ft=ruby :
# Specify Ubuntu 20.04 as the base image
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/focal64"
# Create 2 VMs
config.vm.define "puppet" do |puppet|
puppet.vm.hostname = "puppet"
puppet.vm.network "private_network", ip: "192.168.33.10"
end
config.vm.define "node01" do |node01|
node01.vm.hostname = "node01"
node01.vm.network "private_network", ip: "192.168.33.11"
end
end
- Estamos usando Ubuntu focal (2004) para crear las maquinas.
- Definimos una maquina puppet, la cual tendrá la IP 192.168.33.10 en esta maquina server instalaremos Puppet.
- Definimos una maquina node01, la cual tendrá la IP 192.168.33.11 en esta maquina agente instalaremos Puppet.
Muy importante, hemos nombrado los hosts de las maquinas como puppet y node01, estos mismos nombre los vamos a respetar en la siguiente configuración que mencionaremos mas adelante.
Ejecutamos Vagrant
En la carpeta del proyecto, dentro de la consola de comandos ejecutamos:
vagrant up
Esto creara las máquinas en Vagrant con las caracteristicas descritas en vagrantfile.
Puppet server
Procedemos a realizar la configuración del servidor de Puppet, en este caso para la practica, vamos a instalar y configurar todo el servidor de Puppet desde cero y manualmente para que vean como se realiza esta instalación.
Ingresar a la shell de la maquina virtual de Vagrant por ssh.
vagrant ssh puppet
Instalar puppet server
Nos guiaremos en la instalación con la documentación oficial Installing Puppet Server, primero descargamos el paquete de puppet correspondiente a la versión de Ubuntu, que la podemos encontrar en paquetes de puppet.com.
Primero descargaremos el paquete de Puppet 6 para Ubuntu Focal.
wget https://apt.puppetlabs.com/puppet6-release-focal.deb
Ahora cargamos el paquete a el sistema de paquetes de Linux.
sudo dpkg -i puppet6-release-focal.deb
Actualizamos el listado de paquetes.
sudo apt-get update -yq && sudo apt-get upgrade -yq
Realizamos la instalación de Puppet server.
sudo apt-get install puppetserver -y
Configuración de los hosts
Procedemos a agregar los hosts de la maquina puppet y de los nodos agentes, editamos el archivo hosts.
sudo nano /etc/hosts
Agregamos las siguientes lineas, que son las IP de las maquinas.
192.168.33.10 puppet puppet.example.com
192.168.33.11 node01 node01.example.com
Muy importante, los nombres de los hosts deben coincidir con el nombre de las maquinas creadas en VirtualBox
puppetserver
En este caso como estamos visualizando el entorno de trabajo, modificamos la siguiente linea del archivo puppetserver para disminuir la memoria que usara Puppet, en producción, este paso no es necesario
Accedemos al archivo puppetserver para hacer los cambios.
sudo nano /etc/default/puppetserver
Buscamos la siguiente linea y cambiamos de 2g a 512m, como se muestra a continuación.
JAVA_ARGS="-Xms512m -Xmx512m -Djruby.logger.class=com.puppetlabs.jruby_utils.jruby.Slf4jLogger"
Nota: este cambio lo debemos hacer en la prueba virtual, ya que las maquinas solo tiene 1g de RAM, si lo dejamos sin cambiar Puppet no podra iniciar.
puppet.conf
Realizamos la configuración de Puppet conf.
sudo nano /etc/puppetlabs/puppet/puppet.conf
Añadimos al final del archivo las siguientes lineas, para indicar los nombres de dominio de servidor de puppet.
[main]
ndns_alt_names = puppet,puppet.example.com
Validar e iniciar puppetserver
Por ultimo ejecutamos los siguientes comandos en orden.
Para detener el servidor de Puppet.
sudo systemctl stop puppetserver
Para iniciar el servidor de Puppet.
sudo systemctl start puppetserver
Verificar el estado del servidor de Puppet.
sudo systemctl status puppetserver
Habilitamos el servicio de puppet para que inicie el servidor de Puppet cuando inicie Ubuntu.
sudo systemctl enable puppetserver
Puppet agente
Procedemos a realizar la configuración del agente de Puppet, en este caso para la practica, vamos a instalar y configurar todo el agente de Puppet desde cero y manualmente para que vean como se realiza esta instalación.
Para acceder a la maquina del agente, ejecutamos lo siguiente:
vagrant ssh agent
Instalar puppet master
Nos guiaremos en la instalación con la documentación oficial Installing Puppet Server, primero descargamos el paquete de puppet correspondiente a la versión de Ubuntu, que la podemos encontrar en paquetes de puppet.com.
Primero descargaremos el paquete de Puppet 6 para Ubuntu Focal.
wget https://apt.puppetlabs.com/puppet6-release-focal.deb
Ahora cargamos el paquete a el sistema de paquetes de Linux.
sudo dpkg -i puppet6-release-focal.deb
Actualizamos el listado de paquetes.
sudo apt-get update -yq && sudo apt-get upgrade -yq
Realizamos la instalación de Puppet agent.
sudo apt install puppet-agent -y
Configuración de los hosts
Procedemos a agregar los hosts de la maquina puppet y de los nodos agentes, editamos el archivo hosts.
sudo nano /etc/hosts
192.168.33.10 puppet puppet.example.com
192.168.33.11 node01 node01.example.com
Muy importante, los nombres de los hosts deben coincidir con el nombre de las maquinas creadas en VirtualBox
puppet.conf
Realizamos la configuración de puppet.
sudo nano /etc/puppetlabs/puppet/puppet.conf
Añadimos al final del archivo las siguientes lineas.
[main]
server=puppet
certname=node01
environment = production
runinterval = 15m
Validar puppet agente
Por ultimo ejecutamos los siguientes comandos en orden.
Para detener el servidor del agente.
sudo systemctl stop puppet
Para iniciar el servidor de agente.
sudo systemctl start puppet
Para ver el estado del servidor del agente.
sudo systemctl status puppet
Habilitamos el servicio de puppet para que inicie el servidor de Puppet cuando inicie Ubuntu.
sudo systemctl enable puppet
Generar los certificados
Los agentes cuando se conectan por primera vez al servidor, solicitaran la firma de certificado de puppet. El servidor debe verificar y firmar este certificado.
Despues de validar los certificados el agente buscará los catálogos del maestro y los aplicara a los nodos del agente con regularidad.
Para realizar la configuración de los certificador procedemos con los siguiente pasos.
Desde el nodo agente realizamos el primer llamado al servidor
sudo /opt/puppetlabs/bin/puppet agent --test
En el nodo maestro procedemos a iniciar la firma, con el siguiente comando, aceptamos todas las solicitudes de los agentes.
sudo /opt/puppetlabs/bin/puppetserver ca sign --all
Con el siguiente comando, podemos ver los certificados pendientes por firmar.
sudo /opt/puppetlabs/bin/puppetserver ca list
Podemos ver todos los certificados firmados con el sigiente comando.
sudo /opt/puppetlabs/bin/puppetserver ca list --all
Al revisar el nodo agente con el comando agent --test observamos que a se conecta el agente al servidor para solicitar los cambios a aplicar.
Opcional, podemos firmar los certificados manualmente de la siguiente forma.
sudo /opt/puppetlabs/bin/puppetserver ca sign --certname node01
Ejemplo de prueba
Vamos a crear un ejemplo simple para validar que todo esta correcto.
Nodo servidor
Editamos el siguiente archivo
sudo nano /etc/puppetlabs/code/environments/production/manifests/site.pp
Colocamos lo siguiente
node 'node01' {
file {'/home/vagrant/test': # Resource type file
ensure => 'directory', # Create a directory
owner => 'root', # Ownership
group => 'root', # Group Name
mode => '0755', # Directory permissions
}
}
En el nodo agente ejecutamos
sudo /opt/puppetlabs/bin/puppet agent --test
Podemos ver que aplica los cambios creados desde el servidor
Otros comandos
sudo /opt/puppetlabs/bin/puppet apply --modulepath=./modules ./manifests/default.pp
Referencias
Cómo instalar Puppet en Ubuntu 20.04 - ochobitshacenunbyte
¿Cómo instalar Puppet 6 en Ubuntu 18? (geekflare.com)