1. Úvod do loutky
Správci systémů často uvíznou v řadě opakujících se úkolů: aktualizaci balíčků, správu konfiguračních souborů, systémové služby, cron úkoly, přidávání nových konfigurací, opravy chyb atd. Tyto úkoly jsou často opakující se a neefektivní a první reakcí na jejich řešení je jejich automatizace, takže se objeví vlastní skripty. Kvůli složitosti prostředí jsou vlastní skripty a aplikace opakovaně vyvíjeny a obtížně se přizpůsobují více platformám, a flexibilita a funkčnost je obtížně zaručena, proto vznikly automatizované nástroje pro správu konfigurací jako Puppet.
Ve světě open source je k dispozici mnoho konfiguračních nástrojů a mezi klíčové produkty v této oblasti patří:
Puppet (http://puppet.reductivelabs.com/): Nástroj pro správu konfigurace napsaný v Ruby, který využívá architekturu C/S ke konfiguraci klienta v deklarativním jazyce. Cfengine (http://www.cfengine.org): Jeden z prvních open source konfiguračních nástrojů, vydaný v roce 1993, je také C/S architekturou, obvykle používanou ve vzdělávacích institucích. LCFG(http://www.lcfg.org/): Nástroj pro správu konfigurace pro C/S architektury, který používá XML k definování konfigurací. Bcfg2: Nástroj pro správu konfigurace pro architekturu C/S napsaný v Pythonu, který využívá specifikace a odpovědi klienta ke konfiguraci cílového hostitele.
Tento dokument je věnován popisu, jak používat Puppet ke správě vašeho hostitele, aplikací, programů na pozadí a různých služeb.
O Puppet:
1. K čemu se loutka používá?
Puppet je open-source nástroj pro správu konfigurace systému založený na Ruby, který spoléhá na architekturu nasazení C/S. Hlavním vývojářem je Luke Kanies, který se řídí licencí GPLv2. Od roku 1997 se Kanies podílí na správě systému UNIX a vývoj Puppetu vycházel z této zkušenosti. Nespokojený s dostupnými konfiguračními nástroji, Kanies začal vyvíjet nástroje v reduktivní laboratoři mezi lety 2001 a 2005. Brzy poté Reductive Labs uvedla na trh svůj vlajkový produkt Puppet.
2. Vlastnosti pupputu
Mnoho nástrojů pro správu konfigurace systému funguje velmi podobně, například cfengine. Co dělá Puppet jedinečným?
Syntax Puppetu umožňuje vytvořit samostatný skript pro vytvoření uživatele na všech vašich cílových hostitelích. Všechny cílové hostitele modul interpretují a spouštějí postupně podle syntaxe aplikující na lokální systém. Například pokud je tato konfigurace vykonána na serveru Red Hat, vytvořte uživatele pomocí příkazu useradd; Pokud je tato konfigurace vykonána na FreeBSD hostiteli, použije se příkaz adduser.
Dalším pozoruhodným aspektem Puppet je jeho flexibilita. Díky povaze open source softwaru můžete zdrojový kód Puppetu volně získat a pokud narazíte na problémy a máte tu možnost, můžete kód Puppetu upravit nebo vylepšit tak, aby vyhovoval vašemu prostředí. Kromě toho vývojáři komunity a dárci nadále zlepšují možnosti Puppet. Velká komunita vývojářů a uživatelů se také zavázala poskytovat dokumentaci a technickou podporu pro Puppet.
Loutka je také snadno zvládatelná. Podpora vlastních balíčků a konfigurace speciálních systémových prostředí lze rychle a snadno přidat do instalátoru Puppet.
3. Pracovní režim loutky
Puppet je nástroj pro správu konfigurace architektury C/S, který instaluje balíček puppet-server (známý jako Puppet master) na centrální server. Nainstalujte klientský software Puppet (nazývaný Puppet Client) na cílový hostitel, který je potřeba spravovat. Když se klient připojí k Puppet masteru, konfigurační soubor definovaný na Puppet masteru je zkompilován a poté spuštěn na klientovi. Ve výchozím nastavení každý klient komunikuje se serverem každou půlhodinu, aby potvrdil aktualizaci konfiguračních informací. Pokud jsou nové konfigurační informace nebo se konfigurační informace změnily, konfigurace bude znovu zkompilována a zveřejněna každému klientovi k vykonání. Můžete také aktivně spustit aktualizaci konfiguračních informací na serveru, abyste donutili každého klienta je nastavit. Pokud jsou konfigurační informace klienta změněny, může získat původní konfiguraci od serveru a opravit ji.
Správa konfigurace: Instalace a použití loutek (1)
4. Budoucnost Puppet
Nakonec je Puppet mladý nástroj, který je stále ve vývoji. Komunita Puppet rychle roste a neustále se začleňuje mnoho nových nápadů, což vede k vývoji, aktualizacím a prezentaci modulů každý den.
2. Konfigurace a instalace (instalace Puppet 2.6.4 CentOS 5.4):
Nakonfigurujte repozitář na loutkovém serveru a klientovi: otáčky -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm [root@puppetmaster ~]# vi /etc/yum.repos.d/epel.repo Přidat do: [epel-loutka] jméno=epel loutka baseurl=http://tmz.fedorapeople.org/repo/puppet/epel/5/$basearch/ enabled=0 gpgcheck=0
Přidejte repozitář puppet.repo: [root@puppetmaster ~]# vi /etc/yum.repos.d/puppet.repo [loutkové laboratoře] název=Balíčky Puppet Labs baseurl=http://yum.puppetlabs.com/base/ enabled=0 gpgcheck=0
Instalace loutkáře: [root@puppetmaster ~]# yum --enablerepo=epel,epel-puppet install puppet-server
Upravte hostitele a přidejte následující dva záznamy: [root@puppetmaster ~]# vi /etc/hostitelé 192.168.0.10 puppetmaster.leju.com loutka 192.168.0.100 puppetclient.leju.com
Konfigurace loutky: [root@puppetmaster ~]# cd /etc/puppet/ [root@puppetmaster loutka] # vi loutka.conf
[hlavní] # Adresář loutek. # Výchozí hodnota je '$vardir/log'. logdir = /var/log/puppet
# Kde jsou uloženy PID soubory loutky. # Výchozí hodnota je '$vardir/run'. rundir = /var/běh/loutka
# Kde jsou uchovávány SSL certifikáty. # Výchozí hodnota je '$confdir/ssl'. SSLDir = $vardir/SSL
[agent] # Soubor, ve kterém loutka ukládá seznam tříd # spojeno s získanou konfigurací. Lze načíst # samostatný spustitelný soubor "puppet" pomocí tříd "---loadclass" # možnost. # Výchozí hodnota je '$confdir/classes.txt'. Classfile = $vardir/classes.txt
# Kde loutka ukládá lokální konfiguraci. An přípona # označující formát cache je automaticky přidán. # Výchozí hodnota je '$confdir/localconfig'. localconfig = $vardir/localconfig server = puppetmaster.leju.com report = pravda poslouchej = pravda
[mistr] ssl_client_header = SSL_CLIENT_S_DN ssl_client_verify_header = SSL_CLIENT_VERIFY autosign = pravda Zprávy = Uložit
[root@puppetmaster puppet]# vi fileserver.conf [soubory] path /etc/puppet/files povolit *
[moduly] povolit *
[pluginy] povolit *
[root@puppetmaster loutka]# mkdir /etc/puppet/files
[root@puppetmaster loutka] # CD manifesty/ Vytvořte site.pp, což je konfigurační soubor pro loutkové záznamy: [root@puppetmaster manifesty]# vi site.pp import "modules.pp" importovat "roles.pp" importovat "nodes.pp"
# Obecná nastavení pro standardní typy Exec { path => "/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin" }
filebucket { main: server => "puppetmaster.leju.com" } File { backup => main }
Vytvořte modules.pp pro import modulů: [root@puppetmaster manifests]# vi modules.pp Import "test"
Vytvořte roles.pp pro definování rolí serveru: [root@puppetmaster manifestuje]# vi roles.pp Třída základní třída { Include test
}
Vytvořte nodes.pp pro konfiguraci serverových uzlů: [root@puppetmaster manifests]# vi nodes.pp uzel 'basenode' { zahrnout základní třídu
}
Uzel 'puppetclient.leju.com' dědí Basenode { tag("test")
}
Uzel 'puppetmaster.leju.com' dědí Basenode { tag("test")
}
[root@puppetmaster se projevuje]# cd .. [root@puppetmaster puppet]# mkdir moduly Vytvořte testovací modul: [root@puppetmaster moduly]# mkdir -p test/manifesty/ [root@puppetmaster modules]# mkdir test/files/ [root@puppetmaster moduly]# cd test/soubory/ [root@puppetmaster soubory]# vi test.txt Testovací linka! [root@puppetmaster soubory]# cd .. /manifestuje/ Vytvořte testovací třídu pro doručení souboru klientovi: [root@puppetmaster manifestuje]# vi init.pp Test třídy { soubor { "/tmp/test.txt": zajistit => přítomný, grupa => "kořen", vlastník => "kořen", mód => "0644", zdroj => "puppet:///test/test.txt" }
}
Spuštění Puppet Mastera: [root@puppetmaster manifestuje]# /etc/init.d/puppetmaster start Ujisti se, že port 8140 je zapnutý.
Instalace klienta loutky: [root@puppetclient ~]# yum --enablerepo="epel,epel-puppet" install puppet
Upravte hostitele a přidejte následující dva záznamy: [root@puppetclient ~]# vi /etc/hostitelé 192.168.0.10 puppetmaster.leju.com loutka 192.168.0.100 puppetclient.leju.com
Konfigurace loutky: [root@puppetclient ~]# cd /etc/puppet/ [root@puppetclient loutka] # vi loutka.conf [hlavní] # Adresář loutek. # Výchozí hodnota je '$vardir/log'. logdir = /var/log/puppet
# Kde jsou uloženy PID soubory loutky. # Výchozí hodnota je '$vardir/run'. rundir = /var/běh/loutka
# Kde jsou uchovávány SSL certifikáty. # Výchozí hodnota je '$confdir/ssl'. SSLDir = $vardir/SSL
[agent] # Soubor, ve kterém loutka ukládá seznam tříd # spojeno s získanou konfigurací. Lze načíst # samostatný spustitelný soubor "puppet" pomocí tříd "---loadclass" # možnost. # Výchozí hodnota je '$confdir/classes.txt'. Classfile = $vardir/classes.txt
# Kde loutka ukládá lokální konfiguraci. An přípona # označující formát cache je automaticky přidán. # Výchozí hodnota je '$confdir/localconfig'. localconfig = $vardir/localconfig
server = puppetmaster.leju.com report = pravda poslouchej = pravda
[root@puppetclient puppet]# vi namespaceauth.conf [loutkový lovec] dovolte puppetmaster.leju.com povolit *.leju.com
[root@puppetclient loutka] # vi auth.conf Přidejte povolit * na poslední řádek ...... Cesta / auth any povolit *
[root@puppetclient loutka] # CD Exekuce loutku: [root@puppetclient ~]# loutka --noop --test --trace --debug Pokud Puppet Master nenastaví: autosign=true, musí být proveden v Puppet Masteru: [root@puppetmaster ~]# loutkový certifikát -l puppetclient.leju.com [root@puppetmaster ~]# certifikát loutky -s puppetclient.leju.com Podepiš puppetclient.leju.com takto. Pak se vraťte ke klientovi a provedte to zde: [root@puppetclient ~]# loutka --noop --test --trace --debug Join – ne, konfigurace se na klientovi opravdu neaplikuje, hlavně se používá k testování, aby se zjistily, zda nejsou chyby ve výpisu, a spustil se bez chyb: [root@puppetclient ~]# loutka --test --trace --debug
Zobrazit dokument: [root@puppetclient ~]# ll /tmp/ celkem 8 -rw-r--r-- 1 kořen 11 25. února 22:35 test.txt Dokument byl vydán.
Je také možné tlačit na Puppet Mastera: [root@puppetmaster ~]# loutka kop -d --moderátor puppetclient.leju.com Spouštěcí puppetclient.leju.com Získání statusu Status je úspěch puppetclient.leju.com skončil s výstupním kódem 0 Dokončeno Vrácení 0 znamená, že loutka na klientovi byla úspěšně spuštěna.
Nastavte loutku na automatický start: chkconfig --level 2345 puppet on
Upravit Puppetmastera tak, aby používal Passenger Passenger je rozšířením Apache 2.x pro provoz aplikací Rails nebo Rack v Apache. puppetmaster používá WEBrick k poskytování souborových služeb ve výchozím nastavení, pokud máte mnoho klientů puppet, výkon souborové služby Puppetmastera bude špatný, aby byl Puppetmaster robustnější, proto používejte Apache pro poskytování souborových služeb.
Instalace: [root@puppetmaster ~]# yum install httpd httpd-devel ruby-devel rubygems Passenger 2.2.2 RHEL5 funguje bez problémů. Přidat foreman.repo repozitář: [root@puppetmaster ~]# vi /etc/yum.repos.d/foreman.repo [mistr] jméno=Předák repozitáře stabilní baseurl=http://yum.theforeman.org/stable gpgcheck=0 povoleno=1 [root@puppetmaster ~]# Mňam instalace rubygem-passenger-2.2.2-1 [root@puppetmaster ~]# rubygem-rack-1.0.1-1 [root@puppetmaster ~]# passenger-install-apache2-module
Instalace SSL modulu Apache: [root@puppetmaster ~]# Mňam, instaluj mod_ssl
Pro konfiguraci aplikace Puppet rack: mkdir -p /etc/puppet/rack/puppetmasterd/ mkdir /etc/puppet/rack/puppetmasterd/public /etc/puppet/rack/puppetmasterd/tmp cp /usr/share/puppet/ext/rack/files/apache2.conf /etc/httpd/conf.d/puppetmasterd.conf cp /usr/share/puppet/ext/rack/files/config.ru /etc/puppet/rack/puppetmasterd/ chown puppet /etc/puppet/rack/puppetmasterd/config.ru
[root@puppetmaster ~]# vi /etc/httpd/conf.d/passenger.conf LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-2.2.2/ext/apache2/mod_passenger.so PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-2.2.2 PassengerRuby /usr/bin/ruby PassengerMaxPoolVelikost 30 Čas na klid cestujících 1500 PassengerMaxRequests 1000 PassengerStatThrottleRate 120 RackAutoDetect vypnuto RailsAutoDetect vypnuto
[root@puppetmaster ~]# vi /etc/httpd/conf.d/puppetmasterd.conf # Asi bys měl tyto nastavení ladit PassengerHighPerformance na PassengerMaxPoolVelikost 12 Čas na klid cestujících 1500 # PassengerMaxRequests 1000 PassengerStatThrottleRate 120 RackAutoDetect vypnuto RailsAutoDetect vypnuto
Poslouchejte 8140
<VirtualHost *:8140> SSLEngine na SSLProtocol -ALL +SSLv3 +TLSv1 SSLCipherSuite VŠICHNI :! ADH:RC4+RSA:+HIGH:+MEDIUM:-LOW:-SSLv2:-EXP
SSLCertificateFile /var/lib/puppet/ssl/certs/puppetmaster.leju.com.pem SSLCertificateKeyFile /var/lib/puppet/ssl/private_keys/puppetmaster.leju.com.pem SSLCertificateChainFile /var/lib/puppet/ssl/ca/ca_crt.pem SSLCACertificateFile /var/lib/puppet/ssl/ca/ca_crt.pem # Pokud si Apache stěžuje na neplatné podpisy v CRL, můžete zkusit deaktivovat # CRL kontroluje komentářem k dalšímu řádku, ale to se nedoporučuje. SSLCARevocationFile /var/lib/puppet/ssl/ca/ca_crl.pem SSLVerifyClient volitelné SSLVerifyDepth 1 SSLOptions +StdEnvVars
# Následující klientské hlavičky umožňují stejnou konfiguraci pracovat s Poundem. RequestHeader set X-SSL-Subject %{SSL_CLIENT_S_DN}e RequestHeader set X-Client-DN %{SSL_CLIENT_S_DN}e RequestHeader set X-Client-Verify %{SSL_CLIENT_VERIFY}e
DocumentRoot /etc/puppet/rack/puppetmasterd/public/ RackBaseURI / <Adresář /etc/puppet/rack/puppetmasterd/> Možnosti Žádné Povolit, přepsat žádné Rozkaz povolit, zamítnout povolit od všech </Directory> </VirtualHost>
Upravte konfigurační soubor puppetmastera a přidejte následující dva řádky: [root@puppetmaster ~]# vi /etc/puppet/puppet.conf [mistr] ssl_client_header = SSL_CLIENT_S_DN ssl_client_verify_header = SSL_CLIENT_VERIFY
Upravit /etc/sysconfig/puppetmaster: [root@puppetmaster ~]# vi /etc/sysconfig/puppetmaster # Přidejte následující řádek na konec: PUPPETMASTER_EXTRA_OPTS="--hlásí obchod" Pokud potřebujete podávat zprávy jak mistrovi, tak puppet-dashboardu, přidejte následující řádek: PUPPETMASTER_EXTRA_OPTS="--hlásí sklad, mistr, puppet_dashboard"
Ukončit službu loutkáře a spustit službu Apache: [root@puppetmaster ~]# /etc/init.d/puppetmaster stop [root@puppetmaster ~]# /etc/init.d/httpd start
Boot nespustí službu puppetmaster, boot spustí httpd službu: [root@puppetmaster ~]# chkconfig --level 2345 puppetmaster vypnuto [root@puppetmaster ~]# chkconfig --level 2345 httpd on
Ujistěte se, že je port 8140 zapnutý: [root@puppetmaster ~]# netstat -tunlp |grep 8140 tcp 0 0 :::8140 :::* POSLOUCHEJTE 9834/httpd
Otestujte na straně klienta, zda se chybový log vytiskne: [root@puppetclient ~]# loutka --test --trace --debug |