1. Uvod v lutke
Sistemski administratorji so pogosto ujeti v vrsto ponavljajočih se nalog: nadgradnja paketov, upravljanje konfiguracijskih datotek, sistemske storitve, cron naloge, dodajanje novih konfiguracij, popravljanje napak itd. Te naloge so pogosto ponavljajoče in neučinkovite, zato je prvi odziv na njihovo avtomatizacijo, zato se pojavijo prilagojeni skripti. Zaradi kompleksnosti okolja se prilagojene skripte in aplikacije večkrat razvijajo in jih je težko prilagoditi več platformam, fleksibilnost in funkcionalnost pa je težko zagotoviti, zato so se pojavila avtomatizirana orodja za upravljanje konfiguracij, kot je Puppet.
V odprtokodnem svetu je na voljo veliko orodij za konfiguracijo, nekateri ključni izdelki na tem področju pa so:
Puppet (http://puppet.reductivelabs.com/): Orodje za upravljanje konfiguracije, napisano v Rubyju, ki uporablja arhitekturo C/S za konfiguracijo odjemalca v deklarativnem jeziku. Cfengine (http://www.cfengine.org): Eno prvih odprtokodnih orodij za konfiguracijo, izdano leta 1993, je tudi C/S arhitektura, običajno uporabljena v izobraževalnih ustanovah. LCFG(http://www.lcfg.org/): Orodje za upravljanje konfiguracij za C/S arhitekture, ki uporablja XML za definiranje konfiguracij. Bcfg2: Orodje za upravljanje konfiguracije za arhitekturo C/S, napisano v Pythonu, ki uporablja specifikacije in odzive odjemalcev za konfiguracijo ciljnega gostitelja.
Ta dokument je namenjen opisu, kako uporabljati Puppet za upravljanje vašega gostitelja, aplikacij, programov v ozadju in različnih storitev.
O Puppetu:
1. Za kaj se uporablja Puppet?
Puppet je odprtokodno orodje za upravljanje konfiguracije sistemov, ki temelji na Rubyju in temelji na arhitekturi nameščanja C/S. Glavni razvijalec je Luke Kanies, ki sledi avtorskim pravicam GPLv2. Od leta 1997 je Kanies vključen v upravljanje UNIX sistemov, razvoj Puppeta pa je izhajal iz teh izkušenj. Ker ni bil zadovoljen z razpoložljivimi konfiguracijskimi orodji, je Kanies med letoma 2001 in 2005 začel razvijati orodja v reduktivnem laboratoriju. Kmalu je Reductive Labs izdal svoj vodilni izdelek, Puppet.
2. Značilnosti pupputa
Veliko orodij za upravljanje konfiguracije sistema deluje zelo podobno, kot je cfengine. Kaj naredi Puppet edinstvenega?
Puppetova sintaksa vam omogoča, da ustvarite ločen skript za gradnjo uporabnika na vseh ciljnih gostiteljih. Vsi ciljni gostitelji bodo modul interpretirali in izvajali zaporedoma z uporabo sintakse, ki velja za lokalni sistem. Na primer, če se ta konfiguracija izvede na strežniku Red Hat, ustvarite uporabnika z ukazom useradd; Če se ta konfiguracija izvede na FreeBSD gostitelju, se uporabi ukaz adduser.
Še ena izjemna lastnost Puppeta je njegova prilagodljivost. Zaradi narave odprtokodne programske opreme lahko prosto pridobite izvorno kodo Puppeta, in če naletite na težave in imate možnost, lahko kodo Puppeta prilagodite ali izboljšate glede na svoje okolje. Poleg tega razvijalci skupnosti in donatorji še naprej izboljšujejo zmogljivosti Puppeta. Velika skupnost razvijalcev in uporabnikov je prav tako zavezana zagotavljanju dokumentacije in tehnične podpore za Puppet.
Lutka je prav tako enostavna za razraščanje. Podporo za prilagojene pakete in posebne konfiguracije sistemskih okolij je mogoče hitro in enostavno dodati v namestitveni program Puppet.
3. Način delovanja lutke
Puppet je orodje za upravljanje konfiguracije arhitekture C/S, ki namesti paket puppet-server (znan kot Puppet master) na osrednji strežnik. Namestite programsko opremo Puppet odjemalca (imenovano Puppet Client) na ciljni gostitelj, ki ga je treba upravljati. Ko se odjemalec poveže z Puppet masterjem, se konfiguracijska datoteka, definirana na Puppet masterju, prevede in nato zažene na odjemalcu. Privzeto vsak odjemalec komunicira s strežnikom vsakih pol ure, da potrdi posodobitev konfiguracijskih informacij. Če so nove konfiguracijske informacije ali so se konfiguracijske informacije spremenile, se konfiguracija ponovno prevede in objavi vsakemu odjemalcu za izvajanje. Lahko tudi aktivno sprožite posodobitev konfiguracijskih informacij na strežniku, da prisilite vsakega odjemalca, da ga konfigurira. Če se konfiguracijske informacije odjemalca spremenijo, lahko od strežnika pridobi izvirno konfiguracijo, da jo popravi.
Upravljanje konfiguracije: Namestitev in uporaba lutk (1)
4. Prihodnost Puppet
Nazadnje, Puppet je mlado orodje, ki je še vedno v razvoju in razvoju. Puppet skupnost hitro raste, številne nove ideje pa se nenehno vključujejo, kar spodbuja razvoj, posodobitve in vsakodnevne predstavitve modulov.
2. Konfiguracija in namestitev (Puppet 2.6.4 CentOS 5.4 namestitev):
Konfigurirajte repozitorij na lutkovnem strežniku in odjemalcu: RPM -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 Dodajte k: [epel-lutka] ime=epel lutka baseurl=http://tmz.fedorapeople.org/repo/puppet/epel/5/$basearch/ omogočeno=0 gpgcheck=0
Dodajte repozitorij puppet.repo: [root@puppetmaster ~]# vi /etc/yum.repos.d/puppet.repo [lutkovne laboratorije] ime=Paketi Puppet Labs baseurl=http://yum.puppetlabs.com/base/ omogočeno=0 gpgcheck=0
Namestitev lutkarskega mojstra: [root@puppetmaster ~]# yum --enablerepo=epel,epel-puppet install puppet-server
Spremenite gostitelje in dodajte naslednja dva zapisa: [root@puppetmaster ~]# vi /itd/gostitelji 192.168.0.10 puppetmaster.leju.com lutka 192.168.0.100 puppetclient.leju.com
Konfiguracija lutke: [root@puppetmaster ~]# cd /itd/lutka/ [root@puppetmaster lutka]# vi lutka.conf
[glavno] # Imenik dnevnikov lutk. # Privzeta vrednost je '$vardir/log'. logdir = /var/log/puppet
# Kjer hranijo PID datoteke Puppet. # Privzeta vrednost je '$vardir/run'. rundir = /var/teči/lutka
# Kjer se hranijo SSL certifikati. # Privzeta vrednost je '$confdir/ssl'. ssldir = $vardir/SSL
[agent] # Datoteka, v katero lutka shranjuje seznam razredov # povezano z pridobljeno konfiguracijo. Lahko se naloži v # ločena izvršljiva datoteka ''lutka'' z uporabo ''--loadclass'' # možnosti. # Privzeta vrednost je '$confdir/classes.txt'. classfile = $vardir/classes.txt
# Kjer lutka predpomni lokalno konfiguracijo. An # razširitev, ki označuje format predpomnilnika, se samodejno doda. # Privzeta vrednost je '$confdir/localconfig'. localconfig = $vardir/localconfig strežnik = puppetmaster.leju.com poročilo = resnično poslušaj = res
[mojster] ssl_client_header = SSL_CLIENT_S_DN ssl_client_verify_header = SSL_CLIENT_VERIFY autosign = resnično Poročila = Shramba
[root@puppetmaster puppet]# vi fileserver.conf [datoteke] pot /etc/puppet/files dovoli *
[moduli] dovoli *
[vtičniki] dovoli *
[root@puppetmaster lutka]# mkdir /itd/lutka/datoteke
[root@puppetmaster lutka]# CD manifestacije/ Ustvarite site.pp, ki je konfiguracijska datoteka za vnos lutk: [root@puppetmaster manifests]# vi site.pp uvoz "modules.pp" uvoz "roles.pp" uvoz "nodes.pp"
# Splošne nastavitve za standardne tipe Exec { path => "/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin" }
filebucket { main: server => "puppetmaster.leju.com" } File { backup => main }
Ustvari modules.pp za uvoz modulov: [root@puppetmaster manifests]# vi modules.pp Uvozni "test"
Ustvarite roles.pp za definiranje vlog strežnikov: [root@puppetmaster manifestira]# vi vloge.pp Razredni osnovni razred { Include test
}
Ustvarite nodes.pp za konfiguracijo strežniških vozlišč: [root@puppetmaster manifests]# vi nodes.pp Vozlišče 'Basenode' { vključujejo osnovni razred
}
Vozlišče 'puppetclient.leju.com' podeduje Basenode { oznaka ("test")
}
Vozlišče 'puppetmaster.leju.com' podeduje Basenode { oznaka ("test")
}
[root@puppetmaster manifestira]# cd .. [root@puppetmaster lutka]# mkdir moduli Ustvarite testni modul: [root@puppetmaster moduli]# mkdir -p test/manifesti/ [root@puppetmaster moduli]# mkdir test/files/ [root@puppetmaster moduli]# CD test/datoteke/ [root@puppetmaster datoteke]# vi test.txt Testna linija! [root@puppetmaster datoteke]# cd .. /manifesti/ Ustvarite testni razred za dostavo datoteke odjemalcu: [root@puppetmaster manifestira]# vi init.pp Test razreda { File { "/tmp/test.txt": ensure => prisoten, grupa => "koren", lastnik => "korenina", način => "0644", vir => "puppet:///test/test.txt" }
}
Lansiranje Puppet Masterja: [root@puppetmaster manifestira]# /etc/init.d/puppetmaster začetek Prepričaj se, da je port 8140 vklopljen.
Namestitev lutkovnega odjemalca: [root@puppetclient ~]# yum --enablerepo="epel,epel-puppet" namesti lutko
Spremenite gostitelje in dodajte naslednja dva zapisa: [root@puppetclient ~]# vi /itd/gostitelji 192.168.0.10 puppetmaster.leju.com lutka 192.168.0.100 puppetclient.leju.com
Nastavitev lutke: [root@puppetclient ~]# cd /itd/lutka/ [root@puppetclient lutka]# vi lutka.conf [glavno] # Imenik dnevnikov lutk. # Privzeta vrednost je '$vardir/log'. logdir = /var/log/puppet
# Kjer hranijo PID datoteke Puppet. # Privzeta vrednost je '$vardir/run'. rundir = /var/teči/lutka
# Kjer se hranijo SSL certifikati. # Privzeta vrednost je '$confdir/ssl'. ssldir = $vardir/SSL
[agent] # Datoteka, v katero lutka shranjuje seznam razredov # povezano z pridobljeno konfiguracijo. Lahko se naloži v # ločena izvršljiva datoteka ''lutka'' z uporabo ''--loadclass'' # možnosti. # Privzeta vrednost je '$confdir/classes.txt'. classfile = $vardir/classes.txt
# Kjer lutka predpomni lokalno konfiguracijo. An # razširitev, ki označuje format predpomnilnika, se samodejno doda. # Privzeta vrednost je '$confdir/localconfig'. localconfig = $vardir/localconfig
strežnik = puppetmaster.leju.com poročilo = resnično poslušaj = res
[root@puppetclient lutka]# vi namespaceauth.conf [lutkarski tekač] Dovoli puppetmaster.leju.com dovoli *.leju.com
[root@puppetclient lutka]# vi auth.conf Dodaj dovoli * na zadnjo vrstico ...... pot / avtentikacija katerokoli dovoli *
[root@puppetclient lutka]# CD Izvedite lutko: [root@puppetclient ~]# lutka --noop --test --sledi --debug Če Puppet Master ne nastavi: autosign=true, ga je treba izvesti v Puppet Master: [root@puppetmaster ~]# lutkovni certifikat -l puppetclient.leju.com [root@puppetmaster ~]# lutkovni certifikat -s puppetclient.leju.com Podpiši puppetclient.leju.com tako. Nato se vrnite k odjemalcu in izvedete tukaj: [root@puppetclient ~]# lutka --noop --test --sledi --debug Join --ne, konfiguracija se v resnici ne bo uporabljala na odjemalcu, večinoma se uporablja za testiranje, da se preveri, ali so v izpisu kakšne napake, in izvajanje brez napak: [root@puppetclient ~]# Puppetd --test --sledi --debug
Oglejte si dokument: [root@puppetclient ~]# ll /tmp/ skupaj 8 -rw-r--r-- 1 koren 11 Feb 25 22:35 test.txt Dokument je bil izdan.
Možno je tudi potisniti na Puppet Masterja: [root@puppetmaster ~]# Puppet Kick -D --gostitelj puppetclient.leju.com Sprožilni puppetclient.leju.com Pridobivanje statusa Status je uspeh puppetclient.leju.com končal z izhodno kodo 0 Končano Vrnitve 0 pomenijo, da je bila lutka na odjemalcu uspešno sprožena.
Nastavite lutko na samodejni zagon: chkconfig --level 2345 lutka na
Prilagodite Puppetmasterja za uporabo Passenger Passenger je razširitev Apache 2.x za upravljanje Rails ali Rack aplikacij v Apache. puppetmaster privzeto uporablja WEBrick za zagotavljanje datotečnih storitev; če imate veliko lutkastih odjemalcev, bo zmogljivost datotečnih storitev Puppetmasterja slaba, da bi bil Puppetmaster bolj robusten, zato uporabite Apache za zagotavljanje datotečnih storitev.
Namestitev: [root@puppetmaster ~]# yum install httpd httpd-devel ruby-devel rubygems Passenger 2.2.2 RHEL5 deluje brez težav. Dodaj foreman.repozitorij: [root@puppetmaster ~]# vi /etc/yum.repos.d/foreman.repo [nadzornik] ime=Foremanov stabilni repozitorij baseurl=http://yum.theforeman.org/stable gpgcheck=0 omogočeno=1 [root@puppetmaster ~]# Mmm, namesti rubygem-passenger-2.2.2-1 [root@puppetmaster ~]# rubygem-rack-1.0.1-1 [root@puppetmaster ~]# passenger-install-apache2-module
Namestitev Apache SSL modula: [root@puppetmaster ~]# Mmm, namesti mod_ssl
Za konfiguracijo aplikacije Puppet rack: mkdir -p /etc/puppet/rack/puppetmasterd/ mkdir /etc/puppet/rack/puppetmasterd/public /itd/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 /itd/puppet/rack/puppetmasterd/ chown puppet /itd/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 PassengerMaxVelikost bazena 30 Čas za praznjenje potnikov 1500 PassengerMaxRequests 1000 PotniškaHitrostPlina 120 RackAutoDetect izklopljen RailsAutoDetect izklopljen
[root@puppetmaster ~]# vi /etc/httpd/conf.d/puppetmasterd.conf # Verjetno želiš nastaviti te nastavitve PassengerHighPerformance na PassengerMaxPoolVelikost 12 Čas za praznjenje potnikov 1500 # PassengerMaxRequests 1000 PotniškaHitrostPlina 120 RackAutoDetect izklopljen RailsAutoDetect izklopljen
Poslušaj 8140
<VirtualHost *:8140> SSLEngine on SSLProtocol -ALL +SSLv3 +TLSv1 SSLCipherSuite VSI:! 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 # Če se Apache pritožuje zaradi neveljavnih podpisov na CRL, lahko poskusite onemogočiti # CRL preverjanje s komentarjem naslednje vrstice, vendar to ni priporočljivo. SSLCARevocationFile /var/lib/puppet/ssl/ca/ca_crl.pem SSLVerifyClient neobvezno SSLVerifyDepth 1 SSLOptions +StdEnvVars
# Naslednje glave odjemalcev omogočajo enako konfiguracijo za delovanje s Pound. 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 /itd/puppet/rack/puppetmasterd/public/ RackBaseURI / <Imenik /itd/lutka/stojalo/lutkar/> Možnosti Ni AllowOverride None Ukaz dovoli, zavrni dovoli od vseh </Directory> </VirtualHost>
Spremenite konfiguracijsko datoteko puppetmasterja in dodajte naslednji dve vrstici: [root@puppetmaster ~]# vi /etc/puppet/puppet.conf [mojster] ssl_client_header = SSL_CLIENT_S_DN ssl_client_verify_header = SSL_CLIENT_VERIFY
Spremeni /etc/sysconfig/puppetmaster: [root@puppetmaster ~]# vi /etc/sysconfig/puppetmaster # Na konec dodajte naslednjo vrstico: PUPPETMASTER_EXTRA_OPTS="--poroča v trgovini" Če morate poročati tako nadzorniku kot lutki nadzorni plošči, dodajte naslednjo vrstico: PUPPETMASTER_EXTRA_OPTS="--poroča skladišče, nadzornik, puppet_dashboard"
Ustavite storitev lutkarja in začnite storitev Apache: [root@puppetmaster ~]# /etc/init.d/puppetmaster stop [root@puppetmaster ~]# /etc/init.d/httpd začetek
Zagon ne zažene storitve puppetmaster, zagon pa zažene httpd storitev: [root@puppetmaster ~]# chkconfig --level 2345 puppetmaster off [root@puppetmaster ~]# chkconfig --level 2345 httpd on
Prepričaj se, da je port 8140 omogočen: [root@puppetmaster ~]# netstat -tunlp |grep 8140 tcp 0 0 :::8140 :::* POSLUŠAJ 9834/httpd
Testirajte na strani odjemalca, da vidite, ali je dnevnik napak natisnjen: [root@puppetclient ~]# Puppetd --test --sledi --debug |