So installieren Sie Puppet im Standalone-Modus unter CentOS 7

Einführung

Das Ziel dieses Tutorials ist es, Puppet so schnell wie möglich im Standalone-Modus auf CentOS 7 zum Laufen zu bringen.

Wenn Sie etwas über Puppet lernen möchten und wissen möchten, wie nützlich es für Sie sein kann, lesen Sie weiter. Wenn Sie bereits überzeugt sind und mit der Installation von Puppet beginnen möchten, fahren Sie mit dem folgenden AbschnittConventions Used In This Tutorialfort.

Warum Puppet verwenden?

Was ist eine Marionette?

Puppet ist eine Open-Source-Konfigurationsverwaltungssoftware, mit der Unternehmen die genaue Konfiguration von Zehntausenden von Knoten von einem einzigen zentralen Server aus steuern können. Puppet ist ausgereift und beliebt und wird von großen Organisationen auf der ganzen Welt verwendet. Die Installation von Puppet unter diesem verteilten Client / Server-Modell kann jedoch kompliziert sein und erfordert die Einrichtung eines zentralen Puppet-Servers und dessen Beziehung zu Client-Knoten.

Puppet hat ein so starkes Image wie ein Massenwolken-Konfigurationstool, dass es Sie überraschen könnte, zu wissen, dass Puppet auch im „Standalone“ -Modus ausgeführt werden kann, in dem es manuell ausgeführt wird, um einen einzelnen Knoten zu konfigurieren. Im Standalone-Modus ist Puppet ein hervorragendes Tool zum Konfigurieren einzelner Knoten.

Wenn Sie Ihre DigitalOcean Droplets manuell konfiguriert haben (d. H. Durch Einfügen von SSH in den Cloud-Server und Eingabe einer Reihe von Befehlen in die Linux-Befehlsshell kann Puppet Sie dabei unterstützen, das gesamte Wissen über diesen Konfigurationsprozess in eine einzelne Puppet-Konfigurationsdatei (oder einen Verzeichnisbaum) einzubetten, die bzw. der zum erneuten Erstellen aufgerufen werden kann den Knoten von Grund auf neu konfigurieren oder den Knoten neu konfigurieren, wenn er beschädigt wird.

Puppet ist nicht nur ein verherrlichter Installationsskript-Manager. Wenn Puppet ausgeführt wird, überprüft es die Konfiguration des Knotens, identifiziert Unterschiede zwischen der Konfiguration des Knotens und der in der Puppet-Konfigurationsdatei angegebenen Konfiguration und nimmt dann die erforderlichen Änderungen vor, um den Knoten in den angegebenen Zustand zu versetzen. Dies bedeutet, dass es sowohl zum Konfigurieren als auch zum Reparieren von Knoten verwendet werden kann.

Gründe für die Verwendung eines Konfigurationsverwaltungstools

Bei der Installation von Software lassen sich drei Stufen der Komplexität identifizieren: manuell, skriptbasiert und konfigurationsbasiert.

  • Inmanual installation geben Sie SSH in den Knoten ein und geben eine Reihe von Befehlen
    an die Befehlsshell aus, um die Software zu installieren.

  • Inscripted installation erstellen Sie ein Skript (z. ein Ruby-Skript oder ein BASH-Skript)
    , um die Software zu installieren und auszuführen.

  • Inconfiguration management based installation erstellen Sie eine Konfigurationstool-Spezifikation
    für den gewünschten Status des Knotens. Das Konfigurationstool vergleicht den Status des Knotens mit dem gewünschten Status und versetzt den Knoten in den gewünschten Status.

Die manuelle Installation sollte vermieden werden, da es sich um eine Vorautomatisierungslösung handelt, bei der das gesamte Installationswissen im Kopf eines oder mehrerer Ingenieure und nicht in einer Datei gespeichert ist (es sei denn, die Ingenieure haben die Installationsprozedur niedergeschrieben).

Die Skriptinstallation ist weitaus besser als die manuelle Installation, weist jedoch das Problem auf, dass Sie das Skript nicht verwenden können, um den Schaden zu beheben, wenn Sie eine Installation durchführen und dann einen kleinen Teil davon beschädigen. Sie müssen von vorne anfangen und alles neu installieren.

Die beste Lösung ist eine auf Konfigurationsmanagement basierende Installation. Ein Konfigurationsverwaltungstool automatisiert die Installation (ebenso wie ein Installationsskript), kann jedoch auch zum Reparieren der Software verwendet werden, wenn diese beschädigt wird. Es kann auch verwendet werden, um die gewünschte Konfiguration zu ändern und den Knoten in den neuen gewünschten Zustand zu versetzen.

Warum gerade Puppet verwenden?

Ab August 2014 scheinen zwei Hauptkonfigurationstools auf dem Markt zu sein: Puppet und Chef. Eine schnelle Suche zeigt, dass beide Tools ausgereift und loyal sind. Ein wesentlicher Unterschied ist, dass Puppet aussagekräftiger und Chefkoch prozeduraler ist, wodurch Puppet für die Schadensbehebung attraktiver wird. Hier einige Vergleichsartikel.

In diesem Tutorial wird kein umfassender Vergleich angestrebt.

Schneeflocken, Haustiere und Vieh

In der Welt der Softwarekonfiguration ist eine Metapher entstanden, die drei Stufen
der Komplexität des Serverkonfigurationsmanagements beschreibt. Sie können sich auf der Ebene der Schneeflocke
, der Ebene der Haustiere oder der Ebene der Rinder befinden. So funktioniert das:

  • Ihr Knoten istsnowflake, wenn Sie nicht wissen, wie er zu dem Zustand
    gekommen ist, in dem er sich befindet, und / oder Sie zu nervös sind, um Änderungen daran vorzunehmen, oder sogar
    berühren ) s es für den Fall, dass es kaputt geht. Wenn es kaputt geht, haben Sie echte Probleme. Ihr Knoten ist
    wie eine empfindliche Schneeflocke.

  • Ihr Knoten ist einpet, wenn Sie sicher sind, dass Sie ihn reparieren können, wenn er kaputt geht,
    , aber der Gedanke, ihn von Grund auf neu zu konfigurieren, macht Ihnen Angst. Wenn das Haustier Ihres
    krank wird, bringen Sie es zum Tierarzt, um es zu heilen.

  • Ihr Knoten ist einhead of cattle, wenn die Konfiguration so automatisiert wurde, dass es einfacher ist,
    mit Ihrem automatisierten Konfigurationstool neu zu konfigurieren, wenn
    mit dem Knoten schief geht ist zu versuchen, es zu reparieren. Wenn
    eines Ihrer Rinder krank wird, bringen Sie es nicht zum Tierarzt. Sie schießen es in den Kopf von
    und erhalten ein neues.

Der Zweck der Metapher besteht darin, die Perspektive des „Viehs“ des Knotenmanagements zu vermitteln. Die meisten Systemadministratoren sind es so gewohnt, Knoten als Schneeflocken oder Haustiere zu behandeln, dass die Idee, einen Knoten nur zu töten, wenn er beschädigt wird, ziemlich fremd erscheint. Es dauert jedoch nur ein paar Sekunden, um die Perspektive zu ändern und zu erkennen, wie leistungsfähig das Viehmodell ist.

  • Das Dateisystem ist beschädigt? Kein Problem, töte einfach den Knoten und erstelle ihn mit Puppet von Grund auf neu.

  • Ein obskures Stück Software hat plötzlich aufgehört zu funktionieren? Kein Problem, töte einfach den Knoten und erstelle ihn mit Puppet von Grund auf neu.

  • Ein Hacker ist in Ihr System eingedrungen und hat ein Root-Kit installiert? Kein Problem, töte einfach den Knoten und erstelle ihn mit Puppet von Grund auf neu.

Behandeln Sie Ihre Knoten wie Vieh kann eine Krücke sein. Letztendlich ist es am besten, die Ursache für die Beschädigung Ihres Knotens zu finden und das eigentliche Problem zu beheben. In der Zwischenzeit ist es jedoch sehr effektiv, nur eine automatische Wiederherstellung durchzuführen.

Von den drei Installationsebenen unterstützen Installationen mit Skript und Konfigurationsverwaltung beide das Rindermodell. Das Konfigurationsverwaltungsmodell unterstützt jedoch auch das Haustiermodell. Wenn Sie unter dem skriptbasierten Modell zusätzliche Software installieren möchten, müssen Sie von vorne beginnen. Unter dem Konfigurationsverwaltungsmodell können Sie Ihren vorhandenen Knoten ändern.

Mit Puppet können Sie vom Schneeflockenmodell zum Viehmodell wechseln und Ihr Vieh nach Belieben als Haustier behandeln.

(Hinweis: Der Autor ist nicht damit einverstanden, Tiere wie Rinder zu behandeln, aber die Rinder-Metapher funktioniert gut als Konfigurationsmetapher.)

Der Marionettenweg

Die Puppet-Methode zum Konfigurieren von Knoten besteht darin, alles in Puppet zu konfigurieren. Dies kann manchmal etwas schwierig sein, aber es ist fast immer möglich, alles, was Sie wollen, in Puppet zu konfigurieren.

Wenn Sie sich dazu verpflichten, alles in Puppet zu konfigurieren, können Sie jeden Knoten in Ihrer Cloud mit einem einzigen Puppet-Befehl konfigurieren. Wenn Sie dies tun können, können Sie damit beginnen, die Knoten in Ihrer Cloud wie Rinder zu behandeln. Sie können sich so weit von der Schneeflockenmentalität entfernen, dass Sie regelmäßig einen zufälligen Knoten in Ihrer Cloud auswählen und ihn mit Puppet abreißen und neu erstellen, um sich selbst zu beweisen, dass er nicht irgendwie zu einer Schneeflocke oder zu einem Knoten geworden ist ein Haustier.

Wenn Sie alle Konfigurationsinformationen in Puppet integriert haben, können Sie einen Knoten nur dann nicht mehr wie einen Rinderkopf behandeln, wenn er eine Datenbank enthält. Sie müssen die Datenbank vor dem Herunterfahren des Knotens speichern und nach dem erneuten Erstellen des Knotens wiederherstellen. Dies ist jedoch der einzige Grund.

Puppet ist nicht nur ein Konfigurationswerkzeug. Es handelt sich um eine Devops-Disziplin, die die Installation, Verwaltung und Reparatur von Knoten rationalisiert und einen Großteil der Belastung durch die Verwaltung einer Knotenwolke beseitigt.

In diesem Lernprogramm verwendete Konventionen

Für die Zwecke dieses Tutorials wurde ein Droplet mit folgendem Namen erstellt:

mynode.example.com

wird verwendet. Immer wenn Sie in diesem Tutorial das Wort „mynode“ oder „example“ sehen, können Sie sicher sein, dass es sich nicht um Befehlsschlüsselwörter handelt und Sie Ihren eigenen Namen ersetzen müssen.

Sofern nicht anders angegeben, bedeutet dies, wenn in diesem Lernprogramm zur Ausgabe eines Befehls aufgefordert wird, dass der Befehl in der Befehls-Shell (z. bash) deines Tropfens.

In diesem Lernprogramm wird davon ausgegangen, dass Sie als root angemeldet sind, sodass Sie nicht jedem Befehlsudo voranstellen müssen. Wenn Sie nicht als root angemeldet sind, können Sie versuchen, allen folgenden Befehlensudo voranzustellen (dies wurde jedoch nicht getestet).

In diesem Tutorial verwenden wir den Befehlcat, um Dateien zu erstellen und zu ändern. Auf Wunsch können Sie auchnano oder einen anderen Texteditor verwenden.

Erstellen Sie ein Tröpfchen

Wenn Sie das Droplet, auf das Sie Puppet anwenden möchten, noch nicht erstellt haben, tun Sie dies jetzt. Sie können jede Art von Droplet erstellen, sofern es sich um ein CentOS 7-Droplet handelt.

Wenn Sie den Hostnamen Ihres neuen Droplets im DigitalOcean Droplet-Erstellungsformular angeben, müssen Sie den vollqualifizierten Domänennamen (FQDN) im Feld Hostname angeben.

Hostname = mynode.example.com

Geben Sie nicht nur "mynode" an.

(Sie müssen den DNS vonexample.com nicht für den neuen Knotenmynode konfigurieren, um Puppet ausführen zu können. Es ist jedoch eine gute Idee, dies trotzdem zu tun, wenn Sie das Droplet behalten möchten deine Erinnerung!)

SSH in Ihr Tröpfchen als Wurzel

SSH in das neue Droplet als Root von der Befehlszeile des Computers aus, von dem aus Sie mit dem folgenden Befehl arbeiten.

Wenn Sie DNS nicht so konfiguriert haben, dass ein Domänenname auf den Knoten verweist, müssen Sie stattdessen die IP-Adresse des Knotens verwenden.

Installieren Sie Puppet

Der nächste Schritt ist die Installation von Puppet. Puppet Labs liefert Puppet in einer kostenlosen Open-Source-Version und separat als Enterprise-Version aus. In diesem Tutorial installieren wir die Open Source-Version, die für eine beliebige Anzahl von Knoten völlig kostenlos ist.

Die Linux-Installationssoftwareyum erleichtert die Installation von Puppet. Die einzige Schwierigkeit besteht darin, dass Puppet standardmäßig nicht in der CentOS-Yum-Repository-Liste enthalten ist. Daher müssen wir diese zuerst installieren, bevor wiryum aufrufen können. (Wenn Sie CentOS 5 oder CentOS 6 haben, ändern Sie die 7 in eine 5 oder 6).

rpm -ivh http://yum.puppetlabs.com/puppetlabs-release-el-7.noarch.rpm

Sie können mit dem folgenden Befehl bestätigen, dass das Puppet-Repository installiert wurde:

yum repolist | grep puppet

Die Ausgabe sollte ungefähr so ​​aussehen:

puppetlabs-deps/x86_64         Puppet Labs Dependencies El 7 - x86_64        10
puppetlabs-products/x86_64     Puppet Labs Products El 7 - x86_64            70

Nun installiere Puppet mit yum. Mit dem Befehlyes (der mit | in den Befehlyum eingespeist wird) müssen Sie keine Reihe von Fragen von yum beantworten. Der Befehl verursacht viel Aktivität und sollte über 180 Zeilen Konsolenausgabe liefern.

yes | yum -y install puppet

Testen Sie, ob Puppet installiert ist und mit dem folgenden Befehl funktioniert. Die Ausgabe sollte nur eine einfache Versionsnummer wie3.6.2 sein.

puppet --version

Stellen Sie Hostname und FQDN ein

Puppet wird nicht ordnungsgemäß ausgeführt, wenn der Hostname und der vollqualifizierte Domänenname (FQDN) des Knotens nicht ordnungsgemäß konfiguriert sind. Dies liegt daran, dass Puppet häufig mit einer Konfigurationsdatei konfiguriert wird, die die Konfiguration mehrerer verschiedener Knoten angibt. Puppet muss wissen, auf welchem ​​Knoten es läuft, damit es nur die relevanten Teile der Konfigurationsdatei ausführen kann.

Führen Sie die folgenden beiden Befehle aus, um festzustellen, ob Ihr Knoten korrekt für Puppet konfiguriert ist:

facter | grep hostname
facter | grep fqdn

Der Befehlfacterzeigt allein eine Liste von Schlüssel / Wert-Paaren mit Daten zu Ihrem Droplet an. Hier sind nur zwei der Schlüssel / Wert-Paare wichtig. Daher verwenden wirgrep, um nach der relevanten Ausgabe zu suchen. Diese sollte folgendermaßen aussehen:

hostname=mynode
fqdn=mynode.example.com

Wenn die Teile der Werte vonmynodefalsch sind, können Sie dies durch
beheben, indem Sie den folgenden Befehl eingeben. Dies ändert den Anteil vonmynodeam Wert von
in beiden Paaren:

hostname mynode

Wenn der Domänenwert infqdn falsch ist, können Sie ihn beheben, indem Sie eine einzelne
-Zeile an die Systemkonfigurationsdatei/etc/resolv.conf anhängen. Werfen Sie zunächst einen kurzen Blick darauf (nützlich, wenn Sie es versehentlich beschädigen und es neu erstellen möchten, ohne das Droplet neu zu erstellen):

cat /etc/resolv.conf

Fügen Sie nun hinzu:

cat >>/etc/resolv.conf
domain example.com
^D

(wobei^D bedeutet, Control-D einzugeben, um die Eingabe für den Befehlcat zu beenden.)

Vergewissern Sie sich, dass Ihre Änderungen mit Folgendem zusammengearbeitet haben:

facter | grep hostname
facter | grep fqdn

Hier ist eine Erinnerung daran, was die Ausgabe enthalten sollte:

hostname=mynode
fqdn=mynode.example.com

Erstellen Sie eine Puppenkonfigurationsdatei

Nachdem Puppet installiert und einsatzbereit ist, können Sie eine Puppet-Konfiguration erstellen. Der CentOS / Puppet-Installationsprozess sollte bereits ein Verzeichnis mit dem Namen/etc/puppet erstellt haben (falls nicht, erstellen Sie es mitmkdir /etc/puppet). Werfen wir einen Blick dorthin:

ls -la /etc/puppet

Es sollten einige.conf-Dateien und einmodules-Unterverzeichnis vorhanden sein.

Die Namenskonventionen für den Puppet-Konfigurationsverzeichnisbaum weisen uns an, einmanifests-Unterverzeichnis zu erstellen, das die eigentliche Konfigurationsdatei enthält, die wir erstellen möchten:

mkdir /etc/puppet/manifests

Erstellen Sie nun die Konfigurationsdatei. Sie müssenmynode.example.com durch Ihren eigenen Domainnamen ersetzen. Der Befehlcat wird verwendet, Sie können jedoch den Editornano (oder einen anderen Editor) verwenden, wenn Sie möchten. (Führende und nachfolgende Leerzeilen werden ignoriert).

cat >/etc/puppet/manifests/projectname.pp

node "mynode.example.com" {

file { '/root/example_file.txt':
    ensure => "file",
    owner  => "root",
    group  => "root",
    mode   => "700",
    content => "Congratulations!
Puppet has created this file.
",}

} # End node mynode.example.com
^D

(^D bedeutet, dass Sie Control-D eingeben, um die Eingabe für den Befehlcat zu beenden.)

Die Konfigurationsdatei gibt die Konfiguration des Knotensmynode.example.com an. (Sie könnten dieser Datei weitere Konstruktblöcke wienode "nodename" {...} hinzufügen, die weiterhin auf dem Knotenmynode.example.com ausgeführt werden.)

Im Konstruktnode befindet sich eine Anweisung zum Konfigurieren einer bestimmten Datei mit dem Namen/root/example_file.txt. Das Konstruktfileweist Puppet an, sicherzustellen, dass sich unter diesem Namen eine Datei befindet, dass die Datei eine Datei und kein Verzeichnis ist, dass sie den angegebenen Besitz hat, dass sie den angegebenen Schutzmodus hat und dass sie hat den angegebenen Inhalt.

Die Anweisungfileist nicht einfach ein Befehl zum Erstellen der Datei, wenn sie nicht vorhanden ist. Es handelt sich vielmehr um eine Spezifikation, wie die Datei konfiguriert werden soll. Puppet überprüft die Datei und fährt sie in den angegebenen Zustand, unabhängig davon, in welchem ​​Zustand sie sich befindet. Wenn die Datei nicht vorhanden ist, erstellt Puppet sie. Wenn es existiert, aber einer der angegebenen Aspekte (einschließlich des Dateiinhalts) nicht korrekt ist, korrigiert Puppet die Abweichung und versetzt die Datei in den angegebenen Zustand. Während Puppet beim ersten Ausführen die Rolle eines Installationsskripts zu erfüllen scheint, vergleicht es den vorhandenen Status tatsächlich mit dem gewünschten Status und nimmt Änderungen vor, um das Dateisystem in den gewünschten Status zu versetzen .

Puppet aufrufen

Nachdem Sie Puppet installiert und eine Konfigurationsdatei erstellt haben, können Sie Puppet aufrufen. (Ignoriere alle ipaddress Fehler).

puppet apply /etc/puppet/manifests/projectname.pp

Puppet sollte die Datei/root/example_file.txterstellen, dierootgehört, in der Grupperootund mit den Berechtigungen-rwx------. Überprüfen Sie dies mit:

ls -la /root

Überprüfen Sie den Inhalt der Datei mit:

cat /root/example_file.txt

Sie sollten den Text sehen, den wir in der Konfigurationsdatei angegeben haben.

Puppet erneut aufrufen

Denken Sie daran, dass Puppet Ihre Konfigurationsdatei nicht als Skript ausführt.
Stattdessen wird Ihr System in den in der Konfigurationsdatei
angegebenen Zustand versetzt. Das heißt, wenn Sie Puppet erneut ausführen, sollte dies nichts bewirken. Versuch es!

puppet apply /etc/puppet/manifests/projectname.pp

Beschädigen Sie die Datei und rufen Sie die Marionette erneut auf

Lassen Sie uns nun der konfigurierten Datei Schaden zufügen, indem Sie deren Schutz
mit dem Befehlchmod ändern.

chmod o+r /root/example_file.txt

Überprüfen Sie den Schaden mit dem folgenden Befehl. Sie sollten-rwx---r--
Schutz fürexample_file.txt anstelle von-rwx------ Schutz sehen:

ls -la /root

Rufen Sie nun Puppet erneut auf:

puppet apply /etc/puppet/manifests/projectname.pp

Puppet sollte den Schutz der Datei reparieren. Überprüfen Sie es mit:

ls -la /root

Mehr Schaden und Reparatur

Lassen Sie uns die Datei jetzt noch einmal beschädigen, indem wir ihren Inhalt ändern:

cat >/root/example_file.txt
This is a damaged file!
^D

Bestätigen Sie den Schaden mit:

cat /root/example_file.txt

Rufe Puppet erneut auf. Es sollte die Datei reparieren:

puppet apply /etc/puppet/manifests/projectname.pp

Bestätigen Sie, dass die Datei repariert wurde mit:

cat /root/example_file.txt

Was nun?

Dies ist nur ein Beispiel für „Hallo Welt“, um Ihnen den Einstieg zu erleichtern. Die obige Konfigurationsdatei ist nur ein kleines Beispiel dafür, was Puppet kann. Werfen Sie einen kurzen Blick auf diese Seite, um einen Vorgeschmack auf die Zukunft zu erhalten:

Sie können die Konfiguration einzelner Dateien, ganzer Verzeichnisbäume, Pakete, Dienste, Cron, Benutzer, Gruppen und vieles mehr festlegen. Es gibt auch eine riesige, von Puppet-Nutzern erstellte Bibliothek von Konfigurationsmodulen unter:

Fazit

Dieses Tutorial zeigt Ihnen, wie Sie Puppet im Standalone-Modus installieren und wie Sie eine Puppet-Konfigurationsdatei erstellen, um eine einzelne Datei in einem einzelnen Knoten zu konfigurieren. Diese Konfigurationsdatei kann als Plattform dienen, auf der Sie eine komplexere Konfiguration erstellen können. Wenn Sie sich an die Disziplin halten, Ihre gesamte Konfiguration mit Puppet vorzunehmen, können Sie Ihre Tröpfchen von Schneeflocken (oder Haustieren) in Rinder umwandeln und so Ihre Cloud-Verwaltungsaufgaben schnell und wiederholbar gestalten.

Verweise

Das Unternehmen hinter Puppet heißt Puppet Labs, Inc. und finden Sie hier:

Installationsanweisungen für Puppets finden Sie unter:

Auf dieser Seite können Sie einen Eindruck davon bekommen, was Puppet konfigurieren kann:

Die Puppet-Benutzergemeinschaft hat Tausende von Puppet-Modulen erstellt, mit denen
für die Konfiguration einer Vielzahl von Software verwendet werden können: