news Puppentheater – Server Management leicht gemacht ... the smarter way of information news Seite 2/7 Im Bereich von Systemen zum automatischen Setup und Betrieb von großen Serverlandschaften, fällt ein Tool besonders auf, das in den letzten Jahren durch eine schnell wachsende Gemeinde von Anwendern und fein abgestimmten Releases von sich reden macht: Puppet. Entstanden durch die Unzufriedenheit des heutigen CEO von PuppetLabs mit anderen Konfigurationswerkzeugen und den damit einhergehenden unzureichenden Möglichkeiten, große Rechnerlandschaften zu managen, begann Luke Kanies seit 2005 an Puppet zu arbeiten und gründete später die Firma PuppetLabs. Anfänglich als Freie Software gestartet, existiert immer noch eine Open-Source-Variante, die bezüglich der Konfigurationsmöglichkeiten den vollen Umfang des Enterprise-Paketes beinhaltet, allerdings hinsichtlich weitergehender Werkzeuge und Möglichkeiten einen reduzierten Umfang bietet. Für weitere Informationen hierzu, klicken Sie bitte hier. Puppet liegt zurzeit in der Version 3.2.1 vor und arbeitet auf allen Unix- bzw. Linux-Systemen. Seit der Version 2.7 wird Windows -wenn auch in reduziertem Umfang unterstützt. Im Rahmen der Artikelserie über Tools zum Thema „Continuous Integration & Delivery“ kommt man an Puppet und seinen Derivaten (Chef, cfengine usw.) nicht vorbei. Abweichend von den anderen Newslettern werden wir im Rahmen dieses Artikels nicht so sehr ins technische Detail gehen, sondern mehr das System an sich, seinen Einsatzrahmen und die zugrundeliegende Philosophie beleuchten. Hinter den Kulissen Puppet bezeichnet sich selbst als „Open Source Next Generation Server Automation Tool“. Hinter diesem langen Namen verbirgt sich ein in Ruby geschriebenes Werkzeug, das mittels einer Client-Server-Architektur und einer deklarativen Sprache zur Formulierung von Zuständen bzw. Konfigurationen von Servern und Subsystemen (sog. „Manifests“) in der Lage ist, die entsprechenden Maschinen zu administrieren. Dies geschieht über den sogenannten „Puppet Master“ auf dem alle auszuliefernden Konfigurationen definiert werden. Anschließend muss auf allen Rechnern, die über das System administriert werden sollen, der Client „Puppet Agent“ installiert werden. Im Default-Verhalten greift anschließend der Client alle 30 Minuten auf den Master zu, holt sich die neueste Definition ab und protokolliert alle Aktivitäten auf dem Server. Software-Integration news Seite 3/7 Wie arbeitet Puppet? Wie oben schon beschrieben, benutzt Puppet ein deklaratives, modellbasiertes System zur Automatisierung der Vorgänge. 1. Definieren Der gewünschte Zustand der Konfiguration wird mittels der deklarativen Sprache von Puppet festgelegt und auf dem Puppet Master gespeichert. 2. Simulieren Puppet bietet die Möglichkeit, anstehende Änderungen im Bedarfsfall vor der Installation zu simulieren und zu testen, ob der gewünschte Zustand erreicht wird. 3. Durchführen Der auf dem Puppet Master hinterlegte Zustand wird automatisch deployed und korrigiert alle Konfigurationen im angedachten Sinne. 4. Berichten Abschließend werden die Unterschiede zwischen der auf dem Server vorgefundenen und der angestrebten Definition protokolliert. Software-Integration news Seite 4/7 Wie wird das Konzept umgesetzt? Schauen wir uns die Umsetzung der oben genannten Philosophie anhand eines aktuellen Beispiels aus der Praxis genauer an. Um eine Webapplikation zu deployen, wird eine Datenbank, ein Applikationserver und ein Webserver benötigt. Dies kann auf einem einzelnen Rechner durchgeführt werden. Typischerweise wird dies allerdings auf mehreren Rechnern -einer für jede Komponente- erfolgen. Diese Rechner (sog. „Nodes“) und die auf ihnen installierten Komponenten (sog. „Resources“) stehen in enger Bezie- hung zueinander und sind einem Lebenszyklus mitsamt Anpassungen, Änderungen und Austausch unterworfen. Die Beziehungen zwischen den Komponenten und die darin enthaltenen Konfigurationen werden jetzt über Puppet abgebildet und auf dem Master gespeichert. Die Deklaration einer Beziehung erfolgt über ein sogenanntes „Manifest“. Der Kern einer Deklaration besteht darin, die „Resources“ zu definieren, wobei sie anschließend wieder logisch in „Classes“ gruppiert werden können. Eine Ressour- ce beschreibt vielleicht ein einzelnes File oder Package, wohingegen eine Klasse beispielsweise alles Notwendige zur Beschreibung eines kompletten Service oder einer Applikation (inklusive den KonfigFiles, den Daemons und den Wartungs-Tasks) beinhaltet. Kleinere Klassen können anschließend mit größeren kombiniert werden, um komplette Systeme wie „Database Server“ oder „Web Applikation Server“ zu beschreiben. Manifeste können Logik enthalten, um die Konfiguration mehrerer Knoten auf einmal abzubilden. Vor der Konfiguration eines Knotens (also dem eigentlichen Deployment) kompiliert Puppet das Manifest in einen Katalog, der nur für EINEN Knoten gültig ist und keine zweideutige Logik mehr enthält. In der Standard Agent- Master-Architektur fragen die Knoten die Kataloge des Puppet Master Servers ab, der anschließend für den entsprechenden Knoten kompiliert wird. Wird Puppet als Standalone-Variante auf einem Server/Knoten betrieben, werden die Kataloge lokal kompiliert und sofort eingespielt. Software-Integration news Seite 5/7 Die Statisten - wiederverwertbare Module Module Puppet geht davon aus, dass jede Infrastruktur bezüglich ihrer Verwendung in Module geclustert und an geeigneter Stelle wiederverwertet werden kann. Der entsprech­ ende Wunschzustand bzw. das vordefinierte Modul einer Infrastrukturkomponente oder auch der gesamten Infrastruktur kann entweder über Puppet Forge publiziert oder nur einfach intern verwendet werden. Im vereinfachten Sinne sind Module wiederverwendbare Puppet-­ Code-Fragmente, die auch mit anderen Anwendern geteilt werden Database können. Sollte in Puppet Forge nicht das geeignete Modul vorhanden bzw. eine spezielle Anforderung vorliegen, so modelliert man in der Puppet eigenen Konfigurationssprache sein individuelles Modul. Dieses Modul kann anschließend über physische, virtuelle oder auch cloud-basierte Umgebungen verwendet werden. Des Weiteren können Module kombiniert und zu größeren Konfigurationen, die komplette Applikations-Stacks (sog. “Nodes“) repräsentieren, orchestriert werden. Webserver Appserver Security Puppet Forge: Das hauseigene Repository in dem die Community selbstgeschriebene Module hinterlegt und der übrigen Gemeinde zugänglich machen kann. Link zu Puppet Forge derzeitige Anzahl verfügbarer Module: ubunutu (207 modules) debian (166 modules) rhel (132 modules) CentOS (110 modules) centos (74 modules) monitoring (70 modules) networking (64 modules) security (60 modules) applications (55 modules) redhat (53 modules) Kombiniere Anwendungsmodule Web Servers Web server Security Node Web server Node Security Database Servers Web server Application Servers Web server Security Database Database App server Node Node Web server Security Web server Security Database Database App server Node Node Security Software-Integration news Seite 6/7 Die Aufführung - den festgelegten Status ausführen Nach der Installation der vordefinierten Konfigurationsmodule kommuniziert der Puppet Agent jedes einzelnen Knotens in regelmäßigen Abständen mit dem Puppet Master, um automatisch die Konsistenz der Konfiguration zwischen Master und Agenten zu gewährleisten. • Der Agent eines Knotens sendet einen Statusreport (sog. „Facts“) zum Puppet Master. • Der Puppet Master kompiliert unter Zuhilfenahme der Facts einen Katalog (einen Konfigurationsplan), wie der Knoten konfiguriert werden sollte und sendet diesen an den Agenten zurück. • Nachdem die Änderungen des Katalogs auf dem Knoten durchgeführt (oder im „No-op mode“ nur simuliert) wurden, sendet der Agent einen kompletten Änderungsbericht zum Puppet Master zurück. • Der generierte Bericht ist zur weiteren Verarbeitung über andere IT-Systeme über API vollständig erreichbar. Was sagen die Kritiker? Vor- und Nachteile von Puppet Vorteile • Puppet rollt automatisch alle zentral auf dem Master bereitgestellten Konfigurations-Updates auf die Clients aus. • Puppet sorgt für schlanke und wenig komplexe Konfigurationsdateien. So müssen z.B. die SSH-Keys und die Kerberos-Keytab nicht mehr explizit für jeden Rechner eingetragen werden. Auch die Unterscheidung zwischen 32 und 64-Bit entfällt. • Puppet bietet die Möglichkeit der automatischen Überwachung von Diensten und gegebenenfalls deren Neustart nach Absturz. • Puppet sorgt dafür, dass eine Installation nur einmalig gestartet werden muss. Alles weitere geschieht automatisch. Nachteile • Die Möglichkeit manueller clientseitiger Anpassungen von Konfigurationen entfällt bzw. ist nur sehr schwer umsetzbar, da der Puppet Master die Änderungen immer wieder überschreibt. Somit gibt es nicht mehr die Möglichkeit, das Übliche „gerade mal schnell zu testen“. Dies kann aber auch als Vorteil gewertet werden. Software-Integration news Seite 7/7 Fazit Mit der zunehmenden Menge virtualisierter bzw. automatisiert installierter Systeme kann Puppet zu einem treuen Weggefährten bei der Verwaltung komplexer Prozesse im Configuration- und Change Management werden. Im Kontext unseres Fokus der „Continuous Software Integration und Delivery“ in Enterprise-Umgebungen ist Puppet als eine neue Art der zentralisierten Konfigurationsverwaltung eine ernst zu nehmende Größe. Dies begründet sich hauptsächlich in der Möglichkeit, Anpassungen bezüglich Infrastruktur und Konfiguration in abgeschlossenen Testsystemen zu validieren und anschließend über Staging- und Produktionsumgebungen zu installieren. Dies fördert nicht nur die Transparenz zwischen Entwicklung und Betrieb, sondern kann durch die Einbindung in Virtualisierungslösungen in Enterprise-Umgebungen auch die Chancen von Puppet optimal nutzen. Als Produkt in unserer Newsletter-Reihe betrachtet, kann Puppet nicht den hier geforderten vollen Funktionsumfang der Testreihe bereitstellen, muss aber als Keyplayer im Kontext der Infrastruktur- und Konfigurationsverwaltungen, auch und gerade wegen seiner Position im Markt, berücksichtigt werden. Abschließend kann man sagen, dass Puppet definitiv ein mächtiges Tool im Werkzeugkasten jedes Build- und Deployment-Verantwortlichen sein sollte und aus dem Management großer heterogener Serverumgebungen nicht mehr wegzudenken ist. Impressum Datum: Juni 2013 Autor: Andreas Fränkle Kontakt: [email protected] www.avato-consulting.com © 2013 avato consulting Software-Integration