1. Introduktion til Puppet
Systemadministratorer sidder ofte fast i en række gentagne opgaver: opgradering af pakker, håndtering af konfigurationsfiler, systemtjenester, cron-opgaver, tilføjelse af nye konfigurationer, rettelse af fejl osv. Disse opgaver er ofte gentagne og ineffektive, og den første reaktion på at løse dem er at automatisere dem, så brugerdefinerede scripts dukker op. På grund af miljøets kompleksitet udvikles brugerdefinerede scripts og applikationer gentagne gange og er vanskelige at få plads til flere platforme, og fleksibilitet og funktionalitet er svære at garantere, så automatiserede konfigurationsstyringsværktøjer som Puppet er opstået.
I open source-verdenen findes der mange konfigurationsværktøjer at vælge imellem, og nogle af nøgleprodukterne inden for dette område er:
Puppet (http://puppet.reductivelabs.com/): Et konfigurationsstyringsværktøj skrevet i Ruby, som bruger C/S-arkitekturen til at konfigurere klienten i deklarativt sprog. Cfengine (http://www.cfengine.org): Et af de første open source konfigurationsværktøjer, der blev udgivet, udgivet i 1993, det er også en C/S-arkitektur, som normalt bruges i uddannelsesinstitutioner. LCFG(http://www.lcfg.org/): Et konfigurationsstyringsværktøj til C/S-arkitekturer, der bruger XML til at definere konfigurationer. Bcfg2: Et konfigurationsstyringsværktøj til C/S-arkitektur skrevet i Python, som bruger specifikationer og klientsvar til at konfigurere målværten.
Dette dokument er dedikeret til at beskrive, hvordan du bruger Puppet til at administrere din vært, applikationer, baggrundsprogrammer og forskellige tjenester.
Om Puppet:
1. Hvad bruges Puppet til?
Puppet er et open source, Ruby-baseret systemkonfigurationsstyringsværktøj, der er afhængigt af C/S-implementeringsarkitekturen. Hovedudvikleren er Luke Kanies, som følger GPLv2-ophavsretslicensen. Siden 1997 har Kanies været involveret i UNIX-systemadministration, og udviklingen af Puppet udsprang af denne erfaring. Utilfreds med de tilgængelige konfigurationsværktøjer begyndte Kanies at udvikle værktøjer i Reductive-laboratoriet mellem 2001 og 2005. Snart udgav Reductive Labs deres flagskibsprodukt, Puppet.
2. Kendetegn ved Pupput
Mange systemkonfigurationsstyringsværktøjer fungerer meget ens, såsom cfengine. Hvad gør Puppet unik?
Puppets syntaks tillader dig at oprette et separat script, der bygger en bruger på alle dine målværter. Alle målværter vil fortolke og eksekvere modulet på skift ved hjælp af den syntaks, der gælder for det lokale system. For eksempel, hvis denne konfiguration udføres på en Red Hat-server, opret en bruger ved hjælp af useradd-kommandoen; Hvis denne konfiguration udføres på en FreeBSD-host, bruges adduser-kommandoen.
Et andet bemærkelsesværdigt aspekt ved Puppet er dens fleksibilitet. På grund af open source-softwarens natur kan du frit få adgang til Puppets kildekode, og hvis du støder på problemer og har muligheden, kan du ændre eller forbedre Puppets kode, så den passer til dit miljø. Derudover fortsætter fællesskabsudviklere og donorer med at forbedre Puppets kapaciteter. Et stort fællesskab af udviklere og brugere er også engageret i at levere dokumentation og teknisk support til Puppet.
Puppet er også let at skalere. Brugerdefineret pakkeunderstøttelse og særlige systemmiljøkonfigurationer kan hurtigt og nemt tilføjes til Puppet-installationsprogrammet.
3. Dukkens arbejdstilstand
Puppet er et konfigurationsstyringsværktøj med C/S-arkitektur, der installerer puppet-server-pakken (kendt som Puppet master) på en central server. Installer Puppet-klientsoftwaren (kaldet Puppet Client) på den målhost, der skal administreres. Når klienten forbinder til Puppet masteren, bliver konfigurationsfilen, der er defineret på Puppet masteren, kompileret og derefter kørt på klienten. Som standard kommunikerer hver klient med serveren hver halve time for at bekræfte opdateringen af konfigurationsinformationen. Hvis der er ny konfigurationsinformation eller konfigurationsinformation er ændret, vil konfigurationen blive genkompileret og offentliggjort til hver klient til eksekvering. Du kan også aktivt udløse en opdatering af konfigurationsinformationen på serveren for at tvinge hver klient til at konfigurere den. Hvis klientens konfigurationsinformation ændres, kan den hente den oprindelige konfiguration fra serveren for at rette den.
Konfigurationsstyring: Dukkeinstallation og brug (1)
4. Dukkens fremtid
Endelig er Puppet et ungt værktøj, der stadig er under udvikling og udvikling. Puppet-fællesskabet vokser hurtigt, og mange nye idéer bliver konstant indarbejdet, hvilket fører til udvikling, opdateringer og moduler, der præsenteres hver dag.
2. Konfiguration og installation (Puppet 2.6.4 CentOS 5.4 installation):
Konfigurér repositoryet på puppet-serveren og klienten: omdrejninger -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 Tilføj til: [epel-dukke] Navn=Epel Dukke baseurl=http://tmz.fedorapeople.org/repo/puppet/epel/5/$basearch/ enabled=0 gpgcheck=0
Tilføj repositoryet puppet.repo: [root@puppetmaster ~]# vi /etc/yum.repos.d/puppet.repo [dukketeater] name=Puppet Labs pakker baseurl=http://yum.puppetlabs.com/base/ enabled=0 gpgcheck=0
Dukkemesterinstallation: [root@puppetmaster ~]# yum --enablerepo=epel,epel-puppet install puppet-server
Ændr værter og tilføj følgende to poster: [root@puppetmaster ~]# vi /osv/værter 192.168.0.10 puppetmaster.leju.com dukke 192.168.0.100 puppetclient.leju.com
Konfiguration af Puppet: [root@puppetmaster ~]# cd /osv/dukke/ [root@puppetmaster dukke]# vi dukke.conf
[hoved] # Dukke-logbogen. # Standardværdien er '$vardir/log'. logdir = /var/log/puppet
# Hvor Puppet PID-filer opbevares. # Standardværdien er '$vardir/run'. rundir = /var/run/puppet
# Hvor SSL-certifikater opbevares. # Standardværdien er '$confdir/ssl'. ssldir = $vardir/ssl
[agent] # Filen, hvor Puppetd gemmer en liste over klasser # forbundet med den genvundne konfiguration. Kan indlæses # den separate ''puppet''-eksekverbare fil ved brug af ''--loadclasses'' # mulighed. # Standardværdien er '$confdir/classes.txt'. classfile = $vardir/classes.txt
# Hvor Puppetd gemmer den lokale konfiguration. En #-udvidelsen, der angiver, at cache-formatet tilføjes automatisk. # Standardværdien er '$confdir/localconfig'. localconfig = $vardir/localconfig server = puppetmaster.leju.com rapport = sandt lyt = sandt
[mester] ssl_client_header = SSL_CLIENT_S_DN ssl_client_verify_header = SSL_CLIENT_VERIFY autosign = sandt Rapporter = butik
[root@puppetmaster dukke]# vi fileserver.conf [filer] sti /etc/puppet/files tillad *
[moduler] tillad *
[plugins] tillad *
[root@puppetmaster dukke]# mkdir /etc/puppet/files
[root@puppetmaster dukke]# CD-manifester/ Opret site.pp, som er dukkeindgangskonfigurationsfilen: [root@puppetmaster manifesterer]# vi site.pp importer "modules.pp" importer "roles.pp" importer "nodes.pp"
# Generelle indstillinger for standardtyper Exec { path => "/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin" }
filebucket { main: server => "puppetmaster.leju.com" } Fil { backup => main }
Opret modules.pp for at importere moduler: [root@puppetmaster manifesterer]# vi moduler.pp import "test"
Opret roles.pp for at definere serverroller: [root@puppetmaster manifesterer]# vi roller.pp Klasse baseklasse { Inkluder test
}
Opret nodes.pp for at konfigurere servernoderne: [root@puppetmaster manifesterer]# vi noder.pp node 'basenode' { Inkluder baseklasse
}
Node 'puppetclient.leju.com' arver basenode { tag("test")
}
Node 'puppetmaster.leju.com' arver basenode { tag("test")
}
[root@puppetmaster manifesterer]# CD .. [root@puppetmaster dukke]# mkdir-moduler Opret et testmodul: [root@puppetmaster moduler]# mkdir -p test/manifests/ [root@puppetmaster moduler]# mkdir test/filer/ [root@puppetmaster moduler]# cd-test/filer/ [root@puppetmaster filer]# vi test.txt Testlinje! [root@puppetmaster filer]# CD .. /manifester/ Opret en testklasse til at levere en fil til klienten: [root@puppetmaster manifesterer]# vi init.pp Klassetest { fil { "/tmp/test.txt": ensure => præsenteret, gruppe => "rod", ejer => "rod", mode => "0644", kilde => "puppet:///test/test.txt" }
}
Opsendelse af Puppet Master: [root@puppetmaster manifesterer]# /etc/init.d/puppetmaster start Sørg for, at port 8140 er oppe.
Installation af dukkeklient: [root@puppetclient ~]# yum --enablerepo="epel,epel-puppet" install puppet
Ændr værter og tilføj følgende to poster: [root@puppetclient ~]# vi /osv/værter 192.168.0.10 puppetmaster.leju.com dukke 192.168.0.100 puppetclient.leju.com
Konfiguration af dukken: [root@puppetclient ~]# cd /osv/dukke/ [root@puppetclient dukke]# vi dukke.conf [hoved] # Dukke-logbogen. # Standardværdien er '$vardir/log'. logdir = /var/log/puppet
# Hvor Puppet PID-filer opbevares. # Standardværdien er '$vardir/run'. rundir = /var/run/puppet
# Hvor SSL-certifikater opbevares. # Standardværdien er '$confdir/ssl'. ssldir = $vardir/ssl
[agent] # Filen, hvor Puppetd gemmer en liste over klasser # forbundet med den genvundne konfiguration. Kan indlæses # den separate ''puppet''-eksekverbare fil ved brug af ''--loadclasses'' # mulighed. # Standardværdien er '$confdir/classes.txt'. classfile = $vardir/classes.txt
# Hvor Puppetd gemmer den lokale konfiguration. En #-udvidelsen, der angiver, at cache-formatet tilføjes automatisk. # Standardværdien er '$confdir/localconfig'. localconfig = $vardir/localconfig
server = puppetmaster.leju.com rapport = sandt lyt = sandt
[root@puppetclient dukke]# vi namespaceauth.conf [dukkeløber] Tillad puppetmaster.leju.com tillad *.leju.com
[root@puppetclient dukke]# vi auth.conf Tilføj allow * til den sidste linje ...... Sti / godkend enhver tillad *
[root@puppetclient dukke]# cd Udfør marionetten: [root@puppetclient ~]# dukke --nej --test --trace --fejlfinding Hvis Puppet Master ikke sætter: autosign=true, skal det udføres i Puppet Master: [root@puppetmaster ~]# dukke-cert -l puppetclient.leju.com [root@puppetmaster ~]# dukkecert -s puppetclient.leju.com Skriv puppetclient.leju.com sådan her. Gå derefter tilbage til klienten for at udføre her: [root@puppetclient ~]# dukke --nej --test --trace --fejlfinding Join --nej, konfigurationen vil ikke rigtig blive anvendt på klienten, men bruges primært til test, for at se om der er fejl i udskriften, og udfør uden fejl: [root@puppetclient ~]# dukkestyret --test --trace --debug
Se dokumentet: [root@puppetclient ~]# ll /tmp/ i alt 8 -rw-r--r-- 1 rodrod 11 feb 25 22:35 test.txt Dokumentet er blevet udstedt.
Det er også muligt at presse på Puppet Master: [root@puppetmaster ~]# dukkespark -d --vært puppetclient.leju.com At udløse puppetclient.leju.com At få status Status er succes puppetclient.leju.com færdig med udgangskode 0 Færdig At returnere 0 indikerer, at puppetd på klienten blev udløst med succes.
Sæt dukken til at starte auto-start: chkconfig --niveau 2345 dukke på
Modificerer dukkemester til at bruge Passager Passenger er en udvidelse af Apache 2.x til kørsel af skinner eller tandstangsapplikationer i Apache. puppetmaster bruger WEBrick som standard til at levere filtjenester; hvis du har mange puppet-klienter, vil puppetmasters filserviceydelse være dårlig for at gøre puppetmaster mere robust, så brug Apache til at levere filtjenester.
Installation: [root@puppetmaster ~]# yum install httpd httpd-devel ruby-devel rubygems Passenger 2.2.2 RHEL5 fungerer fint. Tilføj foreman.repo repository: [root@puppetmaster ~]# vi /etc/yum.repos.d/foreman.repo [formand] name=Foreman stabilt repository baseurl=http://yum.theforeman.org/stable gpgcheck=0 enabled=1 [root@puppetmaster ~]# yum installer rubygem-passenger-2.2.2-1 [root@puppetmaster ~]# rubygem-rack-1.0.1-1 [root@puppetmaster ~]# passenger-install-apache2-module
Installation af Apache SSL-modulet: [root@puppetmaster ~]# nam installer mod_ssl
For at konfigurere Puppet-rackapplikationen: 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 PassagerRuby /usr/bin/ruby PassagerMaxPoolStørrelse 30 PassengerPoolIdleTime 1500 PassengerMaxRequests 1000 PassengerStatThrottleRate 120 RackAutoDetect Off RailsAutoDetect Slukket
[root@puppetmaster ~]# vi /etc/httpd/conf.d/puppetmasterd.conf # du vil sikkert justere disse indstillinger PassagerHighPerformance på PassagerMaxPoolStørrelse 12 PassengerPoolIdleTime 1500 # PassagerMaxAnmodninger 1000 PassengerStatThrottleRate 120 RackAutoDetect Off RailsAutoDetect Slukket
Lyt 8140
<VirtualHost *:8140> SSLEngine på SSLProtocol -ALL +SSLv3 +TLSv1 SSLCipherSuite ALLE:! 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 # Hvis Apache klager over ugyldige signaturer på CRL, kan du prøve at deaktivere # CRL tjekker ved at kommentere næste linje, men det anbefales ikke. SSLCARevocationFile /var/lib/puppet/ssl/ca/ca_crl.pem SSLVerifyClient valgfrit SSLVerifyDepth 1 SSLOptions +StdEnvVars
# Følgende klientheadere gør det muligt at bruge samme konfiguration med 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 /etc/puppet/rack/puppetmasterd/public/ RackBaseURI / <Mappe /etc/puppet/rack/puppetmasterd/> Muligheder Ingen TilladOverride Ingen Ordre tillad, afvis Tillad fra alle </Directory> </VirtualHost>
Ændr puppetmaster-konfigurationsfilen for at tilføje følgende to linjer: [root@puppetmaster ~]# vi /etc/puppet/puppet.conf [mester] ssl_client_header = SSL_CLIENT_S_DN ssl_client_verify_header = SSL_CLIENT_VERIFY
Ændr /etc/sysconfig/puppetmaster: [root@puppetmaster ~]# vi /etc/sysconfig/puppetmaster # Tilføj følgende linje til sidst: PUPPETMASTER_EXTRA_OPTS="--rapporterer butik" Hvis du skal rapportere til både foreman og puppet-dashboard, tilføj følgende linje: PUPPETMASTER_EXTRA_OPTS="--rapporterer butik, formand, puppet_dashboard"
Stop dukkemestertjenesten og start apache-tjenesten: [root@puppetmaster ~]# /etc/init.d/puppetmaster stop [root@puppetmaster ~]# /etc/init.d/httpd start
Boot starter ikke puppetmaster-tjenesten, boot starter httpd-tjenesten: [root@puppetmaster ~]# chkconfig --niveau 2345 dukkemester off [root@puppetmaster ~]# chkconfig --level 2345 httpd on
Sørg for, at port 8140 er aktiveret: [root@puppetmaster ~]# netstat -tunlp |grep 8140 TCP 0 0 :::8140 :::* LYT 9834/httpd
Test på klientsiden for at se, om fejlloggen er printet: [root@puppetclient ~]# dukkestyret --test --trace --debug |