So installieren Sie Puppet zur Verwaltung Ihrer Serverinfrastruktur

[.note] #Note: Eine neuere Version dieses Tutorials, die Puppet Server anstelle von Puppet with Passenger verwendet, finden Sie hier:How To Install Puppet 4 in a Master-Agent Setup on Ubuntu 14.04.
#

Einführung

Puppet von Puppet Labs ist ein Konfigurationsverwaltungstool, mit dem Systemadministratoren die Bereitstellung, Konfiguration und Verwaltung einer Serverinfrastruktur automatisieren können. Durch vorausschauende Planung und Verwendung von Konfigurationsverwaltungstools wie Puppet können Sie die Zeit für die Wiederholung grundlegender Aufgaben verkürzen und sicherstellen, dass Ihre Konfigurationen in Ihrer gesamten Infrastruktur konsistent und genau sind. Sobald Sie den Dreh raus haben, Ihre Server mit Puppet und anderen Automatisierungstools zu verwalten, haben Sie mehr Zeit, um andere Aspekte Ihres gesamten Setups zu verbessern.

Puppet gibt es in zwei Varianten: Puppet Enterprise und Open Source Puppet. Es läuft auf den meisten Linux-Distributionen, verschiedenen UNIX-Plattformen und Windows.

In diesem Tutorial erfahren Sie, wie Sie Open Source Puppet in einem Agent / Master-Setup installieren. Dieses Setup besteht aus einem zentralenPuppet Master-Server, auf dem alle Ihre Konfigurationsdaten verwaltet und verteilt werden. Alle verbleibenden Server sindPuppet Agent-Knoten, die vom Puppet Master-Server konfiguriert werden können.

Voraussetzungen

Um diesem Tutorial folgen zu können, müssen Sie über Root-Zugriff auf alle Server verfügen, mit denen Sie Puppet konfigurieren möchten. Sie müssen außerdem ein neues Ubuntu 14.04 VPS erstellen, um als Puppet-Masterserver zu fungieren. Wenn Sie über keine vorhandene Infrastruktur verfügen, können Sie die Beispielinfrastruktur (siehe unten) anhand des Lernprogramms für die DNS-Einrichtung neu erstellen.

Bevor wir mit der Installation von Puppet beginnen, stellen Sie sicher, dass Sie die folgenden Voraussetzungen erfüllen:

  • Private Network DNS: Vorwärts- und Rückwärts-DNS muss konfiguriert sein und jeder Server muss einen eindeutigen Hostnamen haben. Hier ist ein Tutorial zuconfigure your own private network DNS server. Wenn Sie kein DNS konfiguriert haben, müssen Sie die Dateihostsfür die Namensauflösung verwenden. Wir gehen davon aus, dass Sie Ihr privates Netzwerk für die Kommunikation innerhalb Ihrer Infrastruktur nutzen.

  • Firewall Open Ports: Der Puppet Master muss über Port 8140 erreichbar sein. Wenn Ihre Firewall zu restriktiv ist, lesen Sie inUFW Tutorial nach, wie Sie eingehende Anforderungen an Port 8140 zulassen.

Beispiel Infrastruktur

Wir werden die folgende Infrastruktur verwenden, um zu demonstrieren, wie Puppet eingerichtet wird:

Hostname Role Privater FQDN

host1

Generisches Ubuntu 14.04 VPS

host1.nyc2.example.com

host2

Generisches Ubuntu 14.04 VPS

host2.nyc2.example.com

ns1

Primärer Nameserver

ns1.nyc2.example.com

ns2

Sekundärer Nameserver

ns2.nyc2.example.com

Der Marionettenagent wird auf allen diesen Hosts installiert. Auf diese Hosts wird über ihre privaten Netzwerkschnittstellen verwiesen, die der Subdomäne ".nyc2.example.com" in DNS zugeordnet sind. Dies ist dieselbe Infrastruktur, die im vorausgesetzten Lernprogramm beschrieben wird:How To Configure BIND as a Private Network DNS Server on Ubuntu 14.04
.

Sobald Sie alle Voraussetzungen erfüllt haben, können Sie den Puppet-Masterserver erstellen.

Puppet Master Server erstellen

Erstellen Sie eine neue x64-VPS vonUbuntu 14.04, wobei Sie als Hostnamen "Marionette" verwenden. Fügen Sie das private Netzwerk mit den folgenden Details zu Ihrem DNS hinzu:

Hostname Role Privater FQDN

Marionette

Puppenspieler

puppet.nyc2.example.com

Wenn Sie gerade Ihr DNS eingerichtet haben und nicht sicher sind, wie Sie Ihren Host zu DNS hinzufügen sollen, lesen Sie den AbschnittMaintaining DNS Recordsim DNS-Lernprogramm. Im Wesentlichen müssen Sie einen "A" - und einen "PTR" -Datensatz hinzufügen und dem neuen Host erlauben, rekursive Abfragen durchzuführen. Stellen Sie außerdem sicher, dass Sie Ihre Suchdomäne so konfigurieren, dass Ihre Server kurze Hostnamen zum gegenseitigen Nachschlagen verwenden können.

Die Verwendung von "Puppet" als Hostname des Puppet-Masters vereinfacht die Agentenkonfiguration geringfügig, da dies der Standardname ist, den Agents verwenden, wenn sie versuchen, eine Verbindung zum Master herzustellen.

Jetzt müssen wir NTP einrichten.

Installieren Sie NTP

Da der Puppet-Master-Server als Zertifizierungsstelle für Agentenknoten fungiert, muss er die genaue Systemzeit einhalten, um mögliche Probleme bei der Ausstellung von Agentenzertifikaten zu vermeiden. Bei zeitlichen Unstimmigkeiten können Zertifikate abgelaufen sein. Zu diesem Zweck verwenden wir das Network Time Protocol (NTP).

Führen Sie zunächst eine einmalige Synchronisierung mit dem Befehlntpdate durch:

sudo ntpdate pool.ntp.org

Ihre Systemzeit wird aktualisiert, Sie müssen jedoch den NTP-Dämon installieren, um die Zeit automatisch zu aktualisieren und die Zeitverschiebung zu minimieren. Installieren Sie es mit dem folgenden apt-Befehl:

sudo apt-get update && sudo apt-get -y install ntp

Es ist üblich, die NTP-Konfiguration so zu aktualisieren, dass Pools verwendet werden, die sich geografisch näher an Ihrem NTP-Server befinden. Wechseln Sie in einem Webbrowser zuNTP Pool Project und suchen Sie nachpool zone, die sich geografisch in der Nähe des von Ihnen verwendeten Rechenzentrums befinden. In unserem Beispiel wird der Pool der Vereinigten Staaten (http://www.pool.ntp.org/zone/us) verwendet, da sich die Server in einem New Yorker Rechenzentrum befinden.

Öffnen Sientp.conf zum Bearbeiten:

sudo vi /etc/ntp.conf

Fügen Sie die Zeitserver von der Seite "NTP-Pool-Projekt" oben in der Datei hinzu:

server 0.us.pool.ntp.org
server 1.us.pool.ntp.org
server 2.us.pool.ntp.org
server 3.us.pool.ntp.org

Speichern und schließen. Starten Sie NTP neu, um die neuen Zeitserver hinzuzufügen.

sudo service ntp restart

Jetzt, da unser Server die genaue Zeit anzeigt, installieren wir die Puppet Master-Software.

Installieren Sie Puppet Master

Es gibt verschiedene Möglichkeiten, Open Source Puppet zu installieren. Wir werden das Debian-Paketpuppetmaster-passenger verwenden, das von Puppet Labs bereitgestellt wird. Das Paketpuppetmaster-passengerenthält den produktionsbereiten Webserver Puppet Master plus (Passenger with Apache), wodurch im Vergleich zur Verwendung des Basispaketspuppetmastereinige Konfigurationsschritte entfallen.

Laden Sie das Puppet Labs-Paket herunter:

cd ~; wget https://apt.puppetlabs.com/puppetlabs-release-trusty.deb

Installieren Sie das Paket:

sudo dpkg -i puppetlabs-release-trusty.deb

Aktualisieren Sie die Liste der verfügbaren Pakete von apt:

sudo apt-get update

Installieren Sie das Paketpuppetmaster-passenger:

sudo apt-get install puppetmaster-passenger

Puppet Master, Passenger, Apache und andere erforderliche Pakete sind jetzt installiert. Da wir Passenger mit Apache verwenden, wird der Puppet-Master-Prozess von Apache gesteuert, d. H. es läuft, wenn Apache läuft.

Bevor Sie fortfahren, stoppen Sie den Puppet Master, indem Sie den Dienst vonapache2beenden:

sudo service apache2 stop

Als nächstes wollen wir die Version von Puppet sperren.

Sperren Sie die Version

Änderungen von Version zu Version können gelegentlich dazu führen, dass Ihre Puppet-Umgebung nicht mehr ordnungsgemäß funktioniert. Aus diesem Grund möchten Sie eine konsistente Puppet-Version für Ihre gesamte Infrastruktur beibehalten. Wenn Sie sich für ein Upgrade auf eine neuere Version entscheiden, stellen Sie sicher, dass Sie Ihremastervor Agentenknoten aktualisieren, da der Master keine Agenten mit einer höheren Versionsnummer verwalten kann.

Sehen wir uns die Version unserer Puppet-Installation mit dem folgenden Befehl an:

puppet help | tail -n 1

Während des Schreibens beträgt die Ausgabe des vorherigen BefehlsPuppet v3.6.2. Wir können die Pin-Funktion von apt verwenden, um unsere Puppet-Installation auf3.6.* zu sperren, wodurch verhindert wird, dass apt Puppet auf eine höhere Hauptversion aktualisiert. Erstellen Sie eine neue Datei mit dem Namen im Verzeichnis apt preferences:

sudo vi /etc/apt/preferences.d/00-puppet.pref

Fügen Sie die folgenden Zeilen hinzu, um die Paketepuppet,puppet-common undpuppetmaster-passenger für die Pakete3.6.* zu sperren (ändern Sie dies entsprechend Ihrer installierten Version):

# /etc/apt/preferences.d/00-puppet.pref
Package: puppet puppet-common puppetmaster-passenger
Pin: version 3.6*
Pin-Priority: 501

Speichern und schließen. Ihre Puppet-Version ist jetzt gesperrt.

Der nächste Schritt besteht darin, die Namen und Zertifikate Ihrer Puppenmeister einzurichten.

Richten Sie Namen und Zertifikate ein

Puppet verwendet SSL-Zertifikate, um die Kommunikation zwischen Master- und Agentenknoten zu authentifizieren. Der Puppet-Master fungiert als Zertifizierungsstelle (Certificate Authority, CA) und muss eigene Zertifikate generieren, die zum Signieren von Agentenzertifikatsanforderungen verwendet werden. Wir werden jetzt die Master-Zertifikate einrichten.

Bestehende Zertifikate löschen

Löschen Sie alle vorhandenen SSL-Zertifikate, die während der Paketinstallation erstellt wurden. Der Standardspeicherort der SSL-Zertifikate von Puppet ist/var/lib/puppet/ssl:

sudo rm -rf /var/lib/puppet/ssl

Zertifikat konfigurieren

Geben Sie beim Erstellen des Puppet Master-Zertifikats jeden DNS-Namen an, unter dem Agentenknoten den Master kontaktieren können. In unserem Beispiel verwenden wir "puppet" und "puppet.nyc2.example.com", den kurzen Hostnamen bzw. den vollqualifizierten Domänennamen.

Bearbeiten Sie die puppet.conf-Datei des Masters:

sudo vi /etc/puppet/puppet.conf

Es wird ungefähr so ​​aussehen:

[main]
logdir=/var/log/puppet
vardir=/var/lib/puppet
ssldir=/var/lib/puppet/ssl
rundir=/var/run/puppet
factpath=$vardir/lib/facter
templatedir=$confdir/templates

[master]
# These are needed when the puppetmaster is run by passenger
# and can safely be removed if webrick is used.
ssl_client_header = SSL_CLIENT_S_DN
ssl_client_verify_header = SSL_CLIENT_VERIFY

Löschen Sie die Zeile mit der Optiontemplatedir, da diese Option veraltet ist.

Fügen Sie am Ende des Abschnitts[main]die folgenden zwei Zeilen hinzu (ersetzen Sie den hervorgehobenen Text durch den privaten FQDN):

certname = puppet
dns_alt_names = puppet,puppet.nyc2.example.com

Es ist wichtig,certname für "Puppet" zuzuweisen, da die Apache / Passenger-Konfiguration erwartet, dass das Zertifikat "Puppet" heißt. Wenn Sie sich für eine anderecertname-Einstellung entscheiden, müssen Sie die Apache-Konfigurationsdatei (/etc/apache2/sites-available/puppetmaster.conf) bearbeiten, um den Namen des SSL-Zertifikatpfads zu ändern.

Speichern und schließen.

Neues Zertifikat generieren

Erstellen Sie nun neue CA-Zertifikate, indem Sie den folgenden Befehl ausführen:

sudo puppet master --verbose --no-daemonize

In mehreren Ausgabezeilen wird angegeben, dass SSL-Schlüssel und -Zertifikate erstellt werden. Sobald SieNotice: Starting Puppet master version 3.6.2 sehen, ist die Zertifikateinrichtung abgeschlossen. Drücken SieCTRL-C, um zur Shell zurückzukehren.

Beispielausgabe:

Info: Creating a new SSL key for ca
Info: Creating a new SSL certificate request for ca
Info: Certificate Request fingerprint (SHA256): EC:7D:ED:15:DE:E3:F1:49:1A:1B:9C:D8:04:F5:46:EF:B4:33:91:91:B6:5D:19:AC:21:D6:40:46:4A:50:5A:29
Notice: Signed certificate request for ca
...
Notice: Signed certificate request for puppet
Notice: Removing file Puppet::SSL::CertificateRequest puppet at '/var/lib/puppet/ssl/ca/requests/puppet.pem'
Notice: Removing file Puppet::SSL::CertificateRequest puppet at '/var/lib/puppet/ssl/certificate_requests/puppet.pem'
Notice: Starting Puppet master version 3.6.2

Wenn Sie die Zertifikatsinformationen des soeben erstellten Zertifikats anzeigen möchten, geben Sie Folgendes ein:

sudo puppet cert list -all

Der vorherige Befehl listet tatsächlich alle signierten Zertifikate und nicht signierten Zertifikatanforderungen auf. Derzeit wird nur das Master-Zertifikat angezeigt, da noch keine weiteren Zertifikate hinzugefügt wurden:

+ "puppet" (SHA256) 05:22:F7:65:64:CF:46:0E:09:2C:5D:FD:8C:AC:9B:31:17:2B:7B:05:93:D5:D1:01:52:72:E6:DF:84:A0:07:37 (alt names: "DNS:puppet", "DNS:puppet.nyc2.example.com")

Unser Puppenmeisterservice ist fast einsatzbereit. Schauen wir uns zuerst die Masterkonfiguration an.

Puppet Master konfigurieren

Die Hauptkonfigurationsdatei der Puppe,puppet.conf, besteht aus drei Abschnitten:[main],[master] und[agent]. Wie Sie vielleicht erraten haben, enthält der Abschnitt "main" die globale Konfiguration, der Abschnitt "master" ist spezifisch für den Puppenmaster, und der "agent" wird zum Konfigurieren des Puppenagenten verwendet. Abgesehen von den zuvor vorgenommenen Änderungen funktionieren die Standardeinstellungen für eine grundlegende Einrichtung einwandfrei.

Die Konfigurationsdatei enthält viele Optionen, die für Ihr eigenes Setup relevant sein können. Eine vollständige Beschreibung der Datei finden Sie bei Puppet Labs:Main Config File (puppet.conf).

Wenn Sie es bearbeiten möchten, führen Sie diesen Befehl aus:

sudo vi /etc/puppet/puppet.conf

Werfen wir einen Blick auf die Hauptmanifestdatei.

Hauptmanifestdatei

Puppet verwendet eine domänenspezifische Sprache, um Systemkonfigurationen zu beschreiben. Diese Beschreibungen werden in Dateien gespeichert, die als "Manifeste" bezeichnet werden und die Dateierweiterung.pphaben. Die Standard-Hauptmanifestdatei befindet sich bei/etc/puppet/manifests/site.pp. Wir werden später einige grundlegende Manifeste behandeln, aber wir werden vorerst eine Platzhalterdatei erstellen:

sudo touch /etc/puppet/manifests/site.pp

Starten Sie Puppet Master

Jetzt können wir den Puppenmeister starten. Starten Sie es, indem Sie den Dienstapache2ausführen:

sudo service apache2 start

Ihr Puppet-Master wird ausgeführt, verwaltet jedoch noch keine Agentenknoten. Lassen Sie uns lernen, wie Sie Puppet-Agenten installieren und hinzufügen!

Installieren Sie Puppet Agent

Der Puppet-Agent muss auf jedem Server installiert sein, den der Puppet-Master verwalten wird. In den meisten Fällen umfasst dies jeden Server in Ihrer Infrastruktur. Wie in der Einführung erwähnt, kann der Puppet-Agent auf allen wichtigen Linux-Distributionen, einigen UNIX-Plattformen und Windows ausgeführt werden. Da die Installation auf jedem Betriebssystem geringfügig variiert, werden wir uns nur mit der Installation auf Ubuntu- und Debian-Servern befassen.

Anweisungen zum Installieren von Puppet auf anderen Plattformen finden Sie inPuppet Labs Docs. Befolgen Sie unbedingt den Abschnitt „Installieren von Puppet auf Agentenknoten“ für das Betriebssystem Ihrer Wahl.

Note: Es wird davon ausgegangen, dass alle Ihre Puppet-Knoten, einschließlich der Agentenknoten, für die Verwendung Ihres DNS konfiguriert sind. Wenn Sie einen brandneuen Server erstellen, stellen Sie sicher, dassadd it to your DNS angegeben ist, bevor Sie den Puppet-Agenten installieren.

Ubuntu / Debian-Agent-Knoten

Note: Alle unsere Beispielagentenknoten,host1,host2,ns1 undns2, sind Ubuntu 14.04 VPS. Wir werden diesen Schritt für jeden Server wiederholen, damit jeder vom Puppet-Master verwaltet werden kann.

Laden Sie auf Ihrem Puppet-Agent-Knoten das Puppet Labs-Paket herunter:

cd ~; wget https://apt.puppetlabs.com/puppetlabs-release-trusty.deb

Installieren Sie das Paket:

sudo dpkg -i puppetlabs-release-trusty.deb

Aktualisieren Sie die Liste der verfügbaren Pakete von apt:

sudo apt-get update

Installieren Sie das Puppet Agent-Paket (puppet):

sudo apt-get install puppet

Der Marionettenagent ist standardmäßig deaktiviert. Um dies zu ändern, aktualisieren Sie die Standarddatei:

sudo vi /etc/default/puppet

Und ändern Sie den Wert vonSTART in "Ja":

START=yes

Speichern und beenden Sie/etc/default/puppet.

Sperren Sie die Version

Wie beim Puppet-Master möchten wir die Funktion apt pin verwenden, um die Version des Puppet-Agenten zu sperren:

sudo vi /etc/apt/preferences.d/00-puppet.pref

Fügen Sie die folgenden Zeilen hinzu, um die Paketepuppet undpuppet-common für3.6.* zu sperren (ändern Sie dies entsprechend Ihrer installierten Version):

# /etc/apt/preferences.d/00-puppet.pref
Package: puppet puppet-common
Pin: version 3.6*
Pin-Priority: 501

Speichern und schließen. Ihre Puppet-Version ist jetzt gesperrt.

Agent konfigurieren

Vor dem Ausführen des Agenten müssen einige Konfigurationsänderungen vorgenommen werden.

Bearbeiten Sie diepuppet.conf des Agenten:

sudo vi /etc/puppet/puppet.conf

Es sieht genauso aus wie die anfängliche Konfigurationsdatei des Puppenmeisters.

Löschen Sie erneut die Zeiletemplatedir. Löschen Sie dann den Abschnitt[master] und alle Zeilen darunter.

Unter der Annahme, dass der Puppenmeister unter "Puppe" erreichbar ist, sollte der Agent in der Lage sein, eine Verbindung zum Meister herzustellen. Wenn der Master bei "Puppet" nicht verfügbar ist, müssen Sie den FQDN des Puppet-Masters hinzufügen. Wir empfehlen, dies trotzdem zu konfigurieren (ersetzen Sie den FQDN durch Ihren eigenen):

[agent]
server = puppet.nyc2.example.com

Speichern und schließen.

Der Marionettenagent ist bereit zu rennen. Führen Sie dazu den folgenden Befehl aus:

sudo service puppet start

Wenn alles richtig konfiguriert ist, sollten Sie keine Ausgabe sehen. Wenn Sie den Puppet-Agenten zum ersten Mal ausführen, generiert er ein SSL-Zertifikat und sendet eine Signaturanforderung an den Puppet-Master. Nachdem der Puppenmeister das Agentenzertifikat signiert hat, kann er mit dem Agentenknoten kommunizieren.

Note: Wenn dies Ihr erster Puppet-Agent ist, wird empfohlen, dass Sie versuchen, das Zertifikat auf dem Puppet-Master zu signieren, bevor Sie Ihre anderen Agenten hinzufügen. Nachdem Sie sichergestellt haben, dass alles ordnungsgemäß funktioniert, können Sie die verbleibenden Agentenknoten vertrauensvoll hinzufügen.

Zeichenanforderung auf Master

Wenn Puppet zum ersten Mal auf einem Agentenknoten ausgeführt wird, sendet es eine Zertifikatsignierungsanforderung an den Puppet-Master. Bevor der Master den Agentenknoten kommunizieren und steuern kann, muss er das Zertifikat dieses bestimmten Agentenknotens signieren. Wir werden beschreiben, wie Sie signieren und nach Signaturanforderungen suchen.

Aktuelle Zertifikatsanforderungen auflisten

Führen Sie auf dem Puppet Master den folgenden Befehl aus, um alle nicht signierten Zertifikatanforderungen aufzulisten:

sudo puppet cert list

Wenn Sie gerade Ihren ersten Agentenknoten eingerichtet haben, wird eine Anforderung angezeigt. Es sieht ungefähr wie folgt aus, wobei der FQDN des Agentenknotens der Hostname ist:

"host1.nyc2.example.com" (SHA256) B1:96:ED:1F:F7:1E:40:53:C1:D4:1B:3C:75:F4:7C:0B:A9:4C:1B:5D:95:2B:79:C0:08:DD:2B:F4:4A:36:EE:E3

Beachten Sie, dass sich keine+ davor befinden. Dies zeigt an, dass es noch nicht signiert wurde.

Unterzeichnen Sie eine Anfrage

Verwenden Sie zum Signieren einer Zertifikatanforderung den Befehlpuppet cert sign mit dem Hostnamen des Zertifikats, das Sie signieren möchten. Um beispielsweisehost1.nyc2.example.com zu signieren, verwenden Sie den folgenden Befehl:

sudo puppet cert sign host1.nyc2.example.com

Sie sehen die folgende Ausgabe, die angibt, dass die Zertifikatsanforderung signiert wurde:

Notice: Signed certificate request for host1.nyc2.example.com
Notice: Removing file Puppet::SSL::CertificateRequest host1.nyc2.example.com at '/var/lib/puppet/ssl/ca/requests/host1.nyc2.example.com.pem'

Der Puppet-Master kann nun den Knoten, zu dem das signierte Zertifikat gehört, kommunizieren und steuern.

Wenn Sie alle aktuellen Anforderungen signieren möchten, verwenden Sie die Option-all wie folgt:

sudo puppet cert sign --all

Zertifikate widerrufen

Möglicherweise möchten Sie einen Host aus Puppet entfernen oder einen Host neu erstellen und dann wieder zu Puppet hinzufügen. In diesem Fall möchten Sie das Zertifikat des Hosts vom Puppet Master widerrufen. Dazu müssen Sie die Aktioncleanverwenden:

sudo puppet cert clean hostname

Die zugehörigen Zertifikate des angegebenen Hosts werden von Puppet entfernt.

Alle signierten Anfragen anzeigen

Wenn Sie alle signierten und nicht signierten Anforderungen anzeigen möchten, führen Sie den folgenden Befehl aus:

sudo puppet cert list --all

Sie sehen eine Liste aller Anfragen. Vor signierten Anforderungen steht ein` and unsigned requests do not have the `.

  "ns2.nyc2.example.com"   (SHA256) E4:F5:26:EB:B1:99:1F:9D:6C:B5:4B:BF:86:14:40:23:E0:50:3F:C1:45:D0:B5:F0:68:6E:B2:0F:41:C7:BA:76
+ "host1.nyc2.example.com" (SHA256) 71:A2:D3:82:15:0D:80:20:D4:7E:E3:42:C2:35:87:83:79:2B:57:1D:D5:5A:EC:F6:8B:EE:51:69:53:EB:6B:A1
+ "host2.nyc2.example.com" (SHA256) F4:79:A6:7C:27:0C:EA:8E:BC:31:66:FF:F2:01:AB:B1:35:7B:9F:5E:C8:C9:CE:82:EE:E8:2F:23:9F:0C:2B:ED
+ "puppet"                 (SHA256) 05:22:F7:65:64:CF:46:0E:09:2C:5D:FD:8C:AC:9B:31:17:2B:7B:05:93:D5:D1:01:52:72:E6:DF:84:A0:07:37 (alt names: "DNS:puppet", "DNS:puppet.nyc2.example.com")

Glückwunsch! Ihre Infrastruktur kann jetzt von Puppet verwaltet werden!

Erste Schritte mit Puppet

Nachdem Ihre Infrastruktur für die Verwaltung mit Puppet eingerichtet wurde, zeigen wir Ihnen, wie Sie einige grundlegende Aufgaben ausführen, um loszulegen.

Wie Fakten gesammelt werden

Puppet sammelt Fakten über jeden seiner Knoten mit einem Werkzeug namensfacter. Facter sammelt standardmäßig Informationen, die für die Systemkonfiguration nützlich sind (z. Betriebssystemnamen, Hostnamen, IP-Adressen, SSH-Schlüssel und mehr). Es ist möglich, benutzerdefinierte Fakten hinzuzufügen, wenn Sie andere Fakten benötigen, um Ihre Konfigurationen durchzuführen.

Die gesammelten Fakten können in vielen Situationen nützlich sein. Beispielsweise können Sie eine Webserverkonfigurationsvorlage erstellen und automatisch die entsprechenden IP-Adressen für einen bestimmten virtuellen Host eingeben. Oder Sie können feststellen, dass das Betriebssystem Ihres Servers "Ubuntu" ist. Sie sollten also den Dienstapache2anstelle vonhttpd ausführen. Dies sind grundlegende Beispiele, die Ihnen jedoch eine Vorstellung davon geben sollen, wie Fakten verwendet werden können.

Führen Sie den folgenden Befehl aus, um eine Liste der Fakten anzuzeigen, die automatisch auf Ihrem Agentenknoten erfasst werden:

facter

Wie das Hauptmanifest ausgeführt wird

Der Puppenagent meldet sich regelmäßig (in der Regel alle 30 Minuten) beim Puppenmeister. Während dieser Zeit sendet es Fakten über sich selbst an den Master und ruft einen aktuellen Katalog ab - eine kompilierte Liste der Ressourcen und ihrer gewünschten Zustände, die für den Agenten relevant sind und vom Hauptmanifest bestimmt werden. Der Agentenknoten versucht dann, die entsprechenden Änderungen vorzunehmen, um den gewünschten Status zu erreichen. Dieser Zyklus wird fortgesetzt, solange der Puppet-Master ausgeführt wird und mit den Agentenknoten kommuniziert.

Sofortige Ausführung auf einem bestimmten Agentenknoten

Sie können die Prüfung für einen bestimmten Agentenknoten auch manuell initiieren, indem Sie den folgenden Befehl ausführen (auf dem betreffenden Agentenknoten):

puppet agent --test

Wenn Sie dies ausführen, wird das Hauptmanifest auf den Agenten angewendet, der den Test ausführt. Möglicherweise wird folgende Ausgabe angezeigt:

Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Loading facts in /var/lib/puppet/lib/facter/pe_version.rb
Info: Loading facts in /var/lib/puppet/lib/facter/puppet_vardir.rb
Info: Loading facts in /var/lib/puppet/lib/facter/root_home.rb
Info: Loading facts in /var/lib/puppet/lib/facter/facter_dot_d.rb
Info: Caching catalog for host1.nyc2.example.com
Info: Applying configuration version '1407966707'

Dieser Befehl ist nützlich, um zu sehen, wie sich das Hauptmanifest sofort auf einen einzelnen Server auswirkt.

Einmalige Manifeste

Mit dem Befehlpuppet apply können Sie bei Bedarf Manifeste ausführen, die nicht mit dem Hauptmanifest zusammenhängen. Es wendet das Manifest nur auf den Knoten an, von dem aus Sie das Apply ausführen. Hier ist ein Beispiel:

sudo puppet apply /etc/puppet/modules/test/init.pp

Das Ausführen von Manifesten auf diese Weise ist nützlich, wenn Sie ein neues Manifest auf einem Agentenknoten testen oder ein Manifest nur einmal ausführen möchten (z. einen Agentenknoten auf einen gewünschten Zustand zu initialisieren).

Ein einfaches Manifest

Wie Sie sich vielleicht erinnern, befindet sich die Hauptmanifestdatei auf dem Puppet Master bei/etc/puppet/manifests/site.pp.

Bearbeiten Sie diemaster jetzt:

sudo vi /etc/puppet/manifests/site.pp

Fügen Sie nun die folgenden Zeilen hinzu, um eine Dateiressource zu beschreiben:

file {'/tmp/example-ip':                                            # resource type file and filename
  ensure  => present,                                               # make sure it exists
  mode    => 0644,                                                  # file permissions
  content => "Here is my Public IP Address: ${ipaddress_eth0}.\n",  # note the ipaddress_eth0 fact
}

Nun speichern und beenden. Die Inline-Kommentare sollten die Ressource erläutern, die wir definieren. Im Klartext bedeutet diesensure, dass alle Agentenknoten eine Datei mit/tmp/example-ip mit-rw-r--r-- Berechtigungen und Text haben, der die öffentliche IP-Adresse des Knotens enthält.

Sie können entweder warten, bis der Agent automatisch beim Master eincheckt, oder Sie können den Befehlpuppet agent --test ausführen (von einem Ihrer Agentenknoten). Führen Sie dann den folgenden Befehl aus, um die Datei zu drucken:

cat /tmp/example-ip

Sie sollten eine Ausgabe sehen, die wie folgt aussieht (mit der IP-Adresse dieses Knotens):

Here is my Public IP Address: 128.131.192.11.

Geben Sie einen Knoten an

Wenn Sie eine Ressource für bestimmte Knoten definieren möchten, definieren Sie einnode im Manifest.

Bearbeiten Sie auf dem Mastersite.pp:

sudo vi /etc/puppet/manifests/site.pp

Fügen Sie nun die folgenden Zeilen hinzu:

node 'ns1', 'ns2' {    # applies to ns1 and ns2 nodes
  file {'/tmp/dns':    # resource type file and filename
    ensure => present, # make sure it exists
    mode => 0644,
    content => "Only DNS servers get this file.\n",
  }
}

node default {}       # applies to nodes that aren't explicitly defined

Speichern und schließen.

Jetzt stellt Puppet sicher, dass eine Datei mit/tmp/dns aufns1 undns2 vorhanden ist. Möglicherweise möchten Sie den Befehlpuppet agent --test ausführen (von ns1 oder ns2), wenn Sie nicht auf den geplanten Pull des Puppet-Agenten warten möchten.

Beachten Sie, dass Puppet sein Möglichstes tut, um eine Ressource nicht zu berühren, wenn Sie sie nicht definieren. Wenn Sie diese Ressourcen aus dem Manifest gelöscht haben, löscht Puppet die erstellten Dateien nicht. Wenn Sie möchten, dass die Dateien gelöscht werden, ändern Sieensure inabsent.

Diese Beispiele machen nichts Sinnvolles, aber sie beweisen, dass Puppet richtig funktioniert.

Verwenden eines Moduls

Verwenden wir nun ein Modul. Module sind nützlich, um Aufgaben zu gruppieren. In der Puppet-Community gibt es viele Module, und Sie können sogar eigene Module schreiben.

Installieren Sie auf dem Puppet Master das Modulpuppetlabs-apache von Forgeapi:

sudo puppet module install puppetlabs-apache

Warning: Verwenden Sie dieses Modul nicht in einem vorhandenen Apache-Setup. Es werden alle Apache-Konfigurationen gelöscht, die nicht von Puppet verwaltet werden.

Bearbeiten Sie nunsite.pp:

sudo vi /etc/puppet/manifest/site.pp

Fügen Sie nun die folgenden Zeilen hinzu, um Apache aufhost2 zu installieren:

node 'host2' {
  class { 'apache': }             # use apache module
  apache::vhost { 'example.com':  # define vhost resource
    port    => '80',
    docroot => '/var/www/html'
  }
}

Speichern und schließen. Wenn Puppet das nächste Mal host2 aktualisiert, installiert es das Apache-Paket und konfiguriert einen virtuellen Host namens "example.com", der Port 80 überwacht und über ein Dokumentstammverzeichnis/var/www/htmlverfügt.

Führen Sie aufhost2 den folgenden Befehl aus:

sudo puppet agent --test

Sie sollten eine Reihe von Ausgaben sehen, die darauf hinweisen, dass Apache installiert wird. Wechseln Sie nach Abschluss des Vorgangs zur öffentlichen IP-Adresse vonhost2. Sie sollten die Standard-Willkommensseite von Apache sehen.

Glückwunsch! Sie haben Ihr erstes Puppet-Modul verwendet!

Fazit

Nachdem Sie über eine grundlegende Installation von Agent / Master Puppet verfügen, erfahren Sie jetzt, wie Sie Puppet zum Verwalten Ihrer Serverinfrastruktur verwenden. Schauen Sie sich das folgende Tutorial an:Getting Started With Puppet Code: Manifests and Modules.

Related