Puppet-Tutorial für Anfänger: Was ist Puppet und wie wird es verwendet?

Bevor wir Puppet lernen, wollen wir Folgendes verstehen:

Was ist Konfigurationsmanagement?

Unter Konfigurationsmanagement versteht man den Prozess, Software und Computersysteme (z. B. Server, Speicher, Netzwerke) in einem bekannten, gewünschten und konsistenten Zustand zu halten. Es ermöglicht außerdem den Zugriff auf eine genaue historische Aufzeichnung des Systemstatus für Projektmanagement- und Prüfzwecke.

Systemadministratoren führen meist sich wiederholende Aufgaben wie die Installation von Servern, die Konfiguration dieser Server usw. durch. Diese Fachleute können diese Aufgabe automatisieren, indem sie Skripts schreiben.

Allerdings ist es eine schwierige Aufgabe, wenn sie an einer riesigen Infrastruktur arbeiten. Um solche Probleme zu lösen, wurde das Konfigurationsmanagement-Tool Puppet eingeführt.

Was ist Puppe?

Marionette ist ein Systemverwaltungstool zur Zentralisierung und Automatisierung des Konfigurationsverwaltungsprozesses. Puppet wird auch als Software-Bereitstellungstool verwendet. Es handelt sich um eine Open-Source-Konfigurationsmanagementsoftware, die häufig für die Serverkonfiguration, Verwaltung, Bereitstellung und Orchestrierung verschiedener Anwendungen und Dienste in der gesamten Infrastruktur einer Organisation verwendet wird.

Puppet wurde speziell für die Verwaltung der Konfiguration von Linux und entwickelt Windows Systeme. Es ist in Ruby geschrieben und nutzt seine Einzigartigkeit DOMain Sspezifisch LSprache (DSL) zur Beschreibung der Systemkonfiguration.

Was sind die Puppet-Versionen?

Puppet gibt es in zwei Versionen:

  • Open-Source-Puppe: Es handelt sich um eine Basisversion des Konfigurationsverwaltungstools Puppet, das auch als Open Source Puppet bekannt ist. Es ist direkt auf der Puppet-Website verfügbar und unter dem Apache 2.0-System lizenziert.
  • Marionettenunternehmen: Kommerzielle Version, die Funktionen wie Compliance-Berichte, Orchestrierung, rollenbasierte Zugriffskontrolle, GUI, API und Befehlszeilentools für eine effektive Verwaltung von Knoten bietet.

Was kann Puppet?

Sie verfügen beispielsweise über eine Infrastruktur mit etwa 100 Servern. Als Systemadministrator ist es Ihre Aufgabe, sicherzustellen, dass alle diese Server immer auf dem neuesten Stand sind und mit voller Funktionalität laufen.

Systemadministrator arbeitet manuell an den Servern
Der Systemadministrator arbeitet manuell an den Servern

Dazu können Sie Puppet verwenden, mit dem Sie einen einfachen Code schreiben können, der automatisch auf diesen Servern bereitgestellt werden kann. Dies reduziert den menschlichen Aufwand und macht den Entwicklungsprozess schnell und effektiv.

Puppet automatisiert die Serververwaltung
Puppet automatisiert die Serververwaltung

Puppet führt die folgenden Funktionen aus:

  • Mit Puppet können Sie für jeden Host unterschiedliche Konfigurationen definieren.
  • Mit dem Tool können Sie Server kontinuierlich überwachen, um sicherzustellen, dass die erforderliche Konfiguration vorhanden ist und nicht geändert wird. Wenn die Konfiguration geändert wird, kehrt das Puppet-Tool zur vordefinierten Konfiguration auf dem Host zurück.
  • Es ermöglicht außerdem die Kontrolle über das gesamte konfigurierte System, sodass eine zentralisierte Änderung automatisch durchgeführt wird.
  • Es wird auch als Bereitstellungstool verwendet, da es Software automatisch auf dem System bereitstellt. Es implementiert die Infrastruktur als Code, da Richtlinien und Konfigurationen als Code geschrieben werden.

Puppet DSL und Programmierparadigmen

Bevor wir Puppet DSL lernen, wollen wir die Programmierparadigmen verstehen:

Ein Programmierparadigma ist ein Stil, den Sie bei der Computerprogrammierung verwenden.

Vier Arten von Paradigmen sind:

  • Imperativ.
  • Deklarativ.
  • Funktional (was als Teilmenge dieses deklarativen Paradigmas betrachtet wird)
  • Objektorientierter.

Wir werden uns auf Imperativ und Deklarativ konzentrieren.

Imperative Paradigmen

Dieses Programmierparadigma drückt die Logik einer Berechnung aus (was zu tun ist) und beschreibt ihren Kontrollfluss (wie zu tun ist).

Ejemplo:

Angenommen, Sie gehen in Ihr Büro, buchen ein Taxi und beginnen, dem Fahrer Schritt für Schritt Anweisungen zu geben, bis Sie das Büro erreichen. Anzugeben, was zu tun ist und wie zu tun ist, ist ein zwingender Stil.

Deklarative Paradigmen

Dieses Programmierparadigma drückt die Logik einer Berechnung aus (was zu tun ist), ohne ihren Kontrollfluss zu beschreiben (wie zu tun ist).

Ejemplo:

Angenommen, Sie gehen zu Ihrem Büro, buchen ein Uber-Taxi und geben das endgültige Ziel (Büro) an. Anzugeben, was und nicht wie zu tun ist, ist ein deklarativer Stil.

Paradigma Aktivitäten How to do
Imperativ Ja Ja
Deklarativ Ja Nein

Puppet verwendet ein deklaratives Programmierparadigma

Puppet verwendet einen deklarativen Programmieransatz.

Ejemplo: Erstellen Sie einen Benutzer im System:

Dies kann mithilfe des Imperative-Programmiermusters durch ein Shell-Skript erfolgen: Hier legen wir fest, wie der Benutzer erstellt wird und welche Befehle darauf verwendet werden sollen Betriebssystem.

Deklarative Paradigmen

Allerdings kann dies mithilfe des deklarativen Programmiermusters mit nur wenigen Zeilen Puppet-Code und der domänenspezifischen Puppet-Sprache (DSL) erfolgen und dennoch das gleiche Ergebnis erzielen.

Deklarative Paradigmen

Bereitstellungsmodelle von Konfigurationsmanagement-Tools

Es gibt zwei Bereitstellungsmodelle für Konfigurationsmanagement-Tools :

  • Push-basiertes Bereitstellungsmodell: initiiert durch einen Masterknoten.
  • Pull-basiertes Bereitstellungsmodell: von Agenten initiiert.

Push-basiertes Bereitstellungsmodell

In diesem Bereitstellungsmodell überträgt der Masterserver die Konfigurationen und Software an die einzelnen Agenten. Nachdem die sichere Verbindung überprüft wurde, führt der Master Befehle remote auf den Agenten aus. Zum Beispiel, Ansible und Salzstapel.

Pull-basiertes Bereitstellungsmodell.

Bei diesem Bereitstellungsmodell kontaktieren einzelne Server einen Masterserver, überprüfen und bauen eine sichere Verbindung auf, laden ihre Konfigurationen und Software herunter und konfigurieren sich dann entsprechend – zum Beispiel Puppet und Chef.

Wie funktioniert Puppet?

Puppet basiert auf einem Pull-Bereitstellungsmodell, bei dem die Agent-Knoten regelmäßig nacheinander einchecken 1800 Sekunden mit dem Masterknoten, um zu sehen, ob etwas im Agenten aktualisiert werden muss. Wenn etwas aktualisiert werden muss, ruft der Agent die erforderlichen Puppet-Codes vom Master ab und führt die erforderlichen Aktionen aus.

Erklären wir es an einem Beispiel:

Ejemplo: Master – Agent-Setup:

Der Meister

Eine Linux-basierte Maschine, auf der die Puppet-Master-Software installiert ist. Es ist für die Verwaltung von Konfigurationen in Form von Puppet-Codes verantwortlich. Der Masterknoten kann nur Linux sein.

Die Agenten

Die von einem Puppet verwalteten Zielcomputer, auf denen die Puppet-Agent-Software installiert ist.

Der Agent kann auf jedem unterstützten Betriebssystem wie Linux oder Windows or Solaris oder Mac OS.

Die Kommunikation zwischen Master und Agent erfolgt über sichere Zertifikate.

Puppet Master Agent-Kommunikation
Puppet Master Agent-Kommunikation

Kommunikation zwischen dem Master und dem Agenten

Schritt 1) Sobald die Verbindung zwischen dem Agenten und dem Master hergestellt ist, sendet der Puppet-Agent die Daten über seinen Status an den Puppet-Masterserver. Diese werden als Fakten bezeichnet: Zu diesen Informationen gehören der Hostname, Kerneldetails, IP-Adresse, Dateinamendetails usw.

Kommunikation zwischen dem Master und dem Agenten
Agent sendet Fakten an Master

Schritt 2) Puppet Master verwendet diese Daten und erstellt eine Liste mit der Konfiguration, die auf den Agenten angewendet werden soll. Diese Liste der auf einem Agent durchzuführenden Konfigurationen wird als a bezeichnet Katalog. Dies kann beispielsweise durch die Installation von Paketen, Upgrades oder Entfernungen, die Erstellung eines Dateisystems, die Erstellung oder Löschung von Benutzern, einen Serverneustart, Änderungen der IP-Konfiguration usw. geändert werden.

Kommunikation zwischen dem Master und dem Agenten
Der Master sendet einen Katalog an den Agenten

Schritt 3) Der Agent verwendet diese Konfigurationsliste, um alle erforderlichen Konfigurationsänderungen auf dem Knoten anzuwenden.

Falls es keine Abweichungen in der Konfiguration gibt, führt der Agent keine Konfigurationsänderungen durch und lässt den Knoten mit derselben Konfiguration weiterlaufen.

Kommunikation zwischen dem Master und dem Agenten
Der Agent wendet die Konfiguration an

Schritt 4) Sobald dies erledigt ist, meldet der Knoten dem Puppet Master eine Rückmeldung, dass die Konfiguration angewendet und abgeschlossen wurde.

Puppenblöcke

Puppet bietet die Flexibilität, Berichte mithilfe von Puppet-APIs in Tools von Drittanbietern zu integrieren.

Es gibt vier Arten von Puppet-Bausteinen

  1. Ressourcen
  2. Klassen
  3. Manifest
  4. Module

Puppet-Ressourcen

Puppet-Ressourcen sind die Bausteine ​​von Puppet.

Ressourcen sind die eingebaute Funktionen die im Hintergrund ausgeführt werden, um die erforderlichen Vorgänge in Puppet durchzuführen.

Puppenunterricht

Eine Kombination verschiedener Ressourcen kann in einer einzigen Einheit namens Klasse zusammengefasst werden.

Puppenmanifest

Manifest ist ein Verzeichnis, das Puppet-DSL-Dateien enthält. Diese Dateien haben die Erweiterung .pp. Die Erweiterung .pp steht für Puppenprogramm. Der Puppet-Code besteht aus Definitionen oder Deklarationen von Puppet-Klassen.

Puppet-Module

Module sind eine Sammlung von Dateien und Verzeichnissen wie Manifesten und Klassendefinitionen. Sie sind die wiederverwendbaren und gemeinsam nutzbaren Einheiten in Puppet.

So befasst sich beispielsweise die MySQL Modul zum Installieren und Konfigurieren MySQL oder das Jenkins-Modul zum Verwalten von Jenkins usw.

Puppet-Module
Puppet-Module

Arten von Puppet-Ressourcen

Im Allgemeinen besteht ein System aus Dateien, Benutzern, Diensten, Prozessen, Paketen usw. In Puppet werden diese als Ressourcen bezeichnet. Ressourcen sind die Grundbausteine ​​in

Puppet. Alle Operationen an Puppet-Agenten werden mit Hilfe von Puppet-Ressourcen ausgeführt.

Puppet-Ressourcen sind vorgefertigte Tools, die zum Ausführen verschiedener Aufgaben und Vorgänge auf jeder unterstützten Plattform verwendet werden. Wir können eine einzelne Puppet-Ressource zum Ausführen einer bestimmten Aufgabe verwenden oder mehrere Puppet-Ressourcen zusammen, um die Bereitstellung komplexer Anwendungskonfigurationen durchzuführen.

Ressourcen können unterschiedliche Typen haben. Puppengebrauch RESSOURCEN und Ressourcentypen um die Konfiguration eines Systems zu beschreiben.

Es gibt drei Arten von Ressourcentypen:

  1. Puppet-Kern oder integrierte Ressourcentypen.
  2. Puppet-definierte Ressourcentypen.
  3. Benutzerdefinierte Puppet-Ressourcentypen.

Puppet-Kern oder integrierte Ressourcentypen

Kern- oder integrierte Ressourcentypen sind die vorgefertigten Puppet-Ressourcentypen, die mit der Puppet-Software geliefert werden. Alle Kern- oder integrierten Puppet-Ressourcentypen werden vom Puppet-Team geschrieben und verwaltet.

Puppet-definierte Ressourcentypen

Definierte Ressourcentypen sind einfache Ressourcentypen, die in der deklarativen Sprache Puppet geschrieben sind und eine Kombination bestehender Ressourcentypen verwenden.

Benutzerdefinierte Puppet-Ressourcentypen

Benutzerdefinierte Ressourcentypen sind vollständig angepasste Ressourcentypen, die in Ruby geschrieben sind.

Lassen Sie uns etwas über Marionetten-Ressourcentypen erfahren …

Geben Sie im Terminal den folgenden Befehl ein, um eine Liste der für Puppet relevanten Unterbefehle anzuzeigen:

Puppet --help

Benutzerdefinierte Puppet-Ressourcentypen

In unserem Fall interessiert uns der Unterbefehl „Ressourcen”, mit dem wir Informationen über integrierte Puppet-Ressourcentypen finden.

Geben Sie im Terminal einen der folgenden Befehle ein, um eine Liste der Aktionen verbunden mit dem Puppet-Unterbefehl „Ressourcen"

Puppet help resource		
Puppet resource --help		

Benutzerdefinierte Puppet-Ressourcentypen

In diesem Fall haben wir die Ressourcen als Unterkommando und –Typen als Aktion.

Puppet verfügt über 49 integrierte Kernressourcentypen.

Geben Sie im Terminal den folgenden Befehl ein, um eine Liste der verfügbaren integrierten Puppet-Ressourcentypen anzuzeigen:

puppet resource –types

Benutzerdefinierte Puppet-Ressourcentypen

Jeder Typ unterstützt eine Liste von Attribute. Diese Attribute stellen eine detaillierte Beschreibung bereit, die Puppet zum Verwalten der Ressource verwendet.

Um alle mit dem Puppet-Ressourcentyp verknüpften Attribute herauszufinden, verwenden Sie den folgenden Befehl:

puppet describe <resource type name>	

Parameter listet alle verfügbaren Attribute für diesen Ressourcentyp auf.

Puppet-Beschreibungspaket

Benutzerdefinierte Puppet-Ressourcentypen

Für einen Neuling ist es schwer, viele nicht verwaltete Puppet-Codedateien zu verstehen und zuzuordnen. Hier benötigen wir eine Gruppierung, um Vorgänge miteinander zu verknüpfen. Ziel ist es, ein einzelnes Problem zu lösen, beispielsweise alle Vorgänge, die erforderlich sind, um SSH auf einem Server oder NTP-Dienst oder einen kompletten Webserver oder Datenbankserver von Grund auf neu zu konfigurieren.

Was sind Puppenklassen?

Puppet-Klassen sind die Sammlung von Puppet-Ressourcen, die als eine Einheit gebündelt sind.

Puppet führte Klassen ein, um die Struktur wiederverwendbar und organisiert zu machen.

Zuerst müssen wir eine Klasse mithilfe der Klassendefinitionssyntax definieren. Klassen müssen eindeutig sein und können nur einmal mit demselben Namen deklariert werden:

class <class-name> {
<Resource declarations>
}

Ejemplo:

class ntpconfig {
    file {
        "/etc/ntp.conf": 
     ensure=> "present", content=> "server 0.centos.pool.ntp.org iburst\n",
    }
}

Bisher haben wir die Klasse nur definiert, aber nirgendwo verwendet. Das bedeutet, dass dieser Code, den wir geschrieben haben, niemals ausgeführt wird, es sei denn, wir deklarieren diese Klasse an anderer Stelle.

Klassendeklaration

Um eine definierte Klasse im Code zu verwenden, verwenden Sie die das Stichwort.

class ntpconfig {
    file {
        "/etc/ntp.conf": 
      ensure=> "present", 
      content=> "server 0.centos.pool.ntp.org iburst\n",
    }
}
include ntpconfig

Lassen Sie uns dies anhand eines realen Fallszenarios verstehen.

Demo-Installation von NTP

Stellen Sie zunächst sicher, dass das NTP-Paket nicht bereits auf dem Server vorhanden ist. Der folgende Befehl gibt nichts zurück, wenn Telnet nicht auf dem Server vorhanden ist:

rpm -qa | grep -i ntp

Demo-Installation von NTP

Wie wir sehen können, ist das NTP-Paket bereits auf dem Server vorhanden. Entfernen wir das vorhandene NTP-Paket:

yum remove ntp

Stellen Sie nach dem Entfernen des Pakets sicher, dass die Datei ntp.conf nicht vorhanden ist:

ls -lrt /etc/ntp.conf

Demo-Installation von NTP

Stellen Sie sicher, dass der NTP-Dienst nicht vorhanden ist, indem Sie den folgenden Befehl ausführen:

systemctl status ntp

Demo-Installation von NTP

Erstellen Sie eine neue PP-Datei, um den Code zu speichern. Von der Befehlszeile:

vi demontp.pp

Wechseln Sie in den Einfügemodus, indem Sie i auf der Tastatur drücken.

Geben Sie den folgenden Code ein, um eine neue Datei zu erstellen:

# Class Definition 
class ntpconfig {
    # Installing NTP Package 
  package {"ntp": 
    ensure=> "present",
    }
    # Configuring NTP configuration file 
  file {"/etc/ntp.conf": 
    ensure=> "present", 
    content=> "server 0.centos.pool.ntp.org iburst\n",
    }
    # Starting NTP services 
  service {"ntpd": 
    ensure=> "running",
    }
}

Nachdem Sie mit der Bearbeitung fertig sind: Drücken Sie Esc

Um die Datei zu speichern, drücken Sie :wq!

Der nächste Schritt besteht darin aus der Ferne überprüfen ob der Code Syntaxfehler enthält. Führen Sie den folgenden Befehl aus:

puppet parser validate demontp.pp

Stellen Sie sicher, dass Sie auf die umgestellt haben Wurzel Um den Test fehlerfrei abschließen zu können, führen Sie den folgenden Befehl aus:

su root

Test ist der nächste Schritt im Codeerstellungsprozess. Führen Sie den folgenden Befehl aus, um einen Smoke-Test durchzuführen:

Puppet applies demontp.pp --noop

Der letzte Schritt besteht darin Lauf die Puppe im realen Modus und überprüfen Sie die Ausgabe.

puppet apply demontp.pp

Puppet hat nichts ausgeführt, weil die Demo-Klasse einfach war definiert aber nicht , erklärt.

Solange Sie die Puppet-Klasse nicht deklarieren, wird der Code nicht angewendet.

Wir dürfen nicht vergessen, dass eine gute und klare Kommunikation der Schlüssel dazu ist, dass alle in dieselbe Richtung rudern. Wir helfen den Anwendern, ihre Kommunikation und Zusammenarbeit zu verbessern, damit sie die manuelle Arbeit vergessen und sich auf ihre Motivation, Ergebnisse und ihr Wachstum konzentrieren können. erklären die Demo-Klasse innerhalb desselben Codes mit Geben Sie den Klassennamen an am Ende des Codes:

# Class Definition 
class ntpconfig {
    # Installing NTP Package 
  package {"ntp": 
    ensure=> "present",
    }
    # Configuring NTP configuration file 
  file {"/etc/ntp.conf": 
    ensure=> "present", 
    content=> "server 0.centos.pool.ntp.org iburst\n",
    }
    # Starting NTP services 
  service {"ntpd": 
    ensure=> "running",
    }
}

# Class Declaration 
include ntpconfig

Wieder aus der Ferne überprüfen ob der Code Syntaxfehler enthält. Führen Sie den folgenden Befehl aus:

puppet parser validate demontp.pp

Stellen Sie sicher, dass Sie auf die umgestellt haben Wurzel Um den Test fehlerfrei abschließen zu können, führen Sie den folgenden Befehl aus:

su root

Testen ist der nächste Schritt im Codeerstellungsprozess. Führen Sie den folgenden Befehl aus, um einen Smoke-Test durchzuführen:

Puppet apply demontp.pp --noop

Der letzte Schritt besteht darin Lauf die Puppe im realen Modus und überprüfen Sie die Ausgabe.

puppet apply demontp.pp

Diesmal wird der Code angewendet, da die Klasse definiert und dann deklariert wurde.

Demo-Installation von NTP

Stellen Sie sicher, dass ntp.conf jetzt vorhanden ist:

ls -lrt /etc/ntp.conf

Überprüfen Sie, ob der NTP-Dienst gestartet wurde, indem Sie den folgenden Befehl ausführen:

systemctl status ntpd

Demo-Installation von NTP