summaryrefslogtreecommitdiff
path: root/Dploiement_et_automatisation_avec_Puppet_49__partie_1_.txt
blob: 212838fce1404637b8acf1c434457d8a8630092d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
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)