Lernen Sie, wie Sie einen Puppet Server und Agenten installieren und einrichten, damit sie miteinander kommunizieren.

Puppet ist eines der am häufigsten von Unternehmen eingesetzten Konfigurationsmanagement-Tools in der DevOps-Welt. Als DevOps-Ingenieur müssen Sie wissen, wie Sie Puppet auf Ihrem System einrichten.

Doch bevor wir beginnen, möchte ich Ihnen sagen, dass die Installation von Puppet alles andere als einfach ist. Wenn Sie auch nur einen einzigen Schritt auslassen oder den Ablauf der in diesem Tutorial beschriebenen Schritte auch nur an einer Stelle ändern, könnten Sie sich den ganzen Tag lang den Kopf zerbrechen und viele Fehler machen, aber Ihre Einrichtung wäre unvollständig. Befolgen Sie also jeden Schritt sehr sorgfältig.

Puppet hat eine Client-Server-Architektur, die aus einem Puppet Master (Server) und Puppet Agents (Client) besteht. Der Puppet Master verfügt über alle Konfigurationen, die er kompiliert und an die Puppet Agents weitergibt. Die Puppet Agents senden die Fakten an den Puppet Master und fordern in regelmäßigen Abständen Kataloge an. Puppet Master sendet den angeforderten Katalog an den Puppet Agent zurück. Der Puppet Agent wendet dann diesen Katalog auf dem Knoten an und meldet dies an den Master zurück.

Jetzt, da Sie ein grundlegendes Verständnis von Puppet haben, können wir loslegen und einen Puppet Master und einen Puppet Agent einrichten.

Wenn Sie ein absoluter Anfänger sind, sollten Sie sich diesen Online-Videokurs ansehen.

Details zur Umgebung

Ich verwende 2 Ubuntu 18.04-Rechner. Einer wird als Puppet Master und der andere als Puppet Agent fungieren. Nachfolgend finden Sie die Details zu den Rechnern:

Puppet Master (Server)

  • Hostname: puppet, puppet.geekflate.com
  • IP-Adresse: 192.168.0.108

Puppet Agent (Client)

  • Hostname: puppetagent
  • Ip-Adresse: 192.168.0.107

Installieren von Puppet Server

Bevor ich mit der Installation beginne, muss ich die Datei /etc/hosts sowohl auf dem Master als auch auf dem Agent bearbeiten, damit sie sich gegenseitig auflösen können.

Auf dem Master-Knoten

geekflare@puppet-master:~$ sudo gedit /etc/hosts

<x><x><x>[sudo]</x></x></x> Passwort für geekflare:

127.0.0.1 localhost
127.0.1.1 geekflare
192.168.0.108 puppet puppet.geekflare.com/de

Auf dem Agentenknoten

geekflare@puppet-agent:~$ sudo gedit /etc/hosts

127.0.0.1 localhost
127.0.1.1 geekflare
192.168.0.107 puppetagent
192.168.0.108 puppet puppet.geekflare.com/de

jetzt muss ich ein Puppet-Repository auf meinem Master-Knoten einrichten und es aktualisieren.

Laden Sie das Puppet-Repository herunter.

geekflare@puppet-master:~$ wget https://apt.puppetlabs.com/puppet6-release-bionic.deb

--2019-10-15 15:41:34-- https://apt.puppetlabs.com/puppet6-release-bionic.deb

Auflösen von apt.puppetlabs.com (apt.puppetlabs.com)... 99.86.19.107, 99.86.19.59, 99.86.19.2, ...

Verbindung zu apt.puppetlabs.com (apt.puppetlabs.com)|99.86.19.107|:443... hergestellt.

HTTP-Anfrage gesendet, warte auf Antwort... 200 OK

Länge: 11736 (11K) [application/x-debian-package]

Speichern in: 'puppet6-release-bionic.deb'

puppet6-release-bio 100%[===================>] 11.46K --.-KB/s in 0s  

2019-10-15 15:41:34 (236 MB/s) - 'puppet6-release-bionic.deb' gespeichert [11736/11736]

Puppet 6 Repo hinzufügen und konfigurieren.

geekflare@puppet-master:~$ sudo dpkg -i puppet6-release-bionic.deb

Wählt das zuvor nicht ausgewählte Paket puppet6-release aus.

(Lesen der Datenbank ... 187041 Dateien und Verzeichnisse sind derzeit installiert.)

Vorbereiten des Entpackens von puppet6-release-bionic.deb ...

Entpacken von puppet6-release (6.0.0-5bionic) ...

Einrichten von puppet6-release (6.0.0-5bionic) ...

Aktualisieren Sie die Repository-Liste.

geekflare@puppet-master:~$ sudo apt update

Treffer:1 https://download.docker.com/linux/ubuntu bionic InRelease

Treffer:2 http://security.ubuntu.com/ubuntu cosmic-security InRelease         

Treffer:3 http://ppa.launchpad.net/ansible/ansible/ubuntu kosmisch InRelease        

Treffer:4 http://download.virtualbox.org/virtualbox/debian kosmisch InRelease [4.429 B]

Treffer:5 http://apt.puppetlabs.com bionic InRelease [85.3 kB]   

Treffer:6 http://us.archive.ubuntu.com/ubuntu kosmische InRelease         

Treffer:7 http://us.archive.ubuntu.com/ubuntu cosmic-updates InRelease         

Treffer:8 http://download.virtualbox.org/virtualbox/debian cosmic/contrib amd64 Pakete [1.466 B]

Hole:9 http://apt.puppetlabs.com bionic/puppet6 alle Pakete [13.5 kB]

Treffer:10 http://us.archive.ubuntu.com/ubuntu cosmic-backports InRelease

Hole:11 http://apt.puppetlabs.com bionic/puppet6 i386 Pakete [13.5 kB]

Hole:12 http://apt.puppetlabs.com bionic/puppet6 amd64 Pakete [32.3 kB]

Holt 151 kB in 2s (61.9 kB/s) 

Paketlisten lesen... Erledigt

Abhängigkeits-Baum erstellen      

Lesen von Statusinformationen... Erledigt

234 Pakete können upgegradet werden. Führen Sie 'apt list --upgradable' aus, um sie zu sehen.

Installieren von Puppet Server

Führen Sie den folgenden Befehl auf dem Master-Knoten aus, um den Puppet-Server darauf zu installieren.

geekflare@puppet-master:~$ sudo apt install -y puppetserver

Paketlisten lesen... Erledigt

Abhängigkeitsliste erstellen      

Lesen von Statusinformationen... Erledigt

Die folgenden zusätzlichen Pakete werden installiert:

 ca-certificates-java java-common openjdk-8-jre-headless puppet-agent

Empfohlene Pakete:

 default-jre fonts-dejavu-extra fonts-ipafont-gothic fonts-ipafont-mincho

 fonts-wqy-microhei fonts-wqy-zenhei

Die folgenden NEUEN Pakete werden installiert:

 ca-certificates-java java-common openjdk-8-jre-headless puppet-agent

 puppetserver

0 upgegradet, 5 neu installiert, 0 zu entfernen und 234 nicht upgegradet.

Sie benötigen 109 MB an Archiven.

Nach diesem Vorgang werden 287 MB zusätzlicher Speicherplatz benötigt.

Get:1 http://us.archive.ubuntu.com/ubuntu cosmic/main amd64 java-common all 0.68ubuntu1 [6.988 B]

Hole:2 http://apt.puppetlabs.com bionic/puppet6 amd64 puppet-agent amd64 6.10.1-1bionic [19.9 MB]

Get:3 http://us.archive.ubuntu.com/ubuntu cosmic-updates/universe amd64 openjdk-8-jre-headless amd64 8u212-b03-0ubuntu1.18.10.1 [27.2 MB]

Get:4 http://apt.puppetlabs.com bionic/puppet6 amd64 puppetserver all 6.7.1-1bionic [61.5 MB]

Get:5 http://us.archive.ubuntu.com/ubuntu cosmic/main amd64 ca-certificates-java all 20180516ubuntu1 [12.3 kB]

Abgerufen 109 MB in 1min 41s (1,072 kB/s)     

Entpacken von puppetserver (6.7.1-1bionic) ...

Einrichten von puppet-agent (6.10.1-1bionic) ...

Symlink /etc/systemd/system/multi-user.target.wants/puppet.service → /lib/systemd/system/puppet.service erstellt.

Symlink erstellt /etc/systemd/system/multi-user.target.wants/pxp-agent.service → /lib/systemd/system/pxp-agent.service.

Entfernt /etc/systemd/system/multi-user.target.wants/pxp-agent.service.

Einrichten von java-common (0.68ubuntu1) ...

Verarbeitung von Triggern für libc-bin (2.28-0ubuntu1) ...

Verarbeitung von Triggern für systemd (239-7ubuntu10.12) ...

Verarbeitet Trigger für man-db (2.8.4-2) ...

Verarbeitung von Triggern für ca-certificates (20180409) ...

Aktualisieren von Zertifikaten in /etc/ssl/certs...

0 hinzugefügt, 0 entfernt; fertig.

Ausführen von Hooks in /etc/ca-certificates/update.d...

erledigt.

Einrichten von ca-certificates-java (20180516ubuntu1) ...

head: kann '/etc/ssl/certs/java/cacerts' nicht zum Lesen öffnen: Keine solche Datei oder Verzeichnis

Hinzufügen von debian:SSL.com_EV_Root_Certification_Authority_ECC.pem

Hinzufügen von debian:ssl-cert-snakeoil.pem

Hinzufügen von debian:SwissSign_Gold_CA_-_G2.pem

Hinzufügen von debian:SZAFIR_ROOT_CA2.pem

Hinzufügen von debian:OpenTrust_Root_CA_G3.pem

Hinzufügen von debian:TWCA_Root_Certification_Authority.pem

Hinzufügen von debian:QuoVadis_Root_CA_2_G3.pem

Hinzufügen von debian:DST_Root_CA_X3.pem

Hinzufügen von debian:SecureSign_RootCA11.pem

Hinzufügen von debian:QuoVadis_Root_CA_1_G3.pem

Hinzufügen von debian:T-TeleSec_GlobalRoot_Class_3.pem

Hinzufügen von debian:Go_Daddy_Root_Zertifikat_Autorität_-_G2.pem

Hinzufügen von debian:Actalis_Authentifizierung_Root_CA.pem

Hinzufügen von debian:Chambers_of_Commerce_Root_-_2008.pem

erledigt.

Verarbeitung von Triggern für ca-Zertifikate (20180409) ...

Aktualisierung der Zertifikate in /etc/ssl/certs...

0 hinzugefügt, 0 entfernt; fertig.

Ausführen von Hooks in /etc/ca-certificates/update.d...

erledigt.

erledigt.

Einrichten von openjdk-8-jre-headless:amd64 (8u212-b03-0ubuntu1.18.10.1) ...

Einrichten von puppetserver (6.7.1-1bionic) ...

usermod: keine Änderungen

Verarbeitung von Triggern für systemd (239-7ubuntu10.12) ...

Puppet Server konfigurieren

Bearbeiten Sie die Datei puppetserver, wie unten gezeigt. Damit konfigurieren Sie die JVM des Puppet-Servers.

geekflare@puppet-master:~$ sudo gedit /etc/default/puppetserver

 
# Ändern Sie dies, wenn Sie die Speicherzuweisung ändern, JMX aktivieren möchten usw

JAVA_ARGS="-Xms512m -Xmx512m -Djruby.logger.class=com.puppetlabs.jruby_utils.jruby.Slf4jLogger"

Bearbeiten Sie die Puppet-Konfigurationsdatei, um die Puppet-Server-Einstellungen zu ändern.

geekflare@puppet-master:~$ sudo gedit /etc/puppetlabs/puppet/puppet.conf


# Diese Datei kann verwendet werden, um die Standardeinstellungen von Puppet zu überschreiben.

# Unter den folgenden Links finden Sie weitere Einzelheiten zu den verfügbaren Einstellungen:

# - https://puppet.com/docs/puppet/latest/config_important_settings.html

# - https://puppet.com/docs/puppet/latest/config_about_settings.html

# - https://puppet.com/docs/puppet/latest/config_file_main.html

# - https://puppet.com/docs/puppet/latest/configuration.html

[Master]

vardir = /opt/puppetlabs/server/data/puppetserver

logdir = /var/log/puppetlabs/puppetserver

rundir = /var/run/puppetlabs/puppetserver

pidfile = /var/run/puppetlabs/puppetserver/puppetserver.pid

codedir = /etc/puppetlabs/code

dns_alt_names = puppet,puppet.geekflare.com/de

<x><x>[main]</x></x>

certname = puppet.geekflare.com/de

server = puppet.geekflare.com/de

umgebung = Produktion

laufintervall = 15m

Puppet Server muss eine Root- und eine Zwischensignatur, CA, erzeugen.

geekflare@puppet-master:~$ sudo /opt/puppetlabs/bin/puppetserver ca setup

Erzeugung erfolgreich. Finden Sie Ihre Dateien in /etc/puppetlabs/puppet/ssl/ca

Starten und aktivieren Sie den Puppetserver-Dienst.

geekflare@puppet-master:~$ sudo systemctl start puppetserver

geekflare@puppet-master:~$ sudo systemctl enable puppetserver

Synchronisieren des Status von puppetserver.service mit dem SysV-Service-Skript mit /lib/systemd/systemd-sysv-install.

Wird ausgeführt: /lib/systemd/systemd-sysv-install enable puppetserver

Installation von Puppet Agent

Führen Sie die folgenden Schritte auf dem Agentenknoten genauso aus wie auf dem Master-System. Das Puppet-Repository muss auf allen Agent-Knoten vorhanden sein.

geekflare@puppet-agent:~$ wget https://apt.puppetlabs.com/puppet6-release-bionic.deb

geekflare@puppet-agent:~$ sudo dpkg -i puppet6-release-bionic.deb

geekflare@puppet-agent:~$ sudo apt update

Führen Sie den folgenden Befehl auf dem Agent-Knoten aus, um den Puppet-Agent zu installieren.

geekflare@puppet-agent:~$ sudo apt install -y puppet-agent

Paketlisten lesen... Erledigt

Abhängigkeitsliste erstellen      

Lesen von Statusinformationen... Erledigt

Die folgenden NEUEN Pakete werden installiert:

 puppet-agent

0 upgegradet, 1 neu installiert, 0 zu entfernen und 233 nicht upgegradet.

Sie benötigen 19,9 MB an Archiven.

Nach diesem Vorgang werden 115 MB zusätzlicher Speicherplatz benötigt.

Get:1 http://apt.puppetlabs.com bionic/puppet6 amd64 puppet-agent amd64 6.10.1-1bionic [19.9 MB]

Holt 19,9 MB in 2s (8.488 kB/s)     

Wählt das zuvor nicht ausgewählte Paket puppet-agent aus.

(Lesen der Datenbank ... 185786 Dateien und Verzeichnisse sind derzeit installiert.)

Vorbereiten des Entpackens von .../puppet-agent_6.10.1-1bionic_amd64.deb ...

Entpacken von puppet-agent (6.10.1-1bionic) ...

Einrichten von puppet-agent (6.10.1-1bionic) ...

Symlink /etc/systemd/system/multi-user.target.wants/puppet.service → /lib/systemd/system/puppet.service erstellt.

Symlink erstellt /etc/systemd/system/multi-user.target.wants/pxp-agent.service → /lib/systemd/system/pxp-agent.service.

Entfernt /etc/systemd/system/multi-user.target.wants/pxp-agent.service.

Verarbeitung von Triggern für libc-bin (2.28-0ubuntu1) ...

Puppet Agent konfigurieren

Bearbeiten Sie die Puppet-Konfigurationsdatei auf dem Agent-Knoten.

geekflare@puppet-agent:~$ sudo gedit /etc/puppetlabs/puppet/puppet.conf

<x><x>[main]</x></x>

certname = puppetagent

server = puppet.geekflare.com/de

umgebung = Produktion

laufintervall = 15m

Führen Sie den folgenden Befehl aus, um den Puppet-Dienst zu starten. Dieser Befehl wird auch automatisch nach dem Booten gestartet.

geekflare@puppet-agent:~$ sudo /opt/puppetlabs/bin/puppet resource service puppet ensure=running enable=true

service { 'puppet':

 ensure => 'running',

 enable => 'true',

} 

Zertifikate generieren und signieren

Wenn der Agent zum ersten Mal startet, sendet er eine Anforderung zum Signieren eines Zertifikats an den Puppet-Master. Der Master muss dieses Zertifikat prüfen und signieren. Danach holt sich der Agent Kataloge vom Master und wendet sie regelmäßig auf die Agentenknoten an.

Jetzt, wo der Puppet Agent läuft, führen Sie den folgenden Befehl auf dem Master-Knoten aus, um zu prüfen, ob er eine Zertifikatsignierungsanforderung erhalten hat.

Auf dem Master-Knoten

geekflare@puppet-master:~$ sudo /opt/puppetlabs/bin/puppetserver ca list

<x><x><x>[sudo]</x></x></x> Passwort für geekflare:

Angeforderte Zertifikate:

   puppetagent (SHA256) EA:68:23:B5:C3:71:2C:E6:4A:6A:3B:2F:24:F5:B8:5B:50:F7:3F:12:89:DE:B1:EB:D1:0A:74:3E:48:C3:D7:35

Signieren Sie das vom Agenten gesendete Zertifikat.

geekflare@puppet-master:~$ sudo /opt/puppetlabs/bin/puppetserver ca list

<x><x><x>[sudo]</x></x></x> Passwort für geekflare:

Angeforderte Zertifikate:

   puppetagent (SHA256) EA:68:23:B5:C3:71:2C:E6:4A:6A:3B:2F:24:F5:B8:5B:50:F7:3F:12:89:DE:B1:EB:D1:0A:74:3E:48:C3:D7:35

Führen Sie den unten stehenden Befehl aus, um die gesamte Zertifikatsliste zu überprüfen. Ein Zertifikat ist bereits vorhanden, es handelt sich um ein Standardzertifikat des Master-Knotens, und das andere stammt vom Agent-Knoten.

geekflare@puppet-master:~$ sudo /opt/puppetlabs/bin/puppetserver ca list --all

Signierte Zertifikate:

   puppetagent (SHA256) EA:68:23:B5:C3:71:2C:E6:4A:6A:3B:2F:24:F5:B8:5B:50:F7:3F:12:89:DE:B1:EB:D1:0A:74:3E:48:C3:D7:35

   puppet.geekflare.com/de (SHA256) 71:30:5B:C8:C5:CE:28:A0:60:5C:4F:39:26:D0:FC:DA:DF:0A:0F:4D:ED:D4:B1:9C:05:1A:38:2F:D6:5F:9C:06 alt names: ["DNS:puppet.geekflare.com/de", "DNS:puppet", "DNS:puppet.geekflare.com/de"]

Auf dem Agentenknoten

Führen Sie nun diesen Befehl aus, um zu testen, ob die Verbindung zwischen Master- und Agent-Knoten hergestellt wurde und alles einwandfrei funktioniert.

geekflare@puppet-agent:~$ sudo /opt/puppetlabs/bin/puppet agent --test

Info: Verwendung der konfigurierten Umgebung 'production'

Info: Abrufen von Pluginfacts

Info: Abrufen von Plugin

Info: Abrufen von Gebietsschemata

Info: Zwischenspeichern des Katalogs für Puppet-Agent

Info: Anwenden der Konfigurationsversion '1571171191'

Hinweis: Katalog in 0.02 Sekunden angewendet

Puppet-Beispiel

Lassen Sie uns ein einfaches Puppet-Beispiel ausführen. Ich werde ein einfaches Puppet-Manifest erstellen, das ein Verzeichnis mit einer bestimmten Berechtigung anlegt.

Auf dem Master-Knoten:

geekflare@puppet-master:~$ sudo gedit /etc/puppetlabs/code/environments/production/manifests/site.pp

Fügen Sie den folgenden Inhalt ein.

node 'puppetagent' { # Gilt nur für den genannten Knoten. Wenn nichts erwähnt wird, gilt es für alle.

    file { '/home/test': # Ressourcentyp Datei

            ensure => 'Verzeichnis', # Verzeichnis erstellen

            owner => 'root', # Eigentümerschaft

            group => 'root', # Gruppenname

            mode => '0755', # Verzeichnisberechtigungen

         }

}

Führen Sie nun den unten stehenden Befehl für einen Agenten aus, um sich mit dem Master zu verbinden und die Konfigurationen abzurufen. Nachdem Sie diesen Befehl ausgeführt haben, sollte das Verzeichnis auf dem Agentenknoten erstellt werden.

Auf dem Agentenknoten

geekflare@puppet-agent:~$ sudo /opt/puppetlabs/bin/puppet agent --test

<x><x><x>[sudo]</x></x></x> Passwort für geekflare:

Info: Verwendung der konfigurierten Umgebung 'production'

Info: Abrufen von Pluginfacts

Info: Abrufen von Plugin

Info: Abrufen von Gebietsschemata

Info: Zwischenspeichern des Katalogs für Puppetagent

Info: Anwenden der Konfigurationsversion '1571333010'

Hinweis: /Stage<x><x>[main]</x></x>/Main/Node[puppetagent]/File[/home/test]/ensure: erstellt

Bemerkung: Katalog in 0,05 Sekunden angewendet

Führen Sie den Befehl ls aus, um zu überprüfen, ob der Director erfolgreich erstellt wurde.

geekflare@puppet-agent:~$ ls -l /home/

gesamt 32

drwxr-xr-x 13 geekflare geekflare 4096 Jul 19 08:06 geekflare

drwx------ 2 root root 16384 Okt 23 2018 verloren gefunden

drwxr-xr-x 23 geekflare geekflare 4096 Oct 17 11:02 geekflare

drwxr-xr-x 2 root root 4096 Oct 17 13:23 test

drwxr-xr-x 2 benutzername benutzername 4096 Jun 29 09:38 benutzername

Das war’s!

Fazit

Dies war ein einfaches Beispiel, um zu zeigen, wie es funktioniert. Aber stellen Sie sich ein größeres Szenario vor, bei dem Sie eine bestimmte Konfiguration auf Hunderten von Servern installieren oder anwenden müssen. Puppet kann Ihnen dabei helfen, dies in wenigen Minuten zu erreichen.

Wenn Sie sich mit Automatisierung beschäftigen und mehr darüber erfahren möchten, können Sie sich diesen Udemy-Kurs ansehen, in dem es um Ansible, Puppet und Salt geht.