Comenzando con el títere

¿Qué es una marioneta y por qué debería importarme?

Puppet es una solución de gestión de configuración. Los usuarios describen el estado deseado de un servidor o software y la gestión de configuración logra este estado. Esto trae las siguientes ventajas:

  • Las configuraciones se pueden reproducir exactamente igual cada vez, tantas veces como sea necesario
  • Las configuraciones para todo el software y los servidores se almacenan en una ubicación central. Esto hace que la copia de seguridad y el control de versiones de las configuraciones sean fáciles de lograr.
  • Los cambios en todos los servidores se propagan a través de toda la infraestructura en un par de minutos, sin tener que iniciar sesión en ninguna máquina directamente
  • Todo se describe en el mismo idioma, lo que facilita la configuración de nuevo software
  • Los módulos son similares a las bibliotecas y permiten consolidar configuraciones. Ya existen módulos para todos los principales paquetes de software, lo que hace que su instalación sea extremadamente fácil
  • Los servidores pueden compartir información entre sí, lo que influye en la configuración de otros servidores. Por ejemplo, un nuevo servidor puede registrarse automáticamente con el balanceador de carga y la solución de monitoreo.

Puppet usa Ruby para describir el estado deseado de un servidor, llamado nodo. Lo hace con el uso de primitivas llamadas tipos de recursos. De manera predeterminada, cada 30 minutos, el agente títere se autentica contra el servidor títere. Luego envía una lista de propiedades de sí mismo llamada hechos. El servidor mira los hechos y los archivos de configuración llamados manifiestos y compila el estado deseado para el nodo. Luego envía esa configuración de regreso al nodo, donde el agente la aplica.

Para dar una idea de cuán poderoso puede ser esto, aquí hay un par de ejemplos de complejidad creciente que muestran lo que el títere puede hacer por usted.

Ejemplo: Usuario

Este ejemplo crea el usuario nombre de usuario en el nodo miservidor y lo agrega al grupo rueda.

node 'myserver' {
    user { 'username':
      ensure => 'present',
      groups => ['wheel'],
    }
}

Este archivo que se almacenaría en el servidor de marionetas es el manifiesto. El tipo de recurso en este ejemplo es usuario. Cada tipo de recurso tiene propiedades opcionales y requeridas. En este ejemplo, ensure es obligatorio y groups es opcional. Esta configuración específica solo se aplicaría a myserver. Puede aplicar configuraciones a todos los nodos colocándolos fuera de una definición de nodo.

Es posible tomar un par de definiciones de recursos y almacenarlas como módulos. Un módulo es similar a una biblioteca. Estos módulos se pueden compartir en línea y, por lo general, encontrará uno para cada paquete de software importante. La forma oficial de compartir módulos es a través de la forja de marionetas: https://forge.puppet.com/

Ejemplo: Postgres

Este ejemplo instala un servidor postgres en el nodo myserver y crea una base de datos db, propiedad de username, identificada por password. Lo hace usando el módulo postgresql.

node 'myserver' {
    class { 'postgresql::server': }
    
    postgresql::server::db { 'db':
        user     => 'username',
        password => 'password',
    }
}

En este caso postgresql es un módulo. El propio módulo se encarga de identificar el sistema operativo, descargar e instalar el programa y luego configurarlo según el manifiesto. Este es un ejemplo básico, pero el módulo permite una gran cantidad de personalización.

Tenga en cuenta que no es necesario saber SQL o cómo instalar un servidor postgres para hacerlo. Los módulos oficiales están bien mantenidos y proporcionan una configuración base sana y segura.

También es posible usar hechos en los manifiestos. Los hechos actúan como variables.

Ejemplo: Condiciones usando hechos

Este ejemplo usa el módulo rsyslog para configurar rsyslog en todas las máquinas que no son de Windows.

if $osfamily != 'windows' {
  class { 'rsyslog::client': }
}

$osfamily es un hecho. Estos hechos se recogen cada vez que corre el agente títere. Tenga en cuenta que debido a que esta definición está fuera de la definición de un nodo, se aplica a todos los nodos. Sin embargo, rsyslog::client solo se ejecutará en nodos que no ejecuten Windows.

Dado que la marioneta usa ruby, los elementos programáticos como los flujos de control y las variables se pueden usar en los manifiestos.

Con la adición de PuppetDB, puede compartir información entre varios nodos. Esto permite que un nodo influya en la configuración de un nodo diferente. Los ejemplos clásicos incluyen balanceadores de carga o soluciones de monitoreo.

Ejemplo: Registro de un host con monitoreo usando recursos exportados

Este ejemplo crea un recurso exportado en un nodo y luego importa ese recurso en el servidor de monitoreo, agregando el host al monitoreo. Está utilizando el módulo de marionetas Icinga2.

@@icinga2::object::host { $::fqdn:
  display_name     => $::fqdn,
  ipv4_address     => $::ipaddress_eth0,
}

node 'icinga2' {
    Icinga2::Object::Host <<| |>> { }
}

@@icinga2::object::host crea un objeto de definición de host. Esto lo crea cada nodo que ejecuta este código. El @@ lo marca como un recurso exportado. Por lo general, los nodos no comparten información en la marioneta. Los recursos exportados permiten hacer eso.

Tenga en cuenta que todos los valores de propiedad en la definición de host son hechos. Esto significa que serán diferentes para cada nodo que lo ejecute.

Finalmente, el recurso exportado es importado por el nodo icinga2. El módulo Icinga2 es responsable de asegurarse de que se crean y recargan los archivos de configuración correctos.

¿Es para ti?

Si realiza implementaciones, configura sus aplicaciones en varios servidores y necesita iniciar sesión en sus servidores y realizar algunos cambios en la infraestructura, las aplicaciones, los requisitos previos, etc., entonces la marioneta definitivamente puede ayudarlo.

Excepto todo esto, si maneja una gran infraestructura y desea una administración centralizada, también puede echar un vistazo.

Antes de iniciar

Antes de que decidas trabajar en una marioneta, hay algunas cosas que debes saber.

  1. trabajo de marionetas tanto en la arquitectura cliente-servidor (ampliamente utilizada) como single machine (specially for testing purpose)

  2. El maestro de marionetas solo se puede configurar en una máquina Linux (maestro machine/node), windows can be used only as client (managed machine/node)

  3. Si configura el maestro, debe tener en cuenta el uso de la máquina Linux y los comandos básicos.

  4. puppet proporciona su propio lenguaje de configuración que se parece a json

Documentación Oficial

Puppet proporciona documentación oficial para las versiones de código abierto y empresarial. puedes encontrarlo aquí

Instalación

Requisitos del sistema

Sin embargo, el servicio maestro de Puppet consume muchos recursos y debe instalarse en un servidor dedicado robusto.

  • Como mínimo, su servidor maestro de Puppet debe tener dos núcleos de procesador y al menos 1 GB de RAM.
  • Para atender cómodamente al menos 1000 nodos, debe tener de 2 a 4 núcleos de procesador y al menos 4 GB de RAM.

Verifique la configuración de su red:

En una implementación de agente/maestro, debe preparar su red para el tráfico de Puppet.

  • Cortafuegos: El servidor maestro de Puppet debe permitir conexiones entrantes en el puerto 8140 y los nodos de agente deben poder conectarse al maestro en ese puerto.
  • Resolución de nombres: Cada nodo debe tener un nombre de host único. Tanto el DNS directo como el inverso deben estar configurados correctamente.

Nota: El nombre de host maestro de Puppet predeterminado es títere. Sus nodos de agente pueden estar listos antes si este nombre de host se resuelve en su Puppet maestro.

La hora debe configurarse con precisión en el servidor maestro de Puppet que actuar como autoridad certificadora. Probablemente deberías usar NTP.


Instalación del servidor de marionetas

Puppet proporciona paquetes oficiales que instalan Puppet Server 2.4 y todos sus requisitos previos en las siguientes plataformas.

Red Hat Enterprise Linux

  • Empresa Linux 6
  • Empresa Linux 7

Debian

  • Debian 7 (Sibilante)
  • Debian 8 (Jessie)

Ubuntu

  • Ubuntu 12.04 (Preciso)
  • Ubuntu 14.04 (de confianza) -Ubuntu 15.10 (Wily)
  • Ubuntu 16.04 (Xenial)

Habilitar los repositorios de paquetes de Puppet

Linux empresarial 7

sudo rpm -Uvh https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm

Para otras versiones mira aquí

Instalando titiritero

yum install puppetserver

o

apt-get install puppetserver

Puppet Server está configurado para usar 2 GB de RAM de forma predeterminada. Para cambiar ver aquí

Inicie el servicio del servidor de marionetas:

systemctl start puppetserver

o

service puppetserver start