Zum Hauptinhalt

Puppet

Puppet ist ein Konfigurationsmanagement-Tool und ermöglicht es, IT-Infrastruktur deklarativ in Form von Infrastruktur als Code zu verwalten. Änderungen werden nachvollziehbar und transparent.

Mein Service mit Puppet

Puppet

Sie haben noch keine Erfahrung mit Puppet oder IT-Automatisierung, wünschen sich aber eine Erleichterung für die IT Ihres Unternehmens? Dann habe ich gute Nachrichten für Sie, denn Puppet ist im Konfigurationsmanagement führend. Wenn Sie einzelne Server oder große Umgebungen verwalten und konfigurieren möchten, ist Puppet ideal. Warum das so ist, möchte ich Ihnen ein wenig genauer erläutern. 

Was ist Puppet?

Bei Puppet handelt es sich um ein Konfigurationsmanagement-Tool. Puppet wird deshalb meist als Bestandteil einer Automatisierungsstrategie in den Arbeitsablauf des IT-Teams integriert, damit wiederkehrende Aufgaben effizient gelöst werden können.

Puppet kann plattformübergreifend verwendet werden, sowohl auf Linux und Unix basierenden Betriebssystemen wie Red Hat, CentOS, Ubuntu, Debian, SuSe, FreeBSD, als auch unter Windows. Puppet ist somit ideal in heterogenen IT-Umgebungen einsetzbar.

Um Puppet zu verstehen, müssen die einzelnen Aufgabenbereiche der Software allesamt ein wenig detaillierter betrachtet werden. Als Dienstleister kenne ich mich damit bestens aus und werde Ihnen daher nun die einzelnen Bausteine und Funktionsweisen von Puppet ausführlicher erklären.

Wie funktioniert Puppet?

Das bekannte Client-Server-Prinzip bildet die Grundlage für Puppet. Auf einem oder mehreren Servern wird der Pupperserver Dienst eingerichtet. Dort wird auch vollautomatisch der aktuelle Infrastruktur-Code hinterlegt und dem Puppetserver zugänglich gemacht. Der Puppetserver hält darüber hinaus auch die Puppet CA und stellt sicher das nur signierte Clients eine Konfiguration erhalten. 

Auf den Nodes genannten Clients läuft der Puppet-Agent Dienst der in regelmäßigen Abständen, normalerweise alle 30 Minuten beim Puppetserver nach seiner Konfiguration fragt.  Dadurch das der Puppet-Agent als Dienst läuft, wird kontinuierlich der Soll-Zustand mit dem Ist-Zustand verglichen. Somit werden Audits unterstützt, da sicherheitskritische Härtungen umgesetzt und Abweichungen in der Konfiguration fortlaufend korrigiert werden. Dadurch wird sichergestellt, dass Ihre Infrastruktur kontrolliert ist und den Sicherheitsanforderungen entspricht.

Damit der Puppetserver möglichst viel über den anfragenden Node erfährt teilt der Puppet-Agent diesem am Anfang des Puppet Runs eine Menge Details mit, die sogenannten Facts. Das sind kleine Informationsschnipsel, die vom Facter genannten Programm mithilfe von Scripten auf dem Node zusammengetragen werden. 

Hier eine kurze Visualisierung eines Puppet Runs:

Infrastruktur als Code – die Puppet DSL

Puppet verfügt über eine deklarative Sprache die sogenannte Puppet DSL (Domain Specific Language), die es Nutzer:innen sehr einfach macht Konfigurationen mit Puppet umzusetzen. Darüber hinaus ist es möglich die Puppet DSL bei Bedarf zu erweitern. 

Die Struktur von Puppet Code

Der Resource Type Ein Element mit Puppet verwalten

Puppet Code ist in unterschiedliche Elemente unterteilt. Das kleinste Element ist der sogenannte Resource Type.  Hier am Beispiel des File Types. Dieser wir von Puppet mitgeliefert und erlaubt es den Benutzern Dateien und Verzeichnisse zu verwalten:

file { '/etc/motd:
  ensure  => file,
  mode    => '0640',
  owner   => ‘root’,
  group   => ‘root’,
  content => “This Server is managed by Puppet! \n”,

}

Wir teilen Puppet an mit dieser File-Ressource mit das es den Pfad ‚/etc/motd‘ als Datei behandeln soll, als Eigentümer der Benutzer und die Gruppe ‚root‘. Zusätzlich verwalten wir die Zugriffsrechte und den Inhalt.

Mehrere Resource Types bündeln das Puppet Manifest

Das nächstgrößere Element ist das sogenannte Puppet Manifest. Dieses bündelt üblicherweise mehrere Resource Types zusammen und hat die Dateiendung .pp. Die Datei wird üblicherweise nach ihrem Zweck betitelt, zum Beispiel ‚install.pp‘ wenn pakete installiert werden. 

Manifeste zusammenfassen ein Puppet Modul

Mehrer Manifeste können zu einem sogenannten Modul zusammengefasst werden. Normalerweise werden Manifeste mit gleicher Verwendung zusammengefasst.

Einfache Verwaltung von Konfiguration

Am oben stehenden Beispiel wird deutlich, wie einfach es ist mit Puppet eine Konfiguration zu verwalten.  Zudem zeigt es eine weitere Besonderheit der Puppet DSL auf: Puppet Konfiguration ist zustandsbasiert, das heisst die Nutzer:innen teilen Puppet den Zielzustand mit. Genau dieser Zielzustand ist es, der vom Puppet-Agenten umgesetzt wird.

Puppet stellt mit der Puppet Forge eine Plattform zum Austausch von Modulen zur verfügung, sodass man für viele häufige Anwendungsfälle Module findet, die man verwenden kann.

Hier einige Beispiele welche Konfigurationen mit Puppet verwaltet werden können:  

Puppet hat somit eine Vielzahl an möglichen Anwendungsgebieten inne. Wie genau Puppet in Verbindung mit vorhandenen IT-Infrastrukturen und Automatisierungslösungen verwendet werden kann, hängt somit immer auch von dem entsprechenden Einzelfall ab. Sprechen Sie mich gerne an und wir besprechen gemeinsam, wie Puppet in Ihre IT-Landschaft integriert werden kann.

Das Puppet Ökosystem

Puppet Bolt – Orchestrierung von IT-Umgebungen

Puppet und Puppet Bolt stehen für die beiden Grundlegenden Funktionsweisen von Konfigurationsmanagement. Sie bieten sozusagen das Beste aus beiden Welten – der Puppet Agent erlaubt mit dem Puppetserver zusammen eine kontinuierliche Verwaltung der Infrastruktur, während Puppet Bolt auf das entfernte ausführen von Befehlen sowie Orchestrierung ausgelegt ist. Mit diesem lassen sich Puppet oder Befehle in einer definierten Reihenfolge über die Plattform verteilt ausführen. Als Protokoll nutzt Puppet Bolt Standardmäßig SSH.

Hiera – Code und Daten trennen

Hiera ist das Daten-Backend von Puppet. Als Standard unterstützt es YAML und JSON und ermöglicht es den Nutzer:innen Code und Daten zu trennen. Hiera erlaubt es benutzerdefinierte Hierarchien nach Facts zu durchlaufen und für verschiedene Ebenen unterschiedliche Werte zu hinterlegen.

So kann man als Default für alle Systeme das Paket ‚curl‘ definieren

---
lookup_options:
  profiles::packages::package_list:
    merge: deep

site_module::default_packages:
  - 'curl'

Webserver bekommen zusätzlich das Paket ‚apache2-utils‘

---
profiles::packages::package_list:
  - 'apache2-utils‘

und der Server examplehost.hoenscheid-itconsulting.com noch das Paket ‚vim‘.

---
profiles::packages::package_list:
  - 'vim‘

Was passiert hier?

In der common.yaml wird das Lookup-Verhalten des Schlüssels profiles::packages::package_list festgelegt, merge: deep sorgt dafür das das array über alle Hierachie-Ebenen zusammengeführt wird.

PuppetDB – Daten zu Puppet Runs speichern

Die PuppetDB speichert zu jedem Host die Informationen zu vorherigen Puppet Runs, Facts und den letzten Katalog, sowie exportierte Ressourcen, das sind Puppet Ressourcen die es ermöglichen Informationen von einem anderen Node woanders wieder zu verwenden. Ein Szenario ist zum Beispiel die Konfiguration eines Loadbalancers. Ein neuer Webserver wird konfiguriert und beim nächsten Puppet Run auf dem Loadbalancer wird der Webserver automatisch aufgenommen.

Puppetboard – Was macht meine Puppet Infrastruktur?

Das Puppetboard wurde mit dem Ziel entwickelt eine zuverlässige Weboberfläche anzubieten um die aktuellen Ereignisse in der Puppet-Infrastruktur auswerten und betrachten zu können. Laufen Nodes auf Fehler, welche Versionen des Puppet-Agents habe ich in meiner Umgebung? Als Quelle der Daten dient die PuppetDB.

Foreman – Den ganzen Lifecycle eines Servers verwalten

Foreman ist die Open Source Variante des Red Hat Satellite und dafür ausgelegt einen Server über die komplette Lebenszeit zu verwalten. Der Server kann mit Foreman erstellt werden, dazu können verschiedene Templates genutzt werden. Der Auftrag wird dann an die Virtualisierungslösung oder Cloud zur Bearbeitung weitergeleitet. Nach der Erstellung des Servers übernimmt Puppet dessen Verwaltung und sendet die Reports an Foreman wo diese ausgewertet und visualisiert werden können. Wenn der Server nicht mehr benötigt wird, kann in Foreman seine Löschung aus Puppet und das Entfernen des Servers eingeleitet werden. Zusätzlich kann Foreman Repositories bereitstellen und durch Plugins erweitert werden.

Puppet Enterprise – Puppet mit Support, Verbesserungen und Weboberfläche

Mit Puppet Enterprise steht eine durchdachte Enterprise Lösung von Puppet bereit. Puppet Enterprise kommt mit einem Installer, verschiedenen Installationsszenarien zur Skalierung, Puppet Bolt Orchestrierung über eine Message Queue, einer Weboberfläche – der sogenannten PE Console, zwei verschiedenen Release Zyklen (Standard Term Support und Long Term Support) sowie zwei unterschiedlichen Support Paketen (Standard oder Premium Support). Lizensiert wird per Node.

Voxpupuli – Die Puppet Community

Puppet wäre nichts ohne seine hilfsbereite und offene Community! Voxpupuli ist diese Community und existiert seit 2016 unter diesem Namen. Als Gemeinschaft pflegt Voxpupuli Puppet Module und Tools rund um Puppet und fördert den Austausch in der Community. Mehr Infos gibt es auf der Webseite https://voxpupuli.org/ oder auf Github https://github.com/voxpupuli. Hönscheid IT Consulting unterstützt Voxpupuli mit Beiträgen und einer monatlichen Spende.

Automatisieren Sie Ihre IT-Infrastruktur

Sie wollen Ihre Infrastruktur Automatisieren oder Ihr Projekt beschleunigen, das ins Stocken geraten ist? Kommen Sie gerne auf mich zu und wir sprechen darüber wie ich Sie mit der Einrichtung und Einführung von Puppet unterstützen kann.

Meine weiteren Leistungen im Bereich „Automatisierung“