1. Einführung in Puppet
Systemadministratoren stecken oft in einer Reihe von sich wiederholenden Aufgaben fest: Pakete aktualisieren, Konfigurationsdateien verwalten, Systemdienste, cron-Aufgaben, neue Konfigurationen hinzufügen, Fehler beheben usw. Diese Aufgaben sind oft repetitiv und ineffizient, und die erste Reaktion auf deren Lösung ist die Automatisierung, sodass benutzerdefinierte Skripte erscheinen. Aufgrund der Komplexität der Umgebung werden immer wieder benutzerdefinierte Skripte und Anwendungen entwickelt und es ist schwierig, mehrere Plattformen unterzubringen, und Flexibilität und Funktionalität sind schwer zu garantieren, weshalb automatisierte Konfigurationsmanagement-Tools wie Puppet entstanden sind.
In der Open-Source-Welt gibt es viele Konfigurationswerkzeuge zur Auswahl, und einige der wichtigsten Produkte in diesem Bereich sind:
Puppet (http://puppet.reductivelabs.com/): Ein in Ruby geschriebenes Konfigurationsmanagement-Tool, das die C/S-Architektur nutzt, um den Client in deklarativer Sprache zu konfigurieren. Cfengine (http://www.cfengine.org): Eines der ersten Open-Source-Konfigurationstools, das 1993 veröffentlicht wurde, ist ebenfalls eine C/S-Architektur, die üblicherweise in Bildungseinrichtungen verwendet wird. LCFG(http://www.lcfg.org/): Ein Konfigurationsmanagement-Tool für C/S-Architekturen, das XML zur Definition von Konfigurationen verwendet. Bcfg2: Ein Konfigurationsmanagement-Tool für die C/S-Architektur, geschrieben in Python, das Spezifikationen und Client-Antworten verwendet, um den Zielhost zu konfigurieren.
Dieses Dokument beschreibt, wie man Puppet nutzt, um den Host, Anwendungen, Hintergrundprogramme und verschiedene Dienste zu verwalten.
Über Puppet:
1. Wofür wird Puppet verwendet?
Puppet ist ein Open-Source-basiertes Ruby-basiertes Systemkonfigurationsmanagement-Tool, das auf der C/S-Deployment-Architektur basiert. Der Hauptentwickler ist Luke Kanies, der der GPLv2-Urheberrechtslizenz folgt. Seit 1997 ist Kanies in der UNIX-Systemadministration tätig, und die Entwicklung von Puppet entstand aus dieser Erfahrung. Unzufrieden mit den verfügbaren Konfigurationswerkzeugen begann Kanies zwischen 2001 und 2005 im Reduktivlabor mit der Entwicklung von Werkzeugen. Bald darauf brachte Reductive Labs ihr Flaggschiffprodukt Puppet heraus.
2. Merkmale von Pupput
Viele Systemkonfigurationsmanagement-Tools funktionieren sehr ähnlich, wie zum Beispiel cfengine. Was macht Puppet einzigartig?
Die Syntax von Puppet erlaubt es dir, ein separates Skript zu erstellen, um einen Benutzer auf allen deinen Zielhosts zu erstellen. Alle Ziel-Hosts interpretieren und führen das Modul nacheinander mit der für das lokalen System anwendbaren Syntax aus. Wenn diese Konfiguration beispielsweise auf einem Red Hat-Server ausgeführt wird, erstellen Sie einen Benutzer mit dem Befehl useradd; Wenn diese Konfiguration auf einem FreeBSD-Host ausgeführt wird, wird der Befehl adduser verwendet.
Ein weiterer bemerkenswerter Aspekt von Puppet ist seine Flexibilität. Aufgrund der Natur von Open-Source-Software können Sie den Quellcode von Puppet frei erhalten, und wenn Sie auf Probleme stoßen und die Möglichkeit haben, können Sie den Code von Puppet an Ihre Umgebung anpassen oder verbessern. Darüber hinaus verbessern Community-Entwickler und Spender weiterhin die Fähigkeiten von Puppet. Eine große Community von Entwicklern und Nutzern engagiert sich ebenfalls für die Bereitstellung von Dokumentation und technischem Support für Puppet.
Puppet ist auch leicht zu skalieren. Unterstützung für benutzerdefinierte Pakete und spezielle Systemumgebungskonfigurationen können schnell und einfach zum Puppet-Installer hinzugefügt werden.
3. Puppets Arbeitsmodus
Puppet ist ein C/S-Architektur-Konfigurationsmanagement-Tool, das das Puppet-Server-Paket (bekannt als Puppet Master) auf einem zentralen Server installiert. Installiere die Puppet-Client-Software (genannt Puppet Client) auf dem Zielhost, der verwaltet werden muss. Wenn der Client sich mit dem Puppet Master verbindet, wird die auf dem Puppet Master definierte Konfigurationsdatei kompiliert und anschließend auf dem Client ausgeführt. Standardmäßig kommuniziert jeder Client alle halbe Stunde mit dem Server, um die Aktualisierung der Konfigurationsinformationen zu bestätigen. Wenn neue Konfigurationsinformationen vorliegen oder sich die Konfigurationsinformationen geändert haben, wird die Konfiguration neu kompiliert und an jeden Client zur Ausführung veröffentlicht. Du kannst auch aktiv eine Aktualisierung der Konfigurationsinformationen auf dem Server auslösen, um jeden Client dazu zu zwingen, sie zu konfigurieren. Wenn die Konfigurationsinformationen des Clients geändert werden, kann er die ursprüngliche Konfiguration vom Server abrufen, um diese zu korrigieren.
Konfigurationsmanagement: Puppeninstallation und -nutzung (1)
4. Die Zukunft von Puppet
Schließlich ist Puppet ein junges Werkzeug, das sich noch in Entwicklung befindet. Die Puppet-Community wächst schnell, und viele neue Ideen werden ständig eingeführt, was Entwicklungen, Aktualisierungen und Module anregt, die täglich präsentiert werden.
2. Konfiguration und Installation (Puppet 2.6.4 CentOS 5.4 Installation):
Konfigurieren Sie das Repository auf dem Puppet-Server und Client: U/min – 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 Hinzufügen zu: [Epel-Puppe] name=Epel Puppe baseurl=http://tmz.fedorapeople.org/repo/puppet/epel/5/$basearch/ aktiviert=0 gpgcheck=0
Füge das Repository puppet.repo hinzu: [root@puppetmaster ~]# vi /etc/yum.repos.d/puppet.repo [Puppetlabs] name=Puppet Labs Pakete baseurl=http://yum.puppetlabs.com/base/ aktiviert=0 gpgcheck=0
Puppet Master-Installation: [root@puppetmaster ~]# yum --enablerepo=epel,epel-puppet install puppet-server
Ändere Hosts und füge die folgenden zwei Datensätze hinzu: [root@puppetmaster ~]# vi /etc/hosts 192.168.0.10 puppetmaster.leju.com Puppe 192.168.0.100 puppetclient.leju.com
Puppet konfigurieren: [root@puppetmaster ~]# CD /etc/puppet/ [root@puppetmaster Puppe]# vi puppet.conf
[Haupt] # Das Puppet-Logverzeichnis. # Der Standardwert ist '$vardir/log'. logdir = /var/log/puppet
# Wo Puppet-PID-Dateien aufbewahrt werden. # Der Standardwert ist '$vardir/run'. rundir = /var/run/puppet
# Wo SSL-Zertifikate aufbewahrt werden. # Der Standardwert ist '$confdir/ssl'. ssldir = $vardir/ssl
[Agent] # Die Akte, in der Puppetd eine Liste der Klassen speichert # verbunden mit der wiedergefundenen Konfiguration. Kann geladen werden # die separate ''puppet''-ausführbare Datei mit der ''--loadclasses'' # Option. # Der Standardwert ist '$confdir/classes.txt'. classfile = $vardir/classes.txt
# Wo Puppetd die lokale Konfiguration zwischengespeichert hat. Ein #-Erweiterung, die das Cache-Format angibt, wird automatisch hinzugefügt. # Der Standardwert ist '$confdir/localconfig'. localconfig = $vardir/localconfig Server = puppetmaster.leju.com Bericht = wahr HÖREN = WAHR
[Meister] ssl_client_header = SSL_CLIENT_S_DN ssl_client_verify_header = SSL_CLIENT_VERIFY AutoSign = wahr Berichte = Laden
[root@puppetmaster Puppet]# vi fileserver.conf [Dateien] path /etc/puppet/files erlauben *
[Module] erlauben *
[Plugins] erlauben *
[root@puppetmaster Puppe]# mkdir /etc/puppet/files
[root@puppetmaster Puppe]# CD-Manifestationen/ Create site.pp, die die Puppet-Eintrags-Konfigurationsdatei ist: [root@puppetmaster manifestiert]# vi site.pp importieren Sie "modules.pp" importiere "roles.pp" importiere "nodes.pp"
# Allgemeine Einstellungen für Standardtypen Exec { path => "/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin" }
filebucket { main: server => "puppetmaster.leju.com" } Datei { backup => main }
Erstellen Sie modules.pp, um Module zu importieren: [root@puppetmaster manifestiert]# vi modules.pp import "test"
Erstellen: roles.pp, um Server-Rollen zu definieren: [root@puppetmaster manifestiert sich]# vi rollen.pp Klassenbasisklasse { Test einbauen
}
Erstellen Sie nodes.pp, um die Serverknoten zu konfigurieren: [root@puppetmaster manifestiert]# vi nodes.pp Knoten 'basenode' { Include Baseclass
}
Knoten 'puppetclient.leju.com' erbt Basenode { tag("test")
}
Knoten 'puppetmaster.leju.com' erbt Basenode { tag("test")
}
[root@puppetmaster manifestiert sich]# CD .. [root@puppetmaster Puppe]# mkdir-Module Erstellen Sie ein Testmodul: [root@puppetmaster Module]# mkdir -p Test/Manifests/ [root@puppetmaster Module]# mkdir Test/Dateien/ [root@puppetmaster Module]# CD-Test/Dateien/ [root@puppetmaster Dateien]# vi test.txt Testlinie! [root@puppetmaster Dateien]# CD .. /Manifeste/ Erstellen Sie eine Testklasse, um eine Datei an den Client zu liefern: [root@puppetmaster manifestiert sich]# vi init.pp Klassentest { file { "/tmp/test.txt": ensure => präsentieren, Gruppe => "Wurzel", Besitzer => "Wurzel", mode => "0644", Quelle => "puppet:///test/test.txt" }
}
Puppet Master starten: [root@puppetmaster manifestiert]# /etc/init.d/puppetmaster start Stelle sicher, dass Port 8140 aktiv ist.
Puppet-Client-Installation: [root@puppetclient ~]# yum --enablerepo="epel,epel-puppet" install puppet puppet
Ändere Hosts und füge die folgenden zwei Datensätze hinzu: [root@puppetclient ~]# vi /etc/hosts 192.168.0.10 puppetmaster.leju.com Puppe 192.168.0.100 puppetclient.leju.com
Konfiguration der Puppe: [root@puppetclient ~]# CD /etc/Puppe/ [root@puppetclient Puppe]# vi puppet.conf [Haupt] # Das Puppet-Logverzeichnis. # Der Standardwert ist '$vardir/log'. logdir = /var/log/puppet
# Wo Puppet-PID-Dateien aufbewahrt werden. # Der Standardwert ist '$vardir/run'. rundir = /var/run/puppet
# Wo SSL-Zertifikate aufbewahrt werden. # Der Standardwert ist '$confdir/ssl'. ssldir = $vardir/ssl
[Agent] # Die Akte, in der Puppetd eine Liste der Klassen speichert # verbunden mit der wiedergefundenen Konfiguration. Kann geladen werden # die separate ''puppet''-ausführbare Datei mit der ''--loadclasses'' # Option. # Der Standardwert ist '$confdir/classes.txt'. classfile = $vardir/classes.txt
# Wo Puppetd die lokale Konfiguration zwischengespeichert hat. Ein #-Erweiterung, die das Cache-Format angibt, wird automatisch hinzugefügt. # Der Standardwert ist '$confdir/localconfig'. localconfig = $vardir/localconfig
Server = puppetmaster.leju.com Bericht = wahr HÖREN = WAHR
[root@puppetclient Puppet]# vi namespaceauth.conf [Puppenläufer] Erlaubt puppetmaster.leju.com erlauben *.leju.com
[root@puppetclient Puppe]# vi auth.conf Fügen Sie erlaubt * in die letzte Zeile hinzu ...... Weg / Autorisieren erlauben *
[root@puppetclient Puppe]# CD Puppe ausführen: [root@puppetclient ~]# Puppet --nein --Test --Trace --Debug Wenn Puppet Master nicht setzt: autosign=true, muss es in Puppet Master ausgeführt werden: [root@puppetmaster ~]# Puppen-Zertifikat -l puppetclient.leju.com [root@puppetmaster ~]# Puppen-Zertifikat -s puppetclient.leju.com Unterschreiben Sie puppetclient.leju.com so. Dann gehe zurück zum Client, um hier auszuführen: [root@puppetclient ~]# Puppet --nein --Test --Trace --Debug Join --noop, die Konfiguration wird nicht wirklich auf den Client angewendet, sondern hauptsächlich zum Testen verwendet, um zu sehen, ob Fehler im Ausdruck vorliegen, und ohne Fehler ausgeführt werden: [root@puppetclient ~]# Puppet --Test --Trace --Debug
Sehen Sie sich das Dokument an: [root@puppetclient ~]# ll /tmp/ Insgesamt 8 -rw-r--r-- 1 Wurzelwurzel 11 Feb 25 22:35 test.txt Das Dokument wurde herausgegeben.
Es ist auch möglich, Puppet Master zu pushen: [root@puppetmaster ~]# Puppet Kick -d --Moderator puppetclient.leju.com Auslösende puppetclient.leju.com Status erhalten Status ist Erfolg puppetclient.leju.com mit Ausfahrtscode 0 fertig Fertig Wenn 0 zurückgegeben wird, wird angezeigt, dass Puppet auf dem Client erfolgreich ausgelöst wurde.
Stell die Puppe auf Auto-Start-Start ein: chkconfig --level 2345 puppet on
Puppetmaster modifizieren, um Passenger zu verwenden Passenger ist eine Erweiterung von Apache 2.x für den Betrieb von Schienen- oder Zahnradanwendungen in Apache. puppetmaster verwendet standardmäßig WEBrick, um Dateidienste bereitzustellen; wenn du viele Puppet-Clients hast, wird die Dateileistung von Puppetmaster schlecht sein, um Puppetmaster robuster zu machen, also nutze Apache für Dateidienste.
Installation: [root@puppetmaster ~]# yum install httpd httpd-devel ruby-devel rubygems Passenger 2.2.2 RHEL5 funktioniert einwandfrei. Repository für foreman.repo hinzufügen: [root@puppetmaster ~]# vi /etc/yum.repos.d/foreman.repo [Vorarbeiter] name=Foreman Stable Repository baseurl=http://yum.theforeman.org/stable gpgcheck=0 enabled=1 [root@puppetmaster ~]# yum install rubygem-passenger-2.2.2-1 [root@puppetmaster ~]# rubygem-rack-1.0.1-1 [root@puppetmaster ~]# passenger-install-apache2-module
Installation des Apache SSL-Moduls: [root@puppetmaster ~]# yum install mod_ssl
Um die Puppet-Rack-Anwendung zu konfigurieren: 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 PassagierMaxPoolGröße 30 PassagierpoolLeerlaufzeit 1500 PassagierMaxAnfragen 1000 PassagierStatThrottleRate 120 RackAutoDetect Off RailsAutoDetect Off
[root@puppetmaster ~]# vi /etc/httpd/conf.d/puppetmasterd.conf # Du willst diese Einstellungen wahrscheinlich abstimmen PassagierHighPerformance auf PassagierMaxPoolGröße 12 PassagierpoolLeerlaufzeit 1500 # PassagierMaxAnfragen 1000 PassagierStatThrottleRate 120 RackAutoDetect Off RailsAutoDetect Off
Hören Sie 8140
<VirtualHost *:8140> SSLEngine auf SSLProtocol -ALL +SSLv3 +TLSv1 SSLCipherSuite ALLE:! ADH:RC4+RSA:+HOCH:+MITTEL:-NIEDRIG:-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 # Wenn Apache sich über ungültige Signaturen auf der CRL beschwert, kannst du versuchen, sie zu deaktivieren # CRL überprüft, indem man die nächste Zeile kommentiert, aber das wird nicht empfohlen. SSLCARevocationFile /var/lib/puppet/ssl/ca/ca_crl.pem SSLVerifyClient optional SSLVerifyDepth 1 SSLOptions +StdEnvVars
# Die folgenden Client-Header ermöglichen die gleiche Konfiguration mit 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 / <Verzeichnis /etc/puppet/rack/puppetmasterd/> Optionen Keine Erlauben Keine Übersteuerung Befehl erlauben, verweigern Erlauben von allen </Directory> </VirtualHost>
Ändern Sie die Puppetmaster-Konfigurationsdatei, um die folgenden zwei Zeilen hinzuzufügen: [root@puppetmaster ~]# vi /etc/puppet/puppet.conf [Meister] ssl_client_header = SSL_CLIENT_S_DN ssl_client_verify_header = SSL_CLIENT_VERIFY
Modifiziere /etc/sysconfig/puppetmaster: [root@puppetmaster ~]# vi /etc/sysconfig/puppetmaster # Füge am Ende folgende Zeile hinzu: PUPPETMASTER_EXTRA_OPTS="--meldet Store" Wenn Sie sowohl dem Vorarbeiter als auch dem Puppet-Dashboard Bericht erstatten müssen, fügen Sie folgende Zeile hinzu: PUPPETMASTER_EXTRA_OPTS="--meldet Laden, Vorarbeiter, puppet_dashboard"
Beenden Sie den Puppetmaster-Service und starten Sie den Apache-Service: [root@puppetmaster ~]# /etc/init.d/puppetmaster stopp [root@puppetmaster ~]# /etc/init.d/httpd start
Boot startet den Puppetmaster-Dienst nicht, der Boot startet den httpd-Dienst: [root@puppetmaster ~]# chkconfig --Level 2345 Puppetmaster aus [root@puppetmaster ~]# chkconfig --level 2345 httpd on
Stelle sicher, dass Port 8140 aktiviert ist: [root@puppetmaster ~]# netstat -tunlp |grep 8140 TCP 0 0 :::8140 :::* HÖREN 9834/httpd
Testen Sie auf der Client-Seite, ob das Fehlerprotokoll ausgedruckt wurde: [root@puppetclient ~]# Puppet --Test --Trace --Debug |