Afficher la pageAnciennes révisionsLiens de retourHaut de page Cette page est en lecture seule. Vous pouvez afficher le texte source, mais ne pourrez pas le modifier. Contactez votre administrateur si vous pensez qu'il s'agit d'une erreur. ====== Puppet - Installation d'une solution d'orchestration ====== <label type="info">Création</label> --- //[[nekan@shyrkasystem.com|Nicolas THOREZ]] 2022/11/18 18:14// ===== Qu'est-ce qu'un orchestrateur ? ===== Un orchestrateur est un système permettant d'automatiser une installation. ''puppet'' en est un. Une fois configuré, il pourra envoyer les différentes configurations à ces clients à distance, procéder à des installations de paquets, etc. De plus, les fichiers de configurations gérés par ''puppet'' sont protégés d'une modification non voulue. Ainsi, si un programme malveillant ou une erreur d'un utilisateur modifie un fichier de configuration alors le système remettra le fichier valide en place et redémarrera les services concernés au besoin. <callout type="danger" title="Droits" icon="true">Les différentes procédures suivantes nécessite des droits ''root''. N'oubliez pas les sauvegardes avant toute action.</callout> <callout type="info" title="Réalisation" icon="true">Ces procédures ont été réalisées sur des Debian 11, hébergées sur des Proxmox 7.</callout> ===== Installation de la partie serveur ===== * On commence par ajouter le dépôt nécessaire à l'installation : <sxh bash>wget wget https://apt.puppet.com/puppet7-release-bullseye.deb dpkg -i puppet7-release-bullseye.deb</sxh> * On met à jour nos sources et on installe le paquet : <sxh bash>apt update && apt install -y puppetserver</sxh> <callout type="warning" title="Mémoire" icon="true">''puppet'', ou plutôt ''java'' qu'il utilise, est prévu par défaut pour utiliser 2Go de RAM. Dans le cas où votre machine n'aurait pas assez de mémoire disponible, vous pouvez baisser cette affectation à 1Go via la commande suivante (n'oubliez: <sxh bash>sed -i 's/-Xms2g -Xmx2g/-Xms1g -Xmx1g/g' /etc/default/puppetserver</sxh></callout> * On active et on démarre le service : <sxh bash>systemctl enable pupperserver && systemctl start pupperserver</sxh> ==== Configuration ==== * Le fichier de configuration principal est ''/etc/puppetlabs/puppet/puppet.conf''. On va le modifier pour ajouter les informations suivantes : <sxh>[main] # Envoyer les logs de l'agent dans la console et dans le fichier de log logdest = console,/var/log/puppetlabs/puppet/puppet-agent.log # Adresse du serveur server = puppet.shyrkasys.local</sxh> * Pour plus de simplicité dans l'utilisation de l'agent, on va lui créer un lien symbolique : <sxh bash>ln -sf /opt/puppetlabs/bin/puppet /bin/puppet</sxh> <callout type="warning" title="Pare-feu" icon="true">Les clients communiquent avec le serveur ''puppet'' au travers du port ''8140''. Pensez à autoriser ce port sur votre pare-feu.</callout> ==== Préparation de l'architecture puppet ==== * On crée les fichiers d'architecture dans le dossier ''/etc/puppetlabs/code/environments/production/manifests/'' : * ''site.pp'' : contiendra les configurations à déployer sur l'ensemble des clients. * ''node.pp'' : contiendra les classes à déployer sur chaque client de manière spécifique. <sxh bash>touch /etc/puppetlabs/code/environments/production/manifests/site.pp echo 'node "default" {}' > /etc/puppetlabs/code/environments/production/manifests/node.pp</sxh> * On crée aussi les dossiers utiles dans ''/etc/puppetlabs/code/environments/production/manifests/'' : * ''class'' : contiendra les fichiers de définitions des classes personnalisées. * ''users'' : contiendra les fichiers de définitions des classes utilisateurs. <sxh bash>mkdir -p /etc/puppetlabs/code/environments/production/manifests/class/ mkdir -p /etc/puppetlabs/code/environments/production/manifests/users/</sxh> ===== Installation de l'agent ===== * Sur les postes clients, on installe le dépôt nécessaire : <sxh bash>wget wget https://apt.puppet.com/puppet7-release-bullseye.deb dpkg -i puppet7-release-bullseye.deb</sxh> * On met à jour les sources et on installe le client : <sxh bash>apt update && apt install -y puppet-agent</sxh> ==== Configuration ==== * On paramètre le client : <sxh bash>echo "[main]" >> /etc/puppetlabs/puppet/puppet.conf echo "server = puppet.shyrkasys.local" >> /etc/puppetlabs/puppet/puppet.conf</sxh> * Là aussi, pour plus de simplicité, on met en place des liens symboliques pour le client (présent sur le serveur) et le serveur : <sxh bash>ln -sf /opt/puppetlabs/bin/puppet /bin/puppet</sxh> ==== Enregistrement du client ==== * On exécute le client une première fois : <sxh bash>puppet agent -t</sxh> * La console affiche alors que le client a fait une requête pour la création d'un certificat auprès du serveur ''puppet'' : <WRAP announcement purple> <poem> <text type="success" size="10">Info: Creating a new RSA SSL key for test.shyrkasys.local</text> <text type="success" size="10">Info: csr_attributes file loading from /etc/puppetlabs/puppet/csr_attributes.yaml</text> <text type="success" size="10">Info: Creating a new SSL certificate request for test.shyrkasys.local</text> <text type="success" size="10">Info: Certificate Request fingerprint (SHA256): 1B:84:A2:70:05:47:26:9F:D0:44:75:F4:97:C6:1C:D2:C0:7A:EC:BE:6A:26:97:3F:0F:1A:FF:08:49:D4:B4:96</text> <text type="success" size="10">Info: Certificate for cassandra.shyrkasys.lan has not been signed yet</text> Couldn't fetch certificate from CA server; you might still need to sign this agent's certificate (test.shyrkasys.local). Exiting now because the waitforcert setting is set to 0. </poem> </WRAP> * On retourne alors sur le serveur. Là, on tape la commande : <sxh bash>puppetserver ca list</sxh> * On retrouve la demande de certificat : <sxh bash>Requested Certificates: test.shyrkasys.local (SHA256) 1B:84:A2:70:05:47:26:9F:D0:44:75:F4:97:C6:1C:D2:C0:7A:EC:BE:6A:26:97:3F:0F:1A:FF:08:49:D4:B4:96 </sxh> * On signe donc le certificat : <sxh bash>puppetserver ca sign --certname test.shyrkasys.local</sxh> * On vérifie sur le client en relançant la commande : <sxh bash>puppet agent -t</sxh> * La console doit alors nous indiquer qu'elle récupère le nouveau certificat et qu'elle met le catalogue en cache : <WRAP announcement purple> <poem> <text type="success" size="10">Info: csr_attributes file loading from /etc/puppetlabs/puppet/csr_attributes.yaml</text> <text type="success" size="10">Info: Creating a new SSL certificate request for test.shyrkasys.local</text> <text type="success" size="10">Info: Certificate Request fingerprint (SHA256): 1B:84:A2:70:05:47:26:9F:D0:44:75:F4:97:C6:1C:D2:C0:7A:EC:BE:6A:26:97:3F:0F:1A:FF:08:49:D4:B4:96</text> <text type="success" size="10">Info: Downloaded certificate for test.shyrkasys.local from https://puppet.shyrkasys.local:8140/puppet-ca/v1</text> <text type="success" size="10">Info: Using environment 'production'</text> <text type="success" size="10">Info: Retrieving pluginfacts</text> <text type="success" size="10">Info: Retrieving plugin</text> <text type="success" size="10">Info: Caching catalog for test.shyrkasys.local</text> <text type="success" size="10">Info: Applying configuration version '1668800975'</text> <text type="success" size="10">Info: Creating state file /opt/puppetlabs/puppet/cache/state/state.yaml</text> Notice: Applied catalog in 0.10 seconds </poem> </WRAP> ===== Test de déploiement ===== * Sur le serveur, on va créer une classe de test ''/etc/puppetlabs/code/environments/production/manifests/class/test.pp'' dans laquelle on va ajouter le code suivant : <file>class test { notify { "Ceci est un test de déploiement": } }</file> * On modifie aussi le fichier ''/etc/puppetlabs/code/environments/production/manifests/node.pp'' avec la ligne suivante : <file>node "test.shyrkasys.local" { include test }</file> * Sur le client cette fois, on relance la commande de l'agent : <sxh bash>puppet agent -t</sxh> * La console doit alors faire apparaître la ligne de notification paramétrée : <WRAP announcement purple> <poem> <text type="success" size="10">Info: Using environment 'production'</text> <text type="success" size="10">Info: Retrieving pluginfacts</text> <text type="success" size="10">Info: Retrieving plugin</text> <text type="success" size="10">Info: Caching catalog for test.shyrkasys.local</text> <text type="success" size="10">Info: Applying configuration version '1668802924'</text> Notice: Ceci est un test de déploiement Notice: /Stage[main]/Test/Notify[Ceci est un test de déploiement]/message: defined 'message' as 'Ceci est un test de déploiement' Notice: Applied catalog in 0.58 seconds </poem> </WRAP> <callout type="success" title="Félicitations" icon="true">Et voilà, votre orchestrateur est prêt à envoyer vos configurations et à automatiser vos installations sur tous ses clients. Il ne reste plus qu'à créer les classes nécessaires et à les appliquer sur le site ou les clients qui en ont besoin.</callout> ~~DISCUSSION~~ linux_puppet.txt Dernière modification : 2023/05/30 15:58de nekan