introduction
Puppet est un outil de gestion de la configuration qui aide les administrateurs système à automatiser l’approvisionnement, la configuration et la gestion d’une infrastructure de serveur. En planifiant à l’avance et en utilisant des outils de gestion de la configuration tels que Puppet, vous réduirez le temps consacré à la répétition des tâches de base et garantissez la cohérence et la précision des configurations sur l’ensemble de votre infrastructure.
Il existe deux types de marionnettes: Puppet Enterprise et Open Source Puppet. Les deux fonctionnent sur la plupart des distributions Linux, diverses plates-formes UNIX et Windows.
Dans ce tutoriel, nous montrerons comment installer Open Source Puppet 4 dans une configuration d’agent principal sous Ubuntu 16.04. Dans cette configuration, le serveur * Puppet master *, qui exécute le logiciel Puppet Server, peut être utilisé pour contrôler tous vos autres serveurs, appelés nœuds * Agent de marionnettes *.
Conditions préalables
Pour suivre ce tutoriel, vous aurez besoin de * trois serveurs Ubuntu 16.04 *, chacun avec un utilisateur non root avec les privilèges + sudo +
. Pour en savoir plus sur la configuration d’un utilisateur avec des privilèges sudo, consultez notre Initial Initial Server Setup with Ubuntu 16.04. guider.
Un maître de marionnettes
Un serveur sera le * maître des marionnettes *. Le maître de marionnettes exécutera Puppet Server, qui nécessite beaucoup de ressources et nécessite:
-
au moins 4 Go de mémoire
-
au moins 2 cœurs de processeur
Pour gérer des infrastructures plus importantes, le maître de marionnettes aura besoin de plus de ressources.
Deux agents de marionnettes
Les deux autres serveurs seront * des nœuds d’agent Puppet *, gérés par le maître Puppet. Nous les appellerons + db1 +
et + web1 +
.
Lorsque ces trois serveurs sont en place, vous êtes prêt à commencer.
Étape 1 - Configuration de / etc / hosts
Les serveurs maîtres de marionnettes et les nœuds qu’ils gèrent doivent pouvoir communiquer entre eux. Dans la plupart des cas, cela sera réalisé à l’aide de DNS, configuré soit sur un service hébergé de manière externe, soit sur des serveurs DNS auto-hébergés conservés dans le cadre de l’infrastructure.
Le DNS est son propre domaine d’expertise, cependant, même sur les services hébergés, donc pour se concentrer sur les principes fondamentaux de Puppet et éliminer la complexité potentielle du dépannage pendant l’apprentissage, nous allons dans ce tutoriel utiliser le `+ / etc / hosts + `fichier à la place.
Sur chaque machine
Sur chaque ordinateur, éditez le fichier + / etc / hosts +
. À la fin du fichier, spécifiez le serveur maître Puppet comme suit, en remplaçant l’adresse IP par votre maître Puppet:
sudo nano /etc/hosts
/ etc / hosts
. . .
puppet
. . .
Lorsque vous avez terminé, enregistrez et quittez.
Étape 2 - Installation du serveur Puppet
Puppet Server est le logiciel qui transmet la configuration du maître de marionnettes aux autres serveurs. Il ne fonctionne que sur le maître de marionnettes; les autres hôtes exécuteront l’agent de marionnettes.
Nous allons activer le référentiel de collections officiel de Puppet Labs avec les commandes suivantes:
curl -O https://apt.puppetlabs.com/puppetlabs-release-pc1-xenial.deb
sudo dpkg -i puppetlabs-release-pc1-xenial.deb
sudo apt-get update
Lorsque + apt-get update
est terminé, nous nous assurons d’installer le package` + puppet server` à partir du référentiel de Puppet Labs:
sudo apt-get install puppetserver
Appuyez sur + Y +
pour continuer. Une fois l’installation terminée et avant de démarrer le serveur, nous allons prendre un moment pour configurer la mémoire.
Configurer l’allocation de mémoire
Par défaut, Puppet Server est configuré pour utiliser 2 Go de RAM. Vous pouvez personnaliser ce paramètre en fonction de la quantité de mémoire disponible du serveur maître et du nombre de nœuds d’agent qu’il va gérer.
Pour le personnaliser, ouvrez + / etc / default / puppetserver +
:
sudo nano /etc/default/puppetserver
Recherchez ensuite la ligne + JAVA_ARGS +
et utilisez les paramètres + -Xms +
et + -Xmx +
pour définir l’allocation de mémoire. Nous allons augmenter le nôtre à 3 gigaoctets:
/ etc / default / puppetserver
JAVA_ARGS="-Xmsg -Xmxg -XX:MaxPermSize=256m"
Enregistrez et quittez lorsque vous avez terminé.
Ouvrez le pare-feu
Lorsque nous démarrons, Puppet Server utilisera le port 8140 pour communiquer. Nous allons donc nous assurer qu’il est ouvert:
sudo ufw allow 8140
Ensuite, nous allons démarrer le serveur Puppet.
Démarrer le serveur de marionnettes
Nous allons utiliser + systemctl +
pour démarrer le serveur Puppet:
sudo systemctl start puppetserver
Cela prendra du temps à compléter.
Une fois que nous sommes revenus à l’invite de commande, nous vérifierons que nous avons réussi car + systemctl +
n’affiche pas le résultat de toutes les commandes de gestion de service:
sudo systemctl status puppetserver
Nous devrions voir une ligne qui dit “actif (en cours d’exécution)” et la dernière ligne devrait ressembler à quelque chose comme:
OutputDec 07 16:27:33 puppet systemd[1]: Started puppetserver Service.
Maintenant que nous sommes sûrs que le serveur est en cours d’exécution, nous allons le configurer pour qu’il démarre au démarrage:
sudo systemctl enable puppetserver
Avec le serveur en marche, nous sommes maintenant prêts à configurer Puppet Agent sur nos deux ordinateurs agents, + db1 +
et + web1 +
.
Étape 3 - Installation de l’agent de marionnettes
Le logiciel agent Puppet doit être installé sur tout serveur géré par le maître Puppet. Dans la plupart des cas, cela inclura tous les serveurs de votre infrastructure.
Activer le référentiel officiel de Puppet Labs
Nous allons d’abord activer le référentiel de collections officiel de Puppet Labs avec les commandes suivantes:
wget https://apt.puppetlabs.com/puppetlabs-release-pc1-xenial.deb
sudo dpkg -i puppetlabs-release-pc1-xenial.deb
sudo apt-get update
Installer le package de l’agent de marionnettes
Ensuite, nous installerons le paquet + puppet-agent
:
sudo apt-get install puppet-agent
Nous allons démarrer l’agent et lui permettre de démarrer au démarrage:
sudo systemctl start puppet
sudo systemctl enable puppet
Enfin, nous allons répéter ces étapes sur + web1 +
:
wget https://apt.puppetlabs.com/puppetlabs-release-pc1-xenial.deb
sudo dpkg -i puppetlabs-release-pc1-xenial.deb
sudo apt-get update
sudo apt-get install puppet-agent
sudo systemctl enable puppet
sudo systemctl start puppet
Maintenant que les deux nœuds d’agent exécutent le logiciel agent Puppet, nous allons signer les certificats sur le maître Puppet.
Étape 4 - Signature des certificats sur Puppet Master
La première fois que Puppet s’exécute sur un nœud d’agent, il envoie une demande de signature de certificat au maître Puppet. Avant que Puppet Server puisse communiquer avec le nœud agent et le contrôler, il doit signer le certificat de ce nœud agent particulier.
Répertorier les demandes de certificats en cours
Pour répertorier toutes les demandes de certificat non signées, exécutez la commande suivante sur le maître de marionnettes:
sudo /opt/puppetlabs/bin/puppet cert list
Il devrait y avoir une demande pour chaque hôte que vous avez configuré, qui ressemble à ceci:
Output: "db1.localdomain" (SHA256) 46:19:79:3F:70:19:0A:FB:DA:3D:C8:74:47:EF:C8:B0:05:8A:06:50:2B:40:B3:B9:26:35:F6:96:17:85:5E:7C
"web1.localdomain" (SHA256) 9D:49:DE:46:1C:0F:40:19:9B:55:FC:97:69:E9:2B:C4:93:D8:A6:3C:B8:AB:CB:DD:E6:F5:A0:9C:37:C8:66:A0
Un «+» devant un certificat indique qu’il a été signé. L’absence de signe plus indique que notre nouveau certificat n’a pas encore été signé.
Signer les demandes
Pour signer une demande de certificat unique, utilisez la commande + puppet cert sign +
, avec le nom d’hôte du certificat tel qu’il apparaît dans la demande de certificat.
Par exemple, pour signer le certificat de db1, utilisez la commande suivante:
sudo /opt/puppetlabs/bin/puppet cert sign
Une sortie similaire à l’exemple ci-dessous indique que la demande de certificat a été signée:
Output:Notice: Signed certificate request for
Notice: Removing file Puppet::SSL::CertificateRequest at '/etc/puppetlabs/puppet/ssl/ca/requests/.pem'
Le maître de marionnettes peut maintenant communiquer et contrôler le nœud auquel appartient le certificat signé. Vous pouvez également signer toutes les demandes en cours en même temps.
Nous allons utiliser l’option + - all +
pour signer le certificat restant:
sudo /opt/puppetlabs/bin/puppet cert sign --all
Maintenant que tous les certificats sont signés, Puppet peut gérer l’infrastructure. Pour en savoir plus sur la gestion des certificats, consultez la feuille de triche How to Manage Puppet 4 Certificates.
Étape 5 - Vérification de l’installation
Puppet utilise un langage spécifique au domaine pour décrire les configurations système. Ces descriptions sont enregistrées dans des fichiers appelés «manifestes», qui ont une extension de fichier + .pp +
. Vous pouvez en apprendre plus à ce sujet dans le guide Permet de bien commencer avec le code de la marionnette: Manifestes et modules, mais pour l’instant, nous allons créer une brève directive pour vérifier que le serveur Puppet peut gérer les agents comme prévu.
Nous allons commencer par créer le manifeste par défaut, + site.pp +
, à l’emplacement par défaut:
sudo nano /etc/puppetlabs/code/environments/production/manifests/site.pp
Nous utiliserons le langage spécifique au domaine de Puppet pour créer un fichier intitulé + it_works.txt +
sur les nœuds d’agent situés dans le répertoire + tmp +
qui contient l’adresse IP publique du serveur d’agent et définit les autorisations sur `+ -rw. -r - r - + `:
exemple site.pp
file {'/tmp/it_works.txt': # resource type file and filename
ensure => present, # make sure it exists
mode => '0644', # file permissions
content => "It works on ${ipaddress_eth0}!\n", # Print the eth0 IP fact
}
Par défaut, Puppet Server exécute les commandes de son manifeste toutes les 30 minutes. Si le fichier est supprimé, la directive + verify +
le fera recréer. La directive + mode +
définira les autorisations de fichier et la directive + content +
ajoutera du contenu à la directive.
Nous pouvons également tester le manifeste sur un seul noeud en utilisant + puppet agent --test
. Notez que + - test +
n’est pas un indicateur pour un essai à blanc; s’il réussit, la configuration de l’agent sera modifiée.
Plutôt que d’attendre que le maître Puppet applique les modifications, nous allons appliquer le manifeste maintenant sur + db1 +
:
sudo /opt/puppetlabs/bin/puppet agent --test
La sortie devrait ressembler à quelque chose comme:
OutputInfo: Using configured environment 'production'
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Loading facts
Info: Caching catalog for db1.localdomain
Info: Applying configuration version '1481131595'
Notice: /Stage[main]/Main/File[/tmp/it_works.txt]/ensure: defined content as '{md5}acfb1c7d032ed53c7638e9ed5e8173b0'
Notice: Applied catalog in 0.03 seconds
Lorsque cela sera fait, nous vérifierons le contenu du fichier:
cat /tmp/it_works.txt
Output It works on !
Répétez cette opération pour + web1 +
ou, si vous préférez, vérifiez dans une demi-heure environ pour vérifier que le maître de marionnettes fonctionne automatiquement.
Toutes nos félicitations! Vous avez correctement installé Puppet en mode Maître / Agent.
Conclusion
Maintenant que vous disposez d’une installation de base de puppet agent / maître, vous êtes prêt à en apprendre davantage sur l’utilisation de Puppet pour gérer votre infrastructure de serveur. Consultez le didacticiel suivant: Démarrez avec le code de marionnette: Manifestes et modules.