Einleitung
Puppet ist ein Open-Source Konfigurationsmanagement Tool, welches es dem Benutzer erlaubt eine beliebige Anzahl an Servern automatisiert zu konfigurieren.
Das heißt, mit Puppet kann man auf einem Hauptserver ("Master") Anweisungen erstellen, die festlegen, wie andere Server eingerichtet werden sollen. Diese Anweisungen werden automatisch von allen anderen Servern ("Agenten") übernommen.
Dieses Tutorial vermittelt die Basisschritte, um eine Puppet Master / Agent Umgebung auf Ubuntu 24.04 aufzusetzen. Dieses Tutorial geht nicht in Gänze auf die Master / Agent Konfigurationsmöglichkeiten ein, auch die Puppet Module werden nicht behandelt. Für weitere Informationen, siehe die offizielle Dokumentation.
Voraussetzungen
- 2 Server mit Ubuntu 24.04
- Zugriff auf den root-Benutzer oder einen Benutzer mit sudo-Rechten
- Benutzen eines NTP Service (Zeitunterschiede können zu Problemen führen)
- Port 8140 in der Firewall für eingehenden Traffic freigeben (INPUT chain)
Beispiel-Benennungen
-
Server 1:
Hostname:
puppetmaster
Auf diesem Server wird Puppet Master installiert. -
Server 2:
Hostname:
puppetagent
Auf diesem Server wird Puppet Agent installiert.
Schritt 1 - Hostnamen hinzufügen
Bevor Puppet installiert wird, muss auf beiden Servern ein Eintrag für die Hostnamen hinzugefügt werden. Bearbeite dafür auf beiden Servern diese Datei:
sudo nano /etc/hosts
-
Auf dem Server, auf dem Puppet Master installiert werden soll
» Füge in der Zeile, in der "localhost" steht zusätzlich "puppet" hinzu.
» Füge eine neue Zeile ein, in der die IP-Adresse vom Server steht, auf dem Puppet Agent installiert werden soll, gefolgt von "puppetagent".
127.0.0.1 localhost puppet <ip_of_agent_server> puppetagent
-
Auf dem Server, auf dem Puppet Agent installiert werden soll
» Füge eine neue Zeile ein, in der die IP-Adresse vom Server steht, auf dem Puppet Master installiert werden soll, gefolgt von "puppet".
<ip_of_master_server> puppet
Schritt 2 - Puppet Master installieren
Dieser Schritt muss ausschließlich auf Server 1 (
puppetmaster
) ausgeführt werden.
Mit den folgenden Befehlen wird der Puppet Master installiert. Dabei wird das Paket direkt von Puppet in der aktuellsten Version für Ubuntu 24.04 (noble) bezogen.
wget https://apt.puppet.com/puppet-release-noble.deb
sudo dpkg -i puppet-release-noble.deb
sudo apt update
sudo apt install puppetserver
Prüfe mit puppetserver --version
, ob Puppet Master erfolgreich installiert wurde. Als nächstes kann der Puppetserver mit diesen Befehlen gestartet werden. Zusätzlich soll der Puppetserver auch nach einem Reboot automatisch gestartet werden. Anschließend sollte der Status geprüft werden, um sicherzugehen, dass es keine Fehlermeldungen gibt.
sudo systemctl start puppetserver
sudo systemctl enable puppetserver
sudo systemctl status puppetserver
Solltest du beim Starten des Puppetservers folgende Fehlermeldung erhalten:
Job for puppetserver.service failed because the control process exited with error code
Kann das auf mangelnden RAM hinweisen. Hier kann es helfen in der Puppet Konfiguration die Arbeitsspeichergröße anzupassen, bspw. auf 1g.
sudo nano /etc/default/puppetserver
JAVA_ARGS="-Xms1g -Xmx1g -Djruby.logger.class=com.puppetlabs.jruby_utils.jruby.Slf4jLogger"
Bei Problemen mit dem Zertifikat, kann mittels sudo puppetserver ca setup
ein Neues erstellt werden.
Schritt 3 - Puppet Agent installieren
Dieser Schritt muss ausschließlich auf Server 2 (
puppetagent
) ausgeführt werden.
Um den Puppet Agent zu installieren, nutze folgende Befehle:
wget https://apt.puppet.com/puppet-release-noble.deb
sudo dpkg -i puppet-release-noble.deb
sudo apt update
sudo apt install puppet-agent
Prüfe mit puppet --version
, ob Puppet Agent erfolgreich installiert wurde. Wenn ja, muss in der Puppet Agent Konfiguration der Puppet Master angegeben werden. In dieser Datei kann auch ein Intervall für die Puppet Runs definiert werden. Mit dem unteren Beispiel, wird der Puppet Run alle 30 Minuten ausgeführt (siehe "runinterval").
sudo nano /etc/puppet/puppet.conf
Füge folgenden Inhalt hinzu:
[main]
certname = puppetagent
server = puppet
runinterval = 30m
Wie zuvor, starte nun Puppet, richte ein, dass Puppet auch nach einem Reboot automatisch startet und prüfe ob der Service ohne Fehler starten konnte.
sudo systemctl start puppet
sudo systemctl enable puppet
sudo systemctl status puppet
Schritt 4 - Zertifikate signieren
Nun da Puppet Master und Puppet Agent installiert und konfiguriert sind, geht es an die Kommunikation zwischen den Beiden. Hierzu verwendet Puppet Zertifikate, welche vom Puppet Master signiert werden müssen. Durch den Start des Puppet Agents wurde bereits eine Zertifikatsanfrage an den Puppet Master gestellt. Offene Zertifikatsanfragen können wie folgend beschrieben verwaltet werden.
-
Auf
puppetmaster
Alle offenen Zertifikatsanfragen anzeigen:
sudo puppetserver ca list
Beispielausgabe:
Requested Certificates: puppetagent (SHA256) 55:F3:8B:8D:E8:41:25:0D:A1:CC:0C:D9:73:98:99:6E:73:77:83:97:9D:30:98:03:14:62:3B:F8:7A:25:35:41
In der Ausgabe werden alle anfragenden Agents gelistet. Achte darauf, nur Zertifikate zu signieren die dir bekannt sind.
sudo puppetserver ca sign --certname <name>
-
Auf
puppetagent
Ob die Verbindung zwischen Puppet Master und Agent funktioniert, lässt sich mit folgendem Befehl prüfen:
puppet ssl bootstrap
Die Ausgabe sollte ungefähr so aussehen:
Info: csr_attributes file loading from /home/holu/.puppet/etc/csr_attributes.yaml Info: Creating a new SSL certificate request for puppetagent Info: Certificate Request fingerprint (SHA256): 2F:2D:8F:94:82:F9:1B:B7:E3:C8:80:DB:99:29:B4:64:AC:BA:F9:E1:D6:79:4C:5F:26:0B:23:8A:1A:78:59:FF Info: Downloaded certificate for puppetagent from https://puppet:8140/puppet-ca/v1 Notice: Completed SSL initialization
Sollte eine Fehlermeldung wie
Couldn't fetch certificate from CA server
angezeigt werden, verbinde dich erneut mit Server 1puppetmaster
, liste alle offenen Zertifikatanfragen und signiere das Zertifikat falls nötig erneut.
Du kannst nun anfangen deine Server via Puppet automatisiert zu managen.
Schritt 5 - Beispieldatei erstellen
Um eine Systemkonfiguration zu beschreiben, werden sogenannte Manifeste benötigt. In diesem Tutorial wird ein einfaches Beispiel verwendet, um die Basisfunktion zu zeigen.
Verbinde dich mit puppetmaster
und erstelle ein neues Manifest:
sudo mkdir -p /etc/puppet/code/environments/production/manifests
sudo nano /etc/puppet/code/environments/production/manifests/site.pp
Füge folgenden Inhalt hinzu:
node 'puppetagent' { # will be executed only for this node; use hostname
file { '/tmp/example-hello': # resource type and filename
ensure => present, # must be present
mode => '0644', # file permission
content => "Hello World!\n", # file content
}
}
node default {} # will be executed for all nodes not mentioned explicitly
Mit dem nächsten automatischen Puppet Run, wird auf dem puppetagent
eine neue Datei erstellt. In "Schritt 3" wurde der Puppet Run auf alle 30 Minuten eingerichtet (runinterval = 30m
). Um sofort einen Puppet Run durchlaufen zu lassen, verbinde dich mit puppetagent
und nutze diesen Befehl, um den Puppet Run manuell zu starten:
sudo /usr/bin/puppet agent --test
Nachdem der Puppet Run erfolgreich durchlaufen ist, solltest du den Output "Hello World!" bekommen, wenn du diesen Befehl auf puppetagent
ausführst:
cat /tmp/example-hello
Ergebnis
Puppet sollte nun installiert sein und du kannst direkt mit deinen eigenen Manifesten loslegen!