summaryrefslogtreecommitdiff
path: root/Dploiement_et_automatisation_avec_Puppet_49__partie_1_.txt
diff options
context:
space:
mode:
authorneodarz <neodarz@neodarz.net>2017-03-10 11:58:22 +0100
committerneodarz <neodarz@neodarz.net>2017-03-10 11:58:22 +0100
commitbc1d70343807104ccf64b6bde9b2db54270203ff (patch)
tree122467d5cad8688bc609a1509e922dce5d70d391 /Dploiement_et_automatisation_avec_Puppet_49__partie_1_.txt
downloadread_it_later-master.tar.xz
read_it_later-master.zip
Initiale releaseHEADmaster
Diffstat (limited to 'Dploiement_et_automatisation_avec_Puppet_49__partie_1_.txt')
-rw-r--r--Dploiement_et_automatisation_avec_Puppet_49__partie_1_.txt331
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)