Puppet ermöglicht die zentrale und automatisierte Verwaltung von Konfigurationen und Systemen. Puzzle setzt seit ca. einem Jahr erfolgreich Puppet ein. Zeit für einen Überblick.
Wachsende IT-Umgebungen stellen System Engineers immer aufs Neue vor gleiche oder zumindest ähnliche Probleme. Mit der Zeit erarbeiten sich Administratoren Best Practises, wie sie Services aufbauen, betreiben und managen. Diese Best Practises können mit dem Begriff code style aus der Softwareentwicklung verglichen werden. Dies führt einerseits zu sehr vielen repetitiven Tätigkeiten und andererseits zu viel Abstraktion, damit Konfigurationen und Abläufe möglichst wiederverwendet werden können.
Puppet
Seit ein paar Jahren entwickelt die Firma reductive labs ein quelloffenes Konfigurationsmanagement-Werkzeug mit dem Namen Puppet, welches genau diese Bedürfnisse adressiert. Puppet erlaubt es, die Systemumgebungen in einer deklarativen Sprache, in sogenannten Manifests, abstrakt zu beschreiben. Puppet sorgt dann dafür, dass sich die einmal aufgesetzten Systeme jederzeit in diesem definierten Status befinden. Dabei spielt es keine Rolle, ob jemand eine homogene Umgebung von Systemen einer einzigen Linux Distribution betreiben will oder ob er es mit einer heterogenen Umgebung zu tun hat, die aus verschiedenen unixoiden Systemen besteht. Puppet weiss, auf welchem System es ein bestimmtes Paket auf welche Art installieren muss und prüft hinterher, ob dieses auch installiert und richtig konfiguriert wurde. Falls ein Paket fehlt, nicht oder falsch konfiguriert wurde, dann korrigiert Puppet den Zustand.
Die Eigenschaften der Puppet-eigenen DSL ermöglichen es, allgemeine Definitionen mit kleinem Aufwand deklarativ an spezielle Bedürfnisse anzupassen, zusammengehörendes zu gruppieren oder Abhängigkeiten zu modellieren. Diese Eigenschaften adressieren dabei verschiedene (Teil-)Bereiche eines modernen Managements von Systemumgebungen:
Don’t repeat yourself
Mit Puppet kann die Konfiguration verschiedener unixoiden Systeme über Vererbung spezialisiert werden. Eine Änderung wird nur an einer Stelle durchgeführt. Dadurch müssen keine Konfiguration mehr durch Copy & Paste dupliziert und angepasst werden. Dies führt zu einer einheitlichen Konfigurationsstruktur und minimiert die üblichen Fehler in Copy & Paste Umgebungen.
Flächendeckende Verteilung
Anpassungen werden automatisch auf alle relevanten Systeme verteilt. Es gehen dabei keine Systeme vergessen weil diese (noch) nicht in der entsprechenden Dokumentation aufgeführt waren oder gerade nicht erreichbar waren.
Verhindern von Änderungen
Puppet sorgt dafür, dass das System in einem definierten Zustand bleibt und manuelle Änderungen an verwalteten Konfigurationsdateien rückgängig gemacht werden.
Durch den Einsatz von Puppet bleiben komplexe Umgebungen übersichtlich und der Systemadministrator erspart sich repetitive Tätigkeiten. So schreibt er die Konfiguration eines Webservers zum Beispiel genau einmal.
Master your puppets
Die zentrale Instanz einer durch Puppet gemanagten Umgebung ist der Puppetmaster. Er zieht die nötigen Informationen für eine Clientkonfiguration zusammen, generiert diese und lässt anschliessend die Puppen spielen, welcher die Konfiguration auf den ausgewählten Systemen anwenden. Dabei werden Abhängigkeiten eingehalten, bei Konfigurationsänderungen Dienste neu gestartet, Überwachung für installierte Dienste auf dem Überwachungsserver eingetragen und so weiter. Der Systemadministrator ist in der Modellierung seiner Umgebung völlig frei.
Community
Rund um Puppet hat sich eine schnell wachsende Community entwickelt. So gibt es zahlreiche Personen, die Module von Diensten bereitstellen. Da reductive labs einen offenen Entwicklungsprozess verfolgt, beteiligen sich immer mehr Fachleute und implementieren neue Funktionen direkt in Puppet. Ein erst kürzlich eingeführtes Feature generiert zum Beispiel eine HTML-Dokumentation aus den Puppet Manifests. Damit kann der Systemadministrator mit Hilfe von Puppet und RDoc automatisiert eine Dokumentation erstellen, welche dem aktuellen Stand seiner Systeme entspricht.
Puzzle masters (your?) puppets
Puzzle setzt seit ca. einem Jahr Puppet für das Management der internen Serverinfrastruktur ein und wendet es zunehmend auch erfolgreich bei Kunden an. Dank Puppet hat sich die Administration von Systemen bedeutend vereinfacht und gleichzeitig wurde die Umgebung einheitlicher gestaltet. Viele Fehler, die sich durch repetitive Tätigkeiten eingeschlichen haben, wurden minimiert, wenn nicht gar ganz vermieden. Es besteht nicht mehr die Möglichkeit, dass Systeme vergessen gehen oder sich die Konfigurationen von einzelnen Systemen zunehmend von unserer Best Practise entfernen. Neue Systeme werden mit Hilfe von Puppet automatisch in unser Backupsystem aufgenommen und installierte Services in unser Monitoring System eingetragen und so weiter. Der Aufwand für die Installation eines neuen Systems in Zusammenarbeit mit Cobbler beschränkt sich noch auf die Erfassung von Hostname und IP-Adresse.
Mit Hilfe des Versionskontrollsystems Git, mit welchem wir unsere Manifests verwalten, erreichen wir dabei nicht nur ein Worklog, welcher die Verfolgung von Änderungen ermöglicht, sondern auch ein einfaches Rollback System, so dass wir sehr einfach auf einen früheren Konfigurationsstand springen können. In Zusammenarbeit mit weiteren Features von Puppet können wir dabei neu entwickelte oder geänderte Konfigurationen vorerst auch nur in einer Testumgebung auf Herz und Nieren prüfen. Die automatische Generierung einer browsebaren Dokumentation ist zudem eine automatische Dokumentation unserer Systeme und deren Konfiguration.
Neben Code Contribution bei Puppet stellt Puzzle auch einige der (weiter-)entwickelten Module der interessierten Öffentlichkeit zur Verfügung. Eine Auswahl an Modulen finden Sie dabei in unseren GitHub Repository.
Es gibt noch viele weitere Aspekte von Puppet vorzustellen: Seien sie also gespannt auf weitere Beiträge zu diesem Thema.