Projet

Général

Profil

PUPPET » Historique » Version 12

Laurent GUERBY, 25/04/2012 11:33

1 6 Mehdi Abaakouk
h1. Master of Puppet
2 1 Mehdi Abaakouk
3 10 Laurent GUERBY
h2. Misc links
4 10 Laurent GUERBY
5 10 Laurent GUERBY
* http://finninday.net/wiki/index.php/Zero_to_puppet_in_one_day
6 11 Laurent GUERBY
* http://blog.wikimedia.org/2011/09/19/ever-wondered-how-the-wikimedia-servers-are-configured/
7 12 Laurent GUERBY
* https://gerrit.wikimedia.org/r/gitweb?p=operations/puppet.git;a=tree
8 11 Laurent GUERBY
* http://blog.wikimedia.org/2012/04/16/introduction-to-wikimedia-labs/
9 10 Laurent GUERBY
10 6 Mehdi Abaakouk
h2. Exemple duplication www avec puppet et les backups:
11 1 Mehdi Abaakouk
12 6 Mehdi Abaakouk
Installation d'une vm (ici: puppet-tester) avec ganeti:
13 6 Mehdi Abaakouk
14 6 Mehdi Abaakouk
sur h1:
15 6 Mehdi Abaakouk
<pre>
16 6 Mehdi Abaakouk
./gnt-addvm puppet-tester
17 6 Mehdi Abaakouk
</pre>
18 6 Mehdi Abaakouk
19 7 Mehdi Abaakouk
Sur puppet-tester, restauration du dernier backup de /var/www de www.tetaneutral.net qui se trouve sur h2 (Je passe l'installation de clé pgp):
20 7 Mehdi Abaakouk
21 7 Mehdi Abaakouk
<pre>
22 7 Mehdi Abaakouk
cat www.tetaneutral.net-var-www.20120102.master.tar.gz | gpg -d | tar -xzf - -C /
23 7 Mehdi Abaakouk
cat www.tetaneutral.net-var-www.20120103.tar.gz | gpg -d | tar -xzf - -C /
24 8 Mehdi Abaakouk
cat www.tetaneutral.net-var-www.20120104.tar.gz | gpg -d | tar -xzf - -C /
25 7 Mehdi Abaakouk
</pre>
26 6 Mehdi Abaakouk
27 6 Mehdi Abaakouk
Puis installation de puppet:
28 6 Mehdi Abaakouk
<pre>
29 6 Mehdi Abaakouk
$ apt-get install puppet
30 6 Mehdi Abaakouk
31 6 Mehdi Abaakouk
$ cat /etc/puppet/puppet.conf ajouter:
32 6 Mehdi Abaakouk
[main]
33 6 Mehdi Abaakouk
logdir=/var/log/puppet
34 6 Mehdi Abaakouk
vardir=/var/lib/puppet
35 6 Mehdi Abaakouk
ssldir=/var/lib/puppet/ssl
36 6 Mehdi Abaakouk
rundir=/var/run/puppet
37 6 Mehdi Abaakouk
factpath=$vardir/lib/facter
38 6 Mehdi Abaakouk
templatedir=$confdir/templates
39 6 Mehdi Abaakouk
pluginsync = true
40 6 Mehdi Abaakouk
41 6 Mehdi Abaakouk
[agent]
42 6 Mehdi Abaakouk
server=puppet.tetaneutral.net
43 6 Mehdi Abaakouk
44 6 Mehdi Abaakouk
$ puppet agent --test
45 6 Mehdi Abaakouk
</pre>
46 6 Mehdi Abaakouk
47 6 Mehdi Abaakouk
Sur puppet.teteneutral.net, dans le fichier nodes.pp copie du bloc de la machine www en puppet-tester
48 6 Mehdi Abaakouk
puis on sign la cle de puppet-tester
49 6 Mehdi Abaakouk
<pre>
50 6 Mehdi Abaakouk
puppetca --sign puppet-tester.tetaneutral.net
51 6 Mehdi Abaakouk
</pre>
52 6 Mehdi Abaakouk
53 6 Mehdi Abaakouk
sur puppet-tester, on descend la configuration via puppet:
54 6 Mehdi Abaakouk
55 6 Mehdi Abaakouk
<pre>puppet agent --test</pre>
56 6 Mehdi Abaakouk
57 6 Mehdi Abaakouk
et pour finir on restaure le backup mysql:
58 6 Mehdi Abaakouk
59 6 Mehdi Abaakouk
<pre>
60 6 Mehdi Abaakouk
mysql -u root < www.tetaneutral.net-all-mysql-databases.20120103.sql
61 6 Mehdi Abaakouk
</pre>
62 6 Mehdi Abaakouk
63 6 Mehdi Abaakouk
64 1 Mehdi Abaakouk
h2. Ajout d'une machine:
65 1 Mehdi Abaakouk
66 1 Mehdi Abaakouk
Sur le client:
67 1 Mehdi Abaakouk
68 1 Mehdi Abaakouk
<pre>
69 1 Mehdi Abaakouk
$ apt-get install puppet
70 1 Mehdi Abaakouk
</pre>
71 1 Mehdi Abaakouk
72 1 Mehdi Abaakouk
dans /etc/default/puppet mettre:
73 1 Mehdi Abaakouk
<pre>
74 1 Mehdi Abaakouk
START=yes
75 1 Mehdi Abaakouk
</pre>
76 1 Mehdi Abaakouk
77 1 Mehdi Abaakouk
et dans /etc/puppet/puppet.conf ajouter:
78 1 Mehdi Abaakouk
<pre>
79 6 Mehdi Abaakouk
pluginsync=true
80 6 Mehdi Abaakouk
81 1 Mehdi Abaakouk
[agent]
82 1 Mehdi Abaakouk
server=puppet.tetaneutral.net
83 1 Mehdi Abaakouk
</pre>
84 1 Mehdi Abaakouk
85 1 Mehdi Abaakouk
Ensuite ajouter la machine dans le puppet master, MOUAHAHA:
86 1 Mehdi Abaakouk
Sur le client: 
87 1 Mehdi Abaakouk
<pre>
88 1 Mehdi Abaakouk
$ puppet agent --test
89 1 Mehdi Abaakouk
warning: peer certificate won't be verified in this SSL session
90 1 Mehdi Abaakouk
warning: peer certificate won't be verified in this SSL session
91 1 Mehdi Abaakouk
warning: peer certificate won't be verified in this SSL session
92 1 Mehdi Abaakouk
Exiting; no certificate found and waitforcert is disabled
93 1 Mehdi Abaakouk
</pre>
94 1 Mehdi Abaakouk
95 1 Mehdi Abaakouk
Sur le serveur:
96 1 Mehdi Abaakouk
<pre>
97 1 Mehdi Abaakouk
$ puppetca --list
98 1 Mehdi Abaakouk
www.tetaneutral.net
99 1 Mehdi Abaakouk
100 1 Mehdi Abaakouk
$ puppetca  --sign --all
101 1 Mehdi Abaakouk
notice: Signed certificate request for www.tetaneutral.net
102 1 Mehdi Abaakouk
notice: Removing file Puppet::SSL::CertificateRequest www.tetaneutral.net at '/var/lib/puppet/ssl/ca/requests/www.tetaneutral.net.pem'
103 1 Mehdi Abaakouk
</pre>
104 1 Mehdi Abaakouk
105 1 Mehdi Abaakouk
Sur le client: 
106 1 Mehdi Abaakouk
<pre>
107 1 Mehdi Abaakouk
$ puppet agent --test
108 1 Mehdi Abaakouk
warning: peer certificate won't be verified in this SSL session
109 1 Mehdi Abaakouk
info: Caching certificate for www.tetaneutral.net
110 1 Mehdi Abaakouk
info: Caching certificate_revocation_list for ca
111 1 Mehdi Abaakouk
info: Caching catalog for www.tetaneutral.net
112 1 Mehdi Abaakouk
info: Applying configuration version '1325516709'
113 4 Mehdi Abaakouk
info: Creating state file /var/lib/puppet/state/state.yaml
114 4 Mehdi Abaakouk
notice: Finished catalog run in 0.01 seconds
115 4 Mehdi Abaakouk
</pre>
116 4 Mehdi Abaakouk
117 4 Mehdi Abaakouk
Sur le serveur, on associe les modules au client:
118 4 Mehdi Abaakouk
119 4 Mehdi Abaakouk
<pre>
120 4 Mehdi Abaakouk
$ cat manifests/nodes.pp
121 4 Mehdi Abaakouk
122 4 Mehdi Abaakouk
node basenode {
123 2 Mehdi Abaakouk
    include backup
124 2 Mehdi Abaakouk
    include motd
125 5 Mehdi Abaakouk
}
126 5 Mehdi Abaakouk
127 5 Mehdi Abaakouk
node 'www.tetaneutral.net' inherits basenode {
128 5 Mehdi Abaakouk
}
129 5 Mehdi Abaakouk
</pre>
130 5 Mehdi Abaakouk
131 5 Mehdi Abaakouk
132 5 Mehdi Abaakouk
133 5 Mehdi Abaakouk
h2. Récupération de fichier écrasé par puppet:
134 5 Mehdi Abaakouk
135 1 Mehdi Abaakouk
Voir la liste des fichiers backupés:
136 2 Mehdi Abaakouk
<pre>
137 2 Mehdi Abaakouk
find /var/*/puppet/clientbucket -name paths | while read path ; do echo $(cat $path): $(basename $(dirname $path))  $(stat -c %y $path) ; done
138 2 Mehdi Abaakouk
</pre>
139 2 Mehdi Abaakouk
Ensuite pour voir le fichier:
140 2 Mehdi Abaakouk
<pre>
141 6 Mehdi Abaakouk
A venir ... (un truc avec puppet filebucket ...)
142 2 Mehdi Abaakouk
</pre>
143 2 Mehdi Abaakouk
144 2 Mehdi Abaakouk
h2. Ajout d'un module (ie: un truc/service/user a configurer), ici module motdpour l'exemple :
145 2 Mehdi Abaakouk
146 2 Mehdi Abaakouk
h3. Création du module
147 2 Mehdi Abaakouk
148 2 Mehdi Abaakouk
<pre>
149 2 Mehdi Abaakouk
cd /etc/puppet/modules
150 2 Mehdi Abaakouk
mkdir -p  motd/{files,lib,manifests,templates,tests}
151 2 Mehdi Abaakouk
$ cat motd/manifests/init.pp
152 2 Mehdi Abaakouk
class motd {
153 2 Mehdi Abaakouk
        file {'motd':
154 2 Mehdi Abaakouk
                ensure  => file,
155 2 Mehdi Abaakouk
                path    => '/etc/motd.tail',
156 2 Mehdi Abaakouk
                mode    => 0644,
157 2 Mehdi Abaakouk
                content => "Bienvenue sur ${::hostname}, machine de l'infrastructure ${::domain}\n\nCette machine est geree par puppet toutes modifications effectuee est suceptible d'etre perdu."
158 2 Mehdi Abaakouk
        }
159 2 Mehdi Abaakouk
}
160 2 Mehdi Abaakouk
</pre>
161 2 Mehdi Abaakouk
162 2 Mehdi Abaakouk
163 2 Mehdi Abaakouk
h3. Ajout du module à la liste des modules disponibles
164 1 Mehdi Abaakouk
165 2 Mehdi Abaakouk
<pre>
166 2 Mehdi Abaakouk
$ cat manifests/modules.pp
167 2 Mehdi Abaakouk
import "motd"
168 2 Mehdi Abaakouk
</pre>
169 2 Mehdi Abaakouk
170 2 Mehdi Abaakouk
h3. Utilisation du module pour une node
171 2 Mehdi Abaakouk
172 2 Mehdi Abaakouk
<pre>
173 2 Mehdi Abaakouk
$ cat manifests/nodes.pp
174 6 Mehdi Abaakouk
node 'www.tetaneutral.net' {
175 2 Mehdi Abaakouk
    include motd
176 2 Mehdi Abaakouk
}
177 2 Mehdi Abaakouk
</pre>
178 1 Mehdi Abaakouk
179 1 Mehdi Abaakouk
180 9 Mehdi Abaakouk
h2. Installation du serveur PuppetMaster
181 1 Mehdi Abaakouk
182 1 Mehdi Abaakouk
Installation du paquet:
183 1 Mehdi Abaakouk
<pre>
184 1 Mehdi Abaakouk
$ apt-get install puppetmaster
185 1 Mehdi Abaakouk
</pre>
186 1 Mehdi Abaakouk
187 9 Mehdi Abaakouk
Voici le fichier de configuration /etc/puppet/puppet.conf qui permet de maintenir une conf de dev et de prod:
188 1 Mehdi Abaakouk
<pre>
189 9 Mehdi Abaakouk
[main]
190 9 Mehdi Abaakouk
logdir=/var/log/puppet
191 9 Mehdi Abaakouk
vardir=/var/lib/puppet
192 9 Mehdi Abaakouk
ssldir=/var/lib/puppet/ssl
193 9 Mehdi Abaakouk
rundir=/var/run/puppet
194 9 Mehdi Abaakouk
factpath=$vardir/lib/facter
195 9 Mehdi Abaakouk
templatedir=$confdir/templates
196 9 Mehdi Abaakouk
197 9 Mehdi Abaakouk
pluginsync = true
198 9 Mehdi Abaakouk
199 1 Mehdi Abaakouk
[master]
200 1 Mehdi Abaakouk
certname=puppet.tetaneutral.net
201 9 Mehdi Abaakouk
manifest = $confdir/manifests/site_$environment.pp
202 1 Mehdi Abaakouk
</pre>
203 9 Mehdi Abaakouk
204 9 Mehdi Abaakouk
Exemple du fichier site_dev.php
205 9 Mehdi Abaakouk
<pre>
206 9 Mehdi Abaakouk
cat /etc/puppet/manifests/site_dev.pp
207 9 Mehdi Abaakouk
import "classes/*.pp"
208 9 Mehdi Abaakouk
import "keys.pp"
209 9 Mehdi Abaakouk
import "modules.pp"
210 9 Mehdi Abaakouk
import "nodes_dev.pp"
211 9 Mehdi Abaakouk
</pre>
212 9 Mehdi Abaakouk
213 9 Mehdi Abaakouk
Le fichier keys.pp contient les cle ssh des membres, le répertoire classes les fonctions créé pour ttnn (en autres les clés ssh)
214 9 Mehdi Abaakouk
Le fichier modules.pp, la liste des modules à chargé.
215 9 Mehdi Abaakouk
Et enfin nodes_dev.pp la liste des machines puppetisées avec leur configuration.
216 9 Mehdi Abaakouk
217 1 Mehdi Abaakouk
218 1 Mehdi Abaakouk
Dans /etc/puppet/fileserver.conf configurer les autorisations:
219 1 Mehdi Abaakouk
<pre>
220 1 Mehdi Abaakouk
[files]
221 1 Mehdi Abaakouk
  path /etc/puppet/files
222 1 Mehdi Abaakouk
  allow 91.224.149.0/24
223 1 Mehdi Abaakouk
  allow 91.224.148.0/24
224 1 Mehdi Abaakouk
</pre>
225 6 Mehdi Abaakouk
226 6 Mehdi Abaakouk
227 6 Mehdi Abaakouk
h2. Liens:
228 6 Mehdi Abaakouk
229 6 Mehdi Abaakouk
* http://docs.puppetlabs.com/references/stable/
230 6 Mehdi Abaakouk
* http://madeinsyria.fr/2011/06/howto-puppet-administration-et-industrialisation-de-masse/