Puppet, un outil de gestion de configuration populaire pour les systèmes basés sur Unix et Windows qui permet à un administrateur d'automatiser facilement les tâches d'administration système répétitives et sujettes aux erreurs - qui comprend le provisionnement, l'installation de packages/logiciels, les configurations et la gestion de l'ensemble de l'infrastructure. Puppet est disponible en deux versions :Puppet Enterprise et Puppet open source. Comme son nom l'indique, la version entreprise est un produit commercial et la version open source est téléchargeable gratuitement. Ce didacticiel explique comment installer et configurer l'open source Puppet (version 4) sur les systèmes basés sur CentOS et Ubuntu.
Avant de commencer la procédure d'installation, comprenons l'architecture de puppet.
Architecture maître/agent de marionnettes
Puppet fonctionne généralement sur la base du modèle client/serveur - c'est une architecture basée sur maître/agent, à savoir Puppet Master et Puppet Agent. Le maître Puppet contrôle les informations de configuration et les nœuds d'agent Puppet gérés demandent leurs propres catalogues de configuration. Le schéma ci-dessous illustre le flux de communication entre les nœuds maître et agent.
Qu'est-ce qu'un catalogue ?
Le catalogue est un document qui contient des informations sur l'état souhaité d'un système. Le Puppet master compile le catalogue et les agents Puppet appliquent ceux-ci.
Environnement d'installation de Puppet
Dans ce tutoriel, j'utiliserai deux nœuds :puppetmaster.test.in (Puppet Master) et puppetagent.test.in (Puppet Agent) (ce sont des machines virtuelles exécutées sur OpenStack)
Comment installer et configurer Puppet 4 ?
Étape 1 : La première étape consiste à vérifier la visibilité du réseau entre le nœud maître et le nœud agent. Vous devrez vous assurer que ces domaines sont résolus via DNS ou à partir du fichier hosts.
Sur le nœud 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
Sur le nœud de l'agent Puppet :
# 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
Étape 2 : Installer NTP
Le nœud Puppet Master agira comme un C certificat A autorité (CA) et émettre des certificats pour les nœuds d'agent. Cela signifie que le nœud maître doit se synchroniser avec l'heure appropriée pour éviter les problèmes lors de l'émission de certificats aux nœuds agents. Vous devez donc installer NTP et le synchroniser avec le serveur de temps de votre choix.
Vérifiez les fuseaux horaires disponibles dans le nœud maître :
# timedatectl list-timezones
Définissez le fuseau horaire régional approprié :
# timedatectl set-timezone Asia/Kolkata
Installer NTP :
# yum install ntp
Synchroniser avec le serveur de temps de votre choix :
# ntpdate pool.ntp.org
Ouvrez ntp.conf et ajoutez les serveurs de temps de votre choix.
# vim /etc/ntp.conf
Enregistrez et quittez.
Démarrer et activer le service NTP :
# systemctl restart ntpd # systemctl enable ntpd
Remarque :Vous pouvez également configurer NTP sur les nœuds de l'agent. Pour ce faire, suivez simplement l'étape 2 sur les nœuds de l'agent Puppet.
Installer Puppet Server (sur le nœud maître)
Le serveur Puppet est un programme qui s'exécute sur le nœud maître Puppet et, comme illustré dans le diagramme d'architecture, ce service créera un catalogue et transmettra les configurations aux nœuds de l'agent Puppet.
Étape 1 : Pour installer les services Puppet, vous devez activer le référentiel de collection Puppet ou les packages de publication. Pour les systèmes d'exploitation basés sur Yum, vous pouvez trouver les packages sur yum.puppetlabs.com et pour les systèmes basés sur Apt sur apt.puppetlabs.com .
Sur CentOS, j'utiliserai un référentiel de marionnettes basé sur des packages rpm.
# rpm -ivh https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm puppetlabs-release-pc1-1.0.0-2.el################################# [100%]
Sur 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
Installer le package du serveur Puppet :
Sur CentOS :
# yum -y install puppetserver
Sur Ubuntu :
# apt-get install puppetserver
Démarrer le serveur Puppet :
# systemctl start puppetserver
(ou)
# service puppetserver start
Activer le démarrage du serveur de marionnettes lors du démarrage du système
# systemctl enable puppetserver
(ou)
# chkconfig puppetserver on
Installation de l'agent Puppet (sur les nœuds de l'agent)
Nous allons installer le service Puppet Agent sur les nœuds d'agent et ce sont les nœuds qui reçoivent le catalogue du nœud maître Puppet et les appliquent.
Activer le dépôt de collection Puppet :
# rpm -ivh https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm
Sur 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
Installer l'agent Puppet :
Sur CentOS :
# yum -y install puppet-agent
Sur Ubuntu :
# apt-get install puppet-agent
Démarrer l'agent de marionnettes :
Par défaut, l'agent désignera le nœud maître Puppet comme "marionnette". La commande ci-dessous affichera également le nom d'hôte que l'agent utilisera pour se connecter au maître.
# /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', }
Remarque :Recherchez le serveur réglage dans puppet.conf pour changer le nom d'hôte du Puppet Master.
Remarque :Par défaut, Puppet sera installé sous /opt/puppetlabs dossier.
Demander un certificat pour le nœud de l'agent à l'autorité de certification
Le nœud maître Puppet agira en tant qu'autorité de certification, qui signe le certificat des nœuds agents.
# /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
Sur le nœud Puppet Master – Signer la demande de certificat de l'agent
Répertoriez les demandes de certificat en cours :
# /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
Signer le certificat :
# /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'
Afficher toutes les demandes signées :
# /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")
Et vous avez terminé ! Votre première infrastructure de marionnettes est prête.
Testons Puppet
Puppet utilise un outil appelé Facter pour recueillir des informations (faits) sur les agents marionnettes. Par défaut, les informations telles que le nom du système d'exploitation, la version, le nom d'hôte, l'adresse IP, les clés SSH, etc. sont collectées. Mais cela vous permet également d'ajouter des faits personnalisés, dont je parlerai dans un article séparé.
En quoi les faits sont utiles ?
Lors de la création d'un modèle de configuration, vous souhaiterez peut-être récupérer automatiquement un fait (par exemple, l'adresse IP d'un nœud d'agent) et le remplir à l'emplacement approprié. De même, vous souhaiterez peut-être lire le nom d'hôte d'un nœud d'agent et l'utiliser dans le modèle de configuration.
La commande ci-dessous (exécutez-la sur le nœud maître) répertorie tous les faits rassemblés d'un nœud agent.
# /opt/puppetlabs/puppet/bin/facter
Exemple de résultat :
::::::::::::::::::::::::::::::: 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 } :::::::::::::::::::::::::::::::::::::::::
C'est ça! Vous devez maintenant comprendre les manifestes et les modules pour utiliser efficacement Puppet .