diff options
Diffstat (limited to '')
-rw-r--r-- | Dploiement_et_automatisation_avec_Puppet_49__partie_1_.txt | 331 |
1 files changed, 331 insertions, 0 deletions
diff --git a/Dploiement_et_automatisation_avec_Puppet_49__partie_1_.txt b/Dploiement_et_automatisation_avec_Puppet_49__partie_1_.txt new file mode 100644 index 0000000..212838f --- /dev/null +++ b/Dploiement_et_automatisation_avec_Puppet_49__partie_1_.txt @@ -0,0 +1,331 @@ +Titre: Déploiement et automatisation avec Puppet 4.9 - partie 1 +Auteur: skhaen +Date: Tue 14 Feb 2017 10:18:32 +0100 +Lien: http://linuxfr.org/users/skhaen/journaux/deploiement-et-automatisation-avec-puppet-4-9-partie-1 + +Sommaire + + * Installation[1] + + * MASTER / [2]puppetserver[3] + * SLAVE / puppet-agent (node)[4] + + * Un peu de configuration[5] + + * puppet.conf[6] + + * Ajouter un node au master[7] + + * sur le SLAVE[8] + * Sur le MASTER[9] + + * Troubleshooting (install)[10] + * Premier manifest[11] + + * sur le MASTER[12] + + + + * partie 1 : installation et 1er manifest. + * original : + www.cyphercat.eu/deploiement-et-automatisation-avec-puppet-partie-1[13] + +Puppet est l'outil de gestion de configuration le plus connu, il a vu le jour +en 2005, bien avant ses principaux concurrents (2009 pour Chef[14], 2011 pour +Salt[15], 2012 pour Ansible[16]). Il propose depuis maintenant longtemps une +solution open-source en parallèle de la version entreprise (qui est évidemment +payante) et il a eu le temps de grandir pour atteindre une taille plus que +respectable. + +Au contraire d'Ansible où ça reste plutôt simple pour le moment, les premières +recherches que vous allez faire ont toutes les chances de vous laisser quelque +part entre "mais je commence par quoi bordel ?!" et "mais… mais… c'est +horriblement compliqué". Parce que oui, évidemment, en plus de 10 ans le +logiciel a eu le temps de se développer, sa communauté aussi et quand on parle +maintenant de puppet certains termes comme control-repo[17], R10K[18], puppetdb[19] +, hiera[20], rspec[21], modules[22], librarian-puppet[23] reviennent souvent. + +Si vous vous posez la question, oui, c'est le bon moment pour se faire un thé +(et je veux bien un rubis birman[24] pendant que l'on y est). + +Avant de continuer, n'oubliez pas que : + + * il y a une seule chose importante à retenir pour le moment : la + documentation est sur docs.puppet.com[25]. + * mon serveur "master" se nomme master.cyphercat.eu + * mon serveur "slave1" ou "node1" s'appelle slave1.cyphercat.eu + +N'oubliez donc pas de changer les noms des serveurs avez les vôtres au fur et à +mesure de cet article. Je vous déconseille BEAUCOUP de tenter le coup avec des +configurations dans /etc/hosts, vous avez toutes les chances que ça foutent une +pagaille mémorable avec les certificats (je viens de tester chez scaleway[26]). + +Installation + +Nous allons installer un puppet-server (que l'on pourrait appeler serveur +maitre), c'est lui qui s'occupera de tout orchestrer. Puis, sur chaque node, on +installera puppet-agent, ce qui leur permettra de communiquer avec le master. + +PuppetLabs met à disposition puppet-collection[27] pour les installations, +c'est un ensemble d'outils[28] (par exemple facter, hiera, ruby, openssl et +mcollective pour puppet-agent) packagés. En utilisant ceci, nous sommes donc +sûr d'avoir des logiciels compatibles entre eux. + +MASTER / puppetserver[3] + +Vous pouvez voir les détails sur puppet-server[29] et sur puppet_collections[30] +, nous allons faire ici une installation la plus simple possible (ah ah) sur +une debian 8 (Jessie). +root@master:# wget https://apt.puppetlabs.com/puppetlabs-release-pc1-jessie.deb +dpkg -i puppetlabs-release-pc1-jessie.deb +root@master:# apt-get update +root@master:# apt-get install puppetserver + +Puis on démarre le service (si ça plante, allez voir la section "memory +allocation[31]") : +root@master:# service puppetserver start + +Attention !dpkg -l|grep puppet nous donne les résultats suivants : +puppet-agent 1.9.1-1jessie +puppetlabs-release-pc1 1.1.0-4jessie +puppetserver 2.7.2-1puppetlabs1 + +On pourrait donc croire que l'on se retrouve avec un puppet v2.7 (on en est à +la v4)… mais point du tout : Puppet Server 2.x supporte Puppet 4, alors que +Puppet Server 1.x supporte Puppet 3.x et supérieur[32]. + +SLAVE / puppet-agent (node) + +Vous pouvez voir les détails sur puppet-agent[33], l'installation se passe +aussi sur une Debian 8 (Jessie) : +root@slave1:# wget https://apt.puppetlabs.com/puppetlabs-release-pc1-jessie.deb +root@slave1:# dpkg -i puppetlabs-release-pc1-jessie.deb +root@slave1:# apt-get update +root@slave1:# apt-get install puppet-agent + +Un peu de configuration + +Voici une bonne chose de faite. En lisant la doc vous verrez que les +exécutables de puppet[34] sont maintenant dans /opt/puppetlabs/bin/ (ce qui +n'est pas dans notre PATH[35] par défaut). Pour régler ce problème pour le +moment : +root@slave1:# PATH=/opt/puppetlabs/bin:$PATH + +puppet.conf + + Pour les détails sur le fichier puppet.conf, voir config_file_main.html[36] + + * exemple de configuration pour un agent[37] + * exemple de configuration pour un master[38] + + +Par défaut[39], un node recherche son master sur un serveur qui s’appelle +"puppet". Nous allons donc ajouter deux lignes pour spécifier notre +configuration dans /etc/puppetlabs/puppet/puppet.confsur le slave pour y +ajouter ces deux lignes : + + * sur le MASTER + +[main]certname= master.cyphercat.euserver= puppetmaster[master]dns_alt_names= puppet,puppetmaster,master.cyphercat.euvardir= /opt/puppetlabs/server/data/puppetserverlogdir= /var/log/puppetlabs/puppetserverrundir= /var/run/puppetlabs/puppetserverpidfile= /var/run/puppetlabs/puppetserver/puppetserver.pidcodedir= /etc/puppetlabs/code + + * sur le SLAVE + +[main]certname= slave1.cyphercat.euserver= master.cyphercat.euenvironment= production + +Ajouter un node au master + +Vous êtes prêt-e-s ? Il existe 2 méthodes[40] pour dire à un node de se +connecter au master, la première en "tâche de fond", et la seconde "à la main" +que l'on peut mettre en cron[41]. + +sur le SLAVE + +Utilisons la commande manuelle pour voir ce qui se passe : +root@slave1:# /opt/puppetlabs/bin/puppet agent --test + +Info: Creating a new SSL key for slave1.cyphercat.eu +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 slave1.cyphercat.eu +Info: Certificate Request fingerprint (SHA256): 55:A1:EE:A6:1D:D2:85:9D:7F:5F:69:72:7E:BF:54:BA:74:BD:7F:8E:43:0D:AC:A1:D1:1B:4A:FF:4A:F6:54:3B +Info: Caching certificate for ca +Exiting; no certificate found and waitforcert is disabled + +Ce qui veut dire que : + + 1.slave1 a créé un certificat pour lui et il arrive à se connecter au master + 2.le master ne veut pas de lui vu qu'il ne le connaît pas, nous allons donc + régler ça. + +Sur le MASTER +root@master:# /opt/puppetlabs/bin/puppet cert list + "slave1.cyphercat.eu"(SHA256)55:A1:EE:A6:1D:D2:85:9D:7F:5F:69:72:7E:BF:54:BA:74:BD:7F:8E:43:0D:AC:A1:D1:1B:4A:FF:4A:F6:54:3B + +Bonne nouvelle, le premier contact a vraiment eu lieu ! Le MASTER a bien reçu +le certificat de SLAVE, et il nous attend pour le valider[42] avec la commande +suivante : +/opt/puppetlabs/bin/puppet cert sign slave1.cyphercat.eu + +Signing Certificate Request for: + "slave1.cyphercat.eu"(SHA256)55:A1:EE:A6:1D:D2:85:9D:7F:5F:69:72:7E:BF:54:BA:74:BD:7F:8E:43:0D:AC:A1:D1:1B:4A:FF:4A:F6:54:3B +Notice: Signed certificate request for slave1.cyphercat.eu +Notice: Removing file Puppet::SSL::CertificateRequest slave1.cyphercat.eu at '/etc/puppetlabs/puppet/ssl/ca/requests/slave1.cyphercat.eu.pem' + +Et si on relance notre puppet agent -t sur le slave : +root@slave1:# /opt/puppetlabs/bin/puppet agent --test + +Info: Caching certificate for slave1.cyphercat.eu +Info: Caching certificate_revocation_list for ca +Info: Caching certificate for slave1.cyphercat.eu +Info: Using configured environment 'production' +Info: Retrieving pluginfacts +Info: Retrieving plugin +Info: Caching catalog for slave1.cyphercat.eu +Info: Applying configuration version '1486920585' +Info: Creating state file /opt/puppetlabs/puppet/cache/state/state.yaml + +Notice: Applied catalog in 0.07 seconds + +Troubleshooting (install) + +Vous avez peut être rencontré des problèmes au cours de cette installation, je +vous conseille de regarder les points suivants pour vous aider à trouver une +solution : + + * dns_alt_names[43] : liste de noms que votre master peut utiliser? Le nom + que vos nodes utilisent (puppet, puppetmaster, master.cyphercat.eu…) DOIT + etre inclus dedans ainsi que dans son certificat (voir aussi dnsaltnames[44] + ), + * puppet.conf[36] + * Configuration: Short list of important settings[45] + * puppet troubleshooting[46] ou l'original[47] (bon courage) + +Premier manifest + +Personnellement, j'aime bien avoir mes outils[48] sur mes serveurs, ainsi que +quelques raccourcis, commençons donc par ça : + +sur le MASTER +cd /etc/puppetlabs/code/environments/production/manifests + + * Nous créons le fichier site.pp pour déclarer notre node[49] et ce qu'il + devra utiliser : + +# /etc/puppetlabs/puppet/manifests/site.pp +node 'slave1.cyphercat.eu'{ + include common} + + * et nous allons faire notre premier manifest pour installer des paquets dans + le fichier common.pp que nous créons aussi : + +class common {$packages_list=['apt-transport-https', + 'bzip2', + 'curl', + 'deborphan', + 'htop', + 'less', + 'lsof', + 'ncdu', + 'pbzip2', + 'pigz', + 'pwgen', + 'rpl', + 'screen', + 'strace', + 'sudo', + 'tar', + 'unzip', + 'vim', + 'wget', + 'whois', + 'zip'] + + package {$packages_list: + ensure=> 'installed'}} + +Puis nous relançons notre commande /opt/puppetlabs/bin/puppet agent -t sur +notre slave1. Si vous n'avez pas d'erreurs, vous devriez voir quelque comme +ceci qui s'affiche : +Info: Using configured environment 'production' +Info: Retrieving pluginfacts +Info: Retrieving plugin +Info: Caching catalog for slave1.cyphercat.eu +Info: Applying configuration version '1486926845' +Notice: /Stage[main]/Common/Package[deborphan]/ensure: created +Notice: /Stage[main]/Common/Package[ncdu]/ensure: created +Notice: /Stage[main]/Common/Package[pbzip2]/ensure: created +Notice: /Stage[main]/Common/Package[pigz]/ensure: created +Notice: /Stage[main]/Common/Package[pwgen]/ensure: created +Notice: /Stage[main]/Common/Package[rpl]/ensure: created +Notice: /Stage[main]/Common/Package[strace]/ensure: created +Notice: /Stage[main]/Common/Package[unzip]/ensure: created +Notice: /Stage[main]/Common/Package[whois]/ensure: created +Notice: /Stage[main]/Common/Package[zip]/ensure: created +Notice: Applied catalog in 39.43 seconds + +Et voilà pour aujourd'hui ! + +À noter que : + + * Vous pouvez utiliser la commande puppet parser validate common.pp si vous + voulez voir si vous avez fait des erreurs de syntaxe. + * Vous pouvez utiliser puppet-lint[50] pour voir si vous avez fait des + erreurs de style. + +Télécharger ce contenu au format Epub[51] + +Lire les commentaires[52] + +Liens: +[1]: http://linuxfr.org/journaux.atom#installation (lien) +[2]: http://linuxfr.org/journaux.atom#master--puppetserver (lien) +[3]: https://github.com/puppetlabs/puppetserver (lien) +[4]: http://linuxfr.org/journaux.atom#slave--puppet-agent-node (lien) +[5]: http://linuxfr.org/journaux.atom#un-peu-de-configuration (lien) +[6]: http://linuxfr.org/journaux.atom#puppetconf (lien) +[7]: http://linuxfr.org/journaux.atom#ajouter-un-node-au-master (lien) +[8]: http://linuxfr.org/journaux.atom#sur-le-slave (lien) +[9]: http://linuxfr.org/journaux.atom#sur-le-master (lien) +[10]: http://linuxfr.org/journaux.atom#troubleshooting-install (lien) +[11]: http://linuxfr.org/journaux.atom#premier-manifest (lien) +[12]: http://linuxfr.org/journaux.atom#sur-le-master-1 (lien) +[13]: https://www.cyphercat.eu/deploiement-et-automatisation-avec-puppet-partie-1/ (lien) +[14]: https://en.wikipedia.org/wiki/Chef_(software) (lien) +[15]: https://en.wikipedia.org/wiki/Salt_(software) (lien) +[16]: https://en.wikipedia.org/wiki/Ansible_(software) (lien) +[17]: https://github.com/puppetlabs/control-repo (lien) +[18]: https://github.com/puppetlabs/r10k (lien) +[19]: https://docs.puppet.com/puppetdb/ (lien) +[20]: https://docs.puppet.com/hiera/ (lien) +[21]: https://puppet.com/blog/unit-testing-rspec-puppet-for-beginners (lien) +[22]: https://forge.puppet.com/ (lien) +[23]: http://librarian-puppet.com/ (lien) +[24]: https://www.tripadvisor.com/Restaurant_Review-g187147-d1174565-Reviews-Maison_des_trois_thes-Paris_Ile_de_France.html (lien) +[25]: https://docs.puppet.com/puppet/4.8/install_pre.html (lien) +[26]: https://www.scaleway.com/ (lien) +[27]: https://docs.puppet.com/puppet/4.9/puppet_collections.html (lien) +[28]: https://puppet.com/blog/welcome-to-puppet-collections (lien) +[29]: https://docs.puppet.com/puppetserver/2.7/install_from_packages.html (lien) +[30]: https://docs.puppet.com/puppet/latest/puppet_collections.html (lien) +[31]: https://docs.puppet.com/puppetserver/2.7/install_from_packages.html#memory-allocation (lien) +[32]: https://docs.puppet.com/puppetserver/ (lien) +[33]: https://docs.puppet.com/puppet/4.8/install_linux.html (lien) +[34]: https://docs.puppet.com/puppet/4.8/install_linux.html#confirm-you-can-run-puppet-executables (lien) +[35]: https://fr.wikipedia.org/wiki/Variable_d'environnement#.3CPATH.3E_pour_l.27emplacement_des_ex.C3.A9cutables (lien) +[36]: https://docs.puppet.com/puppet/4.9/config_file_main.html (lien) +[37]: https://docs.puppet.com/puppet/4.9/config_file_main.html#example-agent-config (lien) +[38]: https://docs.puppet.com/puppet/4.9/config_file_main.html#example-master-config (lien) +[39]: https://docs.puppet.com/puppet/4.8/config_important_settings.html#settings-for-agents-all-nodes (lien) +[40]: https://docs.puppet.com/puppet/4.8/install_linux.html#start-the-puppet-service (lien) +[41]: https://fr.wikipedia.org/wiki/Cron (lien) +[42]: https://docs.puppet.com/puppet/4.8/install_linux.html#sign-certificates-on-the-ca-master (lien) +[43]: https://docs.puppet.com/puppet/latest/config_important_settings.html#basics-1 (lien) +[44]: https://docs.puppet.com/puppet/latest/configuration.html#dnsaltnames (lien) +[45]: https://docs.puppet.com/puppet/4.9/config_important_settings.html (lien) +[46]: https://www.cyphercat.eu/puppet-troubleshooting/ (lien) +[47]: https://docs.google.com/presentation/d/1AT2j97HV_y2QNH_HFKwZ6ExQDKvfC_lt6qBZaai4ATo/edit#slide=id.p (lien) +[48]: https://www.puppetcookbook.com/posts/install-multiple-packages.html (lien) +[49]: https://docs.puppet.com/puppet/4.8/lang_node_definitions.html (lien) +[50]: http://puppet-lint.com/ (lien) +[51]: http://linuxfr.org/users/skhaen/journaux/deploiement-et-automatisation-avec-puppet-4-9-partie-1.epub (lien) +[52]: http://linuxfr.org/users/skhaen/journaux/deploiement-et-automatisation-avec-puppet-4-9-partie-1#comments (lien) |