Puppet (instalace)
Většinou je u linuxových distribucí Puppet k dispozici v jejich repozitářích a jeho instalaci tak lze provést přes standardní balíčkovací systém. Výchozí konfigurace však nemusí být všude stejná. Může být jiné nastavení cest k adresářům, moduly manifestu, a bůhví co ještě. Postupy a příklady s nimiž se lze tady setkat sice byly zpracované pro Debian, měly by však být použitelné univerzálně i přes to, že se u novějších verzí mohou v něčem lišit, neboť Puppet se stále vyvíjí.[1]
/etc/puppet
udržovat samostatný repozitář, a do něj po každé úpravě provádět uložení aktuálních změn, včetně komentářů. Mně osobně se osvědčilo přidat do tohoto adresáře i úložiště ssl certifikátů.
Jak už bylo zmíněno úvodem, Puppet je aplikace typu server/klient. Na obou stranách jde však o jeden a týž skript, napsaný v Ruby, který běží jako démon buď v režimu agent nebo master. Podle toho, jaký byl předán první argument. U novější verze 3.0 může fungovat také jako standalone aplikace, která zpracuje lokální manifest a nevyžaduje síťový přístup na master.
Instalace a konfigurace prostředí stroje master
Dalšími argumenty lze měnit hodnoty výchozích proměnných a tím i ovlivňovat prostředí Puppetu. Tyto argumenty lze předávat:
- při spouštění démona (prostřednictvím konfiguračních souborů v
/etc/default
) - při akcích na příkazové řádce
- nebo jako hodnoty proměnných v konfiguračních souborech
Jinak, jsou vždy aplikovány výchozí hodnoty.
Instalace Puppetu na serveru se od instalace na klientském nodu liší především v tom, že obsahuje navíc soubory, které by byly na klientském nodu zbytečné. |
master
Abychom mohli Puppet používat, musíme mít stroj který bude fungovat jako server - master. S ním pak budou komunikovat agenti z ostatních nodů.
Serverová část Puppetu je v Debianu součástí balíku, který se jmenuje puppetmaster. Nainstalovat ji lze přes APT, který by se měl postarat o splnění potřebných závislostí[2]:
root@master~# apt-get install puppetmaster
|
http://www.thingsidoinlinuxwhenbored.info/?p=38
U výchozí konfigurace serveru na Debianu je úložiště SSL certifikátů v adresáři /var/lib/puppet/ssl . Puppet však používá - není-li uvedeno jinak - jako výchozí adresář /etc/puppet/ssl .
Je-li obsah |
Spouštění serverové části aplikace
To zda démon puppetmaster opravdu běží můžete ověřit buď přímo dotazem přes init skript
root@master~# /etc/init.d/puppetmaster status
[ ok ] master is running.
|
nebo tím, že zkontrolujete zda-li proces master běží
root@master~# ps -ef | grep master
puppet 1849 1 0 srp02 ? 00:16:28 /usr/bin/ruby1.8 /usr/bin/puppet master
|
Pokud master neběží, tak se musí předtím, než se začne pracovat s klientem nahodit. A to buď přes init skript
root@master~# /etc/init.d/puppetmaster start
|
nebo manuálně příkazem na řádce[3] - chceme-li mít server spuštěný v ladícím režimu:
root@master~# puppet master --verbose --debug
|
agent
Stroje, které chceme spravovat přes Puppet musí mít nainstalovaného agenta, který bude komunikovat se strojem master. V Debianu se balík s agentem jmenuje puppet. I jeho instalaci lze provést jednoduše přes APT:
root@master~# apt-get install puppet
|
Agent je nainstalován i na stroji, který v rámci Puppetu funguje jako master, pokud jej chceme rovněž puppetizovat'. Protože na něm běží démon, který pak komunikuje s ostatními agenty, tak jej obvykle začínáme puppetizovat jako první.
Žádost klienta o certifikát
Proces puppetizace začíná tím, že si vystavíme přes agenta SSL certifikát, který se musí na stroji master podepsat. Tímto cesrtifikátem se pak bude šifrovat jejich vzájemná komunikace.
root@stroj:/# cat /etc/hostname
stroj-v-chroot
root@stroj:/# hostname
stroj
root@stroj:/# hostname $(cat /etc/hostname)
root@stroj:/# hostname
stroj-v-chroot
Podepsání certifikátu na straně serveru
Výpis seznamu žádostí, čekajících na podepsání na stroji master:
master (KVM) :~# puppet cert list
"stroj.felk.cvut.cz" (93:44:BC:C1:9F:1D:7E:6D:83:BD:24:E7:9A:0A:B3:82)
|
Podepsání čekající žádosti na stroji master:
Aby vzájemná komunikace neskončila chybou, musí se po podepsání certifikátu v manifestu vytvořit - nemá-li dosud nakonfigurován výchozí nod default - příslušný nod pro hostname nového klienta.
nod 'stroj' {
}
|
Pokud se v síti může objevit více nodů se stejným hostname, které se liší pouze doménou, je třeba k tomu aby se manifest neaplikoval na všechny, uvést jméno nodu plným doménovým jménem. |
Ověření zda agent komunikuje se strojem master
Je-li u stroje, na kterém běží server pro Puppet v souboru /etc/hosts
uveden alias puppet
, nebo je-li tento server nastaven v konfiguraci agenta, pak na příkazové řádce nemusí být uváděn parametr --server
.
root@stroj:/etc# puppet agent --noop --test --verbose --server master.felk.cvut.cz
info: Caching catalog for stroj.felk.cvut.cz
info: Applying configuration version '1353687981'
|
Pokud proběhlo podepsání certifikátu v pořádku, tak proběhne komunikace bez chybových zpráv.
Ve výchozí konfiguraci je automatické spouštění agenta v souboru /etc/default/puppet zakázáno (v proměnné START). Povolte ho, až když budete mít připravený použitelný manifest.
|
Zavržení (revokace) certifikátu
Se aplikuje tehdy, pokud chceme zcela zamezit agentu ze stroje pro který byl certifikát původně vydán přístup ke stroji master.
Při revokaci totiž zůstává informace o původním certifikátu zachována a master případnou novou žádost ze stroje se stejným jménem na jejím základě odmítne přijmout.
Při revokaci nestačí uvést pouze jméno nodu, jak ho vrací operace list, ale musí být uvedeno i pořadové číslo certifikátu který chceme odvolat. To však lze zjistit pouze přes operaci print
U zavrženého certifikátu se pak bude při výpisu místo znaménka plus zobrazovat mínus.
Pro to, aby master přestal se zavrženým strojem komunikovat, se musí démon restartovat. |
Pokud by se vám omylem povedlo revokovat (tak jako mě) všechny certifikáty, tak pokud máte udržován přes git také adresář s Puppetími SSL certifikáty, tak si vytáhněte původní obsah souboru /etc/puppet/ssl/ca/ca_crl.pem a nahraďte stávající obsah tím původním.
|
Odstranění certifikátu
Odstranění certifikátu je operace, která používá pro..
- Odstranění čekajících a dosud nepodepsaných žádostí strojů, které nechceme spravovat přes Puppet.
- Zneplatnění a zrušení již podepsaných certifikátů strojů, které prošly reinstalací, nebo byly zrušeny. Podepsaný certifikát se nejprve zneplatní a následně se neplatný klíč odstraní z úložiště.
Vydání nového certifikátu
Pokud chceme z nějakého důvodu vydat certifikát nový - kupř. když u stávajícího certifikátu vypršela platnost, nebo došlo k diskreditaci klienta, musí se nejprve na stroji master odstranit původní podepsaný certifikát a teprve pak na klientském stroji, kde běží agent odstranit z úložiště SSL certifikátů původní podepsaná žádost o certifikát, která se nalézá v adresáři ./puppet/ssl/certificate_requests
i vydaný klíč (v adresáři ./puppet/ssl/certs
)
Teprve pak je možné vydat novou žádost o certifikát, kterou bude možné na stroji master podepsat.
environment
Puppet umožňuje v rámci jednoho stroje master vytvořit vzájemně nezávislá prostředí (environment).
Každé z nich může mít svůj vlastní manifest i sadu modulů, takže lze udržovat paralelně vedle sebe moduly určené k nasazení v produkčním prostředí s moduly v testovacím prostředí, které se připravují pro budoucí produkční nasazení.
Výchozí prostředí, se jmenuje production a tento název je i výchozí hodnotou proměnné $enviroments , kterou používá agent na klientském nodu, pokud se mu nenastaví žádné jiné prostředí.
|
Vytvoření testovacího prostředí na stroji master
Nové prostředí se vytvoří tak, že se nejprve nastaví v konfiguračním souboru /etc/puppet.conf
na stroji master jako nová položka v hranatých závorkách. Jeho název se pak stane obsahem proměnné $environment
, kterou lze využít v nastavení cest k výchozímu manifestu a modulům.
[jmeno_prostredi]
manifest = $confdir/$environment/manifests/site.pp
modulepath = $confdir/$environment/modules
|
Aplikace testovacího prostředí na straně agenta
Pokud se spouští na straně klienta agent jako démon a chceme aby používal místo produkčního prostředí moduly z testovacího prostředí s názvem jmeno_prostredi
, pak je třeba do konfigračního souboru /etc/puppet.conf
na straně klienta nastavit v sekci agent
jako hodnotu proměnné environment jeho jméno.
[agent]
environment = jmeno_prostredi
|
Automatické spouštění agenta
Pokud nechceme aby se změny realizovaly automaticky, můžeme init skript, přes který se agent spouští jako démon deaktivovat a pak jej spouštět na příkazové řádce ručně. Jméno testovacího prostředí mu pak lze předávat jako hodnotu parametru --environment
:
root@stroj~# puppet agent --environment jmeno_prostredi
|
Při použití testovacího prostředí Puppet využívá již existujícího SSL certifikátu, tudíž není nutné proces s vydáním certifikátu opakovat. |
/var/log/daemon.log
Změna intervalu
Výchozí půlhodinový interval pro běžnou správu bohatě stačí, pokud však ladíme nastavení manifestu a potřebujeme aby agent kontroloval master v kratším intervalu, pak jej lze zkrátit nastavením číselné hodnoty proměnné runinterval v sekci [main]
konfiguračního soubor /etc/puppet/puppet.conf
. Ta má ve výchozím stavu hodnotu 1800 (sekund).
Je-li hodnota 0
, tak bude agent kontaktovat master ihned jakmile skončí ověření staženého manifestu, které se pohybuje v řádech sekund.
Prodleva
- ↑ Tento manuál začal vznikat v době vydání verze 2.7.18
- ↑ Ale nemusí. Nastavení potřebných závislostí je totiž u Debianu záležitostí maintainera balíku, který mohl nějaký balík opomenout.
- ↑ http://docs.puppetlabs.com/man/master.html - viz manuálová stránka