Puppet - egy központi management megoldás
Csillag Tamás <cstamas@digitus.itk.ppke.hu>
http://digitus.itk.ppke.hu/~cstamas
Pásztor György <pasztor@bibl.u-szeged.hu>
http://www.bibl.u-szeged.hu/~pasztor/nws2k7/
Jelen dokumentum a Creative Commons license by-sa alatt érhetõ el.
Előadás áttekintése
- Miért?
- Managementről általában
- Kihívások
- A Puppet felépítése, működése
- Példák
- További célok
Managementről általában
- Mindenki valahogy csinálja
- Bizonyos méret felett elengedhetetlen
- Senki sem fogja egy gépterem gépeit egyenként konfigurálni
- ssh in a for loop
- Különböző (ad-hoc) saját eszközök
- De felmerülhet néhány kérdés...
Kihívások
- Konzisztencia
- Fut a gép?
- Lefutott a parancs? Hibátlanul futott le?
- Új gép felvétele
- Egy új webszerver kerül beállításra, hogyan kezdjünk neki?
- Több operációs rendszer
- Hogyan is kell egy új felhasználót felvenni?
- Mi az ssh program neve?
- Szükséges a megfelelő absztrakciós szint, hogy a problémára tudjunk
koncentrálni, de még meg tudjuk fogalmazni a problémát.
Puppet architektúra
- Kliens - szerver architektúra
- Kliens fél óránként felébred és lekérdezi a konfigurációt, melyet a
szerver konfigurációs fájljaiban definiálunk és a kliens kérésére a szerver legyárt
- A konfiguráció egyfajta viselkedést ad meg, amit elvár a klienstől
Puppet architektúra (2.)
- A kliens megvizsgálja, hogy a megadottól van-e eltérés és ha igen akkor ennek megfelelően cselekszik.
- Kliens szerver kapcsolat SSL alapon
- A szerver első indításakor CA generálódik
- A kliens első kapcsolódásakor egy signing requestet generál
- Ezt vagy automatikusan írjuk alá, vagy "kézzel"
- Ezután minden kommunikáció titkosítva folyik
Puppet felépítése
- Resource abstraction layer
- Provider -ek az erőforrások leírására
- Fájlok, csomagok, felhasználók
- Configuration language
- Provider -ekkel való interakciók leírására (Code reuse!)
Egyszerű példa
# Make sure the modes on the sudoers file are correct
file { "/etc/sudoers": owner => root, group => root, mode => 644 }
- File provider
- Ha bármelyik tulajdonságban eltérés van, akkor a megfelelő eszközzel:
chmod, chown, chgrp a kívánt értékre állítja.
Összetettebb példa
class ntp {
# Make sure the package is installed
package { openntpd: ensure => installed }
# And the configuration file, but the configuration file
# gets installed after the package, so it overwrites
file { "/etc/openntpd/ntpd.conf":
source => "puppet://puppet/global/etc_openntpd_ntpd.conf",
require => Package[openntpd]
}
# And start the service, after both other resources
# are done and in such a way that it will restart if
# either changes
service { openntpd:
ensure => running,
subscribe => [Package[openntpd], File["/etc/openntpd/ntpd.conf"]]
}
}
Több operációs rendszer esetén
class ssh {
package { ssh: ensure => installed }
file { sshd_config:
name => $operatingsystem ? {
Darwin => "/etc/sshd_config",
Solaris => "/opt/csw/etc/ssh/sshd_config",
default => "/etc/ssh/sshd_config"
},
source => "puppet://server.domain.com/files/ssh/sshd_config"
}
service { ssh:
name => $operatingsystem ? {
Solaris => openssh,
default => ssh
},
ensure => running,
subscribe => [Package[ssh], File[sshd_config]]
}
}
(nem is olyan távoli) Távlati célok
- Géptermi géptermek konfigurációja
- Szerverek fokozatos managementje