Login
Newsletter
Werbung

Do, 2. Juni 2011, 15:00

Von Puppen und Marionetten

Konfigurationsmanagement mit Puppet

Mit der Serverlandschaft wächst auch der damit verbundene Verwaltungsaufwand. Konfigurationsmanagement soll helfen, ihn zu reduzieren. Hierzu bietet Puppet einen modernen und flexiblen Ansatz.

Redaktioneller Hinweis: Dieser Artikel wurde vom ADMIN-Magazin freundlicherweise zur Verfügung gestellt.

Welcher Admin kennt nicht das leidige Problem: Netzwerk und Serverpool wachsen stetig und irgendwann kommt man an den Punkt, an dem einem die Arbeit über den Kopf wächst. Man geht im Alltagsstress unter und versinkt endgültig irgendwo zwischen Deployment und Fehlersuche. Eigentlich sollte alles schon längst automatisiert sein, aber die eigene Shellskript-Sammlung ist noch nicht ganz so weit und leider auch schon ein wenig angestaubt.

Konfigurationsverwaltung wurde in den letzten Jahren auch im Open-Source-Umfeld wieder ein großes Thema. Das unter der GPL lizenzierte und hauptsächlich von Luke Kanies geschriebene Puppet dürfte wohl das Tool sein, das in diesem Bereich gegenwärtig am meisten von sich reden macht. Das Bild des Puppenspielers, der im mühelos die Fäden zieht, ist reizvoll Aber ist es denn wirklich so einfach, die eigenen Server derart tanzen zu lassen?

Soll ich wirklich?

Grundsätzlich gilt, dass ein Tool wie Puppet nur dann eine echte Ersparnis bedeutet, wenn man wirklich mit ausufernden Administrationskosten zu kämpfen und eine ziemlich große Server-Landschaft mit zudem auch noch recht ähnlichen Servern zu pflegen hat. Geradezu prädestiniert ist eine solche Lösung also für Anbieter von Cloud-Diensten oder größeren Server-Installationen. Nichtsdestotrotz kann Puppet aber dennoch vor allem auf längere Sicht auch für kleinere Umgebungen lohnend sein.

Warum gerade Puppet?

Im Vergleich mit anderen Tools aus dieser Familie zeichnet sich Puppet vor allem dadurch aus, dass es sich grundsätzlich unabhängig vom Betriebssystem einsetzen lässt. Puppet läuft mittlerweile unter fast allen gängigen Linux-Distributionen und fühlt sich auch unter Solaris, einigen BSDs sowie unter Mac OS X durchaus wohl. Zudem ist seit Version 2.6 erstmals rudimentäre Windows-Unterstützung verfügbar. So genannte Rezepte legen die gewünschte Konfiguration für das jeweilige System fest.

Puppet besteht aus einer Bibliothek, mit der ein Administrator in einer deklarativen Sprache die gewünschte Konfiguration einrichten kann, sowie Client- und Server-Komponenten zur Verteilung derselben. Die Abhängigkeiten zwischen den zu konfigurierenden Komponenten stellt Puppet in den Vordergrund - und verschiebt die Details zur Konfiguration in die tieferen Schichten seines Modells. Man kann Puppet somit als Abstraktionsschicht zwischen dem Administrator und seinen Systemen betrachten.

Architektur

Der Puppet-Client verbindet sich für gewöhnlich halbstündlich SSL-gesichert per XML-RPC oder REST mit dem Puppet-Master. Selbiger packt die für den jeweiligen Client vorhandene Konfiguration und sendet ihm diese. Der Client vergleicht alsdann die empfangene Konfiguration mit dem Status Quo des Rechners und korrigiert eventuelle Abweichungen. Die Konfiguration kann bei Bedarf in LDAP oder SQL-Datenbanken abgelegt, oder aber in reine Textdateien geschrieben werden. Letztere sind dabei durchaus attraktiv, da sie sich einfach mit einem Versionskontrollsystem verwalten lassen - womit auch schon sämtliche Änderungen an unseren Systemen mit einem Male historisch nachvollziehbar umgesetzt wären.

Jede einzelne Korrektur lässt sich im Nachhinein untersuchen - und bei Bedarf wieder rückgängig machen. Ob CVS, SVN, Git oder anderes bleibt jedem selbst überlassen. Puppet stellt lediglich die entsprechende Plattform bereit, was von wem in den oder die jeweiligen Konfigurationsordner ausgecheckt wird, ist ihm ziemlich egal. Wichtig ist bloß, dass die Syntax stimmt.

Die Code-Schnipsel, mit denen ein Administrator Puppet beibringt, was zu tun ist, nennen sich Manifeste, was im Sinne der Ladungsliste eines Schiffes zu verstehen ist. Es geht hier nämlich nicht bloß um das sequenzielle Abarbeiten eines Skripts. Deshalb wurde dieser Begriff bewusst vermieden. Stattdessen arbeitet Puppet eine Art Checkliste ab, die festlegt, was mit welchen Inhalten auf dem jeweiligen Rechner vorhanden sein soll. Puppet lässt dem Anwender große Freiheiten beim Aufbau der Manifeste. Es ist aber eine gute Idee, sich dabei an den aktuellen Best Practices zu orientieren.

Auf diese Weise und gepaart mit dem ebenfalls vorhandenen obligatorischen Reporting kommt Puppet dem aktuellen Idealbild einer zentralen Konfigurationsverwaltung schon ziemlich nahe.

Installation und Versionen

In gängigen Linux-Distributionen trifft man meist noch die Versionen 0.24 und 0.25 an - aktuell ist die 2.6. Wer heute mit Puppet loslegt, sollte gleich mit der 2.6 beginnen, während von 0.24 mittlerweile eher abzuraten ist. Grundsätzlich gilt: Alte Clients laufen meist auch mit einem neuen Server, umgekehrt gilt dies nicht immer. Hiermit wäre auch gleich die Vorgehensweise bei einem Upgrade geklärt: erst den Server und dann die Clients aktualisieren.

Eine der auffälligsten Änderungen in Version 2.6 betrifft die vorhandenen Binärdateien. Anstelle von mehreren unterschiedlichen gibt es jetzt nur noch »puppet«. Dieses gilt es nun mit den entsprechenden Parametern aufzurufen. Tabelle 1 zeigt die jeweiligen Befehle und ihr Pendant in Puppet 2.6. Diese Änderung hat auch Einfluss auf die Konfigurationsdateien, wobei dort vor allem zwei Änderungen wichtig sind: aus [puppetd] wurde [agent], aus [puppetmaster] einfach [master].

Ubuntu 10.10 bringt wie Debian Squeeze bereits die Version 2.6 mit, für Ubuntu 10.04 ist immerhin Version 0.25 verfügbar. Wer Debian Lenny benutzt, sollte für Puppet 0.25 auf die mittlerweile offiziell unterstützten Backports zurückgreifen. Falls die eigene Distribution keine entsprechend aktuellen Pakete mitliefert, empfiehlt sich die Installation aus den Quellen oder als Ruby-Gem.

Tabelle 1: Neue Aufrufe in Puppet 2.6

Puppet bis 0.25Puppet 2.6
puppetmasterdpuppet master
puppetdpuppet agent
puppetpuppet apply
puppetcapuppet cert
ralshpuppet resource
puppetrunpuppet kick
puppetqdpuppet queue
filebucketpuppet filebucket
puppetdocpuppet doc
pipuppet describe

Kommentare (Insgesamt: 3 || Alle anzeigen )
Re: Was es nicht alles gibt (harry klein, Mi, 8. Juni 2011)
Was es nicht alles gibt (hEAdr00m, Di, 7. Juni 2011)
Super Artikel (kmork, Do, 2. Juni 2011)
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung