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.