Puppet, ein allgemein bekanntes Konfigurationsverwaltungstool für Unix- und Windows-basierte Systeme, mit dem ein Administrator sich wiederholende und fehleranfällige Systemverwaltungsaufgaben einfach automatisieren kann – einschließlich Bereitstellung, Installation von Paketen/Software, Konfigurationen und Verwaltung der gesamten Infrastruktur. Puppet gibt es in zwei Varianten – Puppet Enterprise und Puppet Open Source. Wie der Name schon sagt, ist die Enterprise-Version ein kommerzielles Produkt und die Open-Source-Version kann kostenlos heruntergeladen werden. Dieses Tutorial behandelt die Installation und Konfiguration von Open Source Puppet (Version 4) auf CentOS- und Ubuntu-basierten Systemen.
Bevor wir mit der Installation beginnen, lassen Sie uns die Architektur von Puppet verstehen.
Puppet-Master/Agent-Architektur
Puppet funktioniert im Allgemeinen auf der Grundlage des Client/Server-Modells – das ist eine Master/Agent-basierte Architektur, nämlich Puppet Master und Puppet Agent. Der Puppet-Master kontrolliert die Konfigurationsinformationen und verwaltete Puppet-Agent-Knoten fordern ihre eigenen Konfigurationskataloge an. Das folgende Diagramm zeigt den Kommunikationsfluss zwischen den Master- und Agent-Knoten.
Was ist Katalog?
Katalog ist ein Dokument, das Informationen über den gewünschten Zustand eines Systems enthält. Der Puppet-Master kompiliert den Katalog und die Puppet-Agenten wenden diese an.
Puppet-Installationsumgebung
In diesem Tutorial verwende ich zwei Knoten – puppetmaster.test.in (Puppet Master) und puppetagent.test.in (Puppet Agent) (dies sind VMs, die auf OpenStack ausgeführt werden)
Wie installiere und konfiguriere ich Puppet 4?
Schritt 1: Der erste Schritt besteht darin, die Netzwerksichtbarkeit zwischen Master- und Agent-Knoten zu überprüfen. Sie müssen sicherstellen, dass diese Domänen über DNS oder aus der Hosts-Datei aufgelöst werden.
Auf dem Puppet-Master-Knoten:
# ping puppetagent PING puppetagent.test.in (10.180.141.126) 56(84) bytes of data. 64 bytes from puppetagent.test.in (10.180.141.126): icmp_seq=1 ttl=64 time=0.347 ms --- puppetagent.test.in ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.347/0.347/0.347/0.000 ms
Auf Puppet-Agent-Knoten:
# ping puppetmaster PING puppetmaster.test.in (10.180.141.125) 56(84) bytes of data. 64 bytes from puppetmaster.test.in (10.180.141.125): icmp_seq=1 ttl=64 time=0.711 ms 64 bytes from puppetmaster.test.in (10.180.141.125): icmp_seq=2 ttl=64 time=0.316 ms --- puppetmaster.test.in ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1000ms rtt min/avg/max/mdev = 0.316/0.513/0.711/0.198 ms
Schritt 2: Installieren Sie NTP
Der Puppet-Master-Knoten fungiert als C Bescheinigung A Authority (CA) und stellen Zertifikate für die Agentenknoten aus. Das bedeutet, dass der Master-Knoten mit der richtigen Zeit synchronisieren muss, um Probleme beim Ausstellen von Zertifikaten an die Agent-Knoten zu vermeiden. Sie müssen also NTP installieren und mit dem Zeitserver Ihrer Wahl synchronisieren.
Überprüfen Sie die verfügbaren Zeitzonen im Master-Knoten:
# timedatectl list-timezones
Stellen Sie die richtige regionale Zeitzone ein:
# timedatectl set-timezone Asia/Kolkata
Installieren Sie NTP:
# yum install ntp
Mit dem Zeitserver Ihrer Wahl synchronisieren:
# ntpdate pool.ntp.org
Öffnen Sie ntp.conf und fügen Sie die Zeitserver Ihrer Wahl hinzu.
# vim /etc/ntp.conf
Speichern und beenden.
NTP-Dienst starten und aktivieren:
# systemctl restart ntpd # systemctl enable ntpd
Hinweis :Sie können NTP auch auf Agent-Knoten konfigurieren – dazu folgen Sie einfach Schritt 2 auch auf Puppet-Agent-Knoten.
Installieren Sie Puppet Server (auf Master-Knoten)
Der Puppet-Server ist ein Programm, das auf dem Puppet-Master-Knoten ausgeführt wird, und wie im Architekturdiagramm dargestellt, erstellt dieser Dienst einen Katalog und überträgt die Konfigurationen an die Puppet-Agent-Knoten.
Schritt 1: Um Puppet-Dienste zu installieren, müssen Sie das Puppet-Sammlungs-Repository aktivieren oder Pakete freigeben. Für Yum-basierte Betriebssysteme finden Sie die Pakete unter yum.puppetlabs.com und für Apt-basierte Systeme unter apt.puppetlabs.com .
Auf CentOS verwende ich ein Puppet-Repository basierend auf RPM-Paketen.
# rpm -ivh https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm puppetlabs-release-pc1-1.0.0-2.el################################# [100%]
Auf Ubuntu:
# wget https://apt.puppetlabs.com/puppetlabs-release-pc1-xenial.deb
# dpkg -i puppetlabs-release-pc1-xenial.deb Selecting previously unselected package puppetlabs-release-pc1. (Reading database ... 205725 files and directories currently installed.) Preparing to unpack puppetlabs-release-pc1-xenial.deb ... Unpacking puppetlabs-release-pc1 (1.0.0-2xenial) ... Setting up puppetlabs-release-pc1 (1.0.0-2xenial) ...
# apt-get update
Installieren Sie das Puppet-Serverpaket:
Auf CentOS:
# yum -y install puppetserver
Auf Ubuntu:
# apt-get install puppetserver
Puppet-Server starten:
# systemctl start puppetserver
(oder)
# service puppetserver start
Start des Puppet-Servers während des Systemstarts aktivieren
# systemctl enable puppetserver
(oder)
# chkconfig puppetserver on
Puppet Agent installieren (auf Agentenknoten)
Wir werden den Puppet-Agent-Dienst auf den Agent-Knoten installieren, und dies sind die Knoten, die den Katalog vom Puppet-Master-Knoten empfangen und diesen anwenden.
Puppet-Sammlungs-Repository aktivieren:
# rpm -ivh https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm
Auf Ubuntu:
# wget https://apt.puppetlabs.com/puppetlabs-release-pc1-xenial.deb
# dpkg -i puppetlabs-release-pc1-xenial.deb Selecting previously unselected package puppetlabs-release-pc1. (Reading database ... 205725 files and directories currently installed.) Preparing to unpack puppetlabs-release-pc1-xenial.deb ... Unpacking puppetlabs-release-pc1 (1.0.0-2xenial) ... Setting up puppetlabs-release-pc1 (1.0.0-2xenial) ...
$ sudo apt-get update
Puppet Agent installieren:
Auf CentOS:
# yum -y install puppet-agent
Auf Ubuntu:
# apt-get install puppet-agent
Puppet Agent starten:
Standardmäßig verweist der Agent auf den Puppet-Master-Knoten als „Puppe“. Außerdem zeigt der folgende Befehl den Hostnamen an, den der Agent verwenden wird, um sich mit dem Master zu verbinden.
# /opt/puppetlabs/puppet/bin/puppet agent --configprint server puppet
# /opt/puppetlabs/bin/puppet resource service puppet ensure=running enable=true Notice: /Service[puppet]/ensure: ensure changed 'stopped' to 'running' service { 'puppet': ensure => 'running', enable => 'true', }
Hinweis :Suchen Sie nach dem Server Einstellung in puppet.conf um den Hostnamen des Puppet Masters zu ändern.
Hinweis :Standardmäßig wird Puppet unter /opt/puppetlabs installiert Ordner.
Zertifikat für den Agentenknoten bei der Zertifizierungsstelle anfordern
Der Puppet-Masterknoten fungiert als Zertifizierungsstelle, die das Zertifikat der Agentenknoten signiert.
# /opt/puppetlabs/puppet/bin/puppet agent -t Info: Caching certificate for ca Info: csr_attributes file loading from /etc/puppetlabs/puppet/csr_attributes.yaml Info: Creating a new SSL certificate request for puppetagent.test.in Info: Certificate Request fingerprint (SHA256): BF:E9:8B:85:ED:61:B4:D5:61:2E:F2:C4:0B:0A:24:A3:D5:17:B5:E3:B4:54:53:4F:C7:39:7F:FE:49:1B:AF:4A Info: Caching certificate for ca Exiting; no certificate found and waitforcert is disabled
Auf dem Puppet-Master-Knoten – Signieren Sie die Zertifikatsanforderung des Agenten
Listen Sie die aktuellen Zertifikatsanforderungen auf:
# /opt/puppetlabs/puppet/bin/puppet cert list "puppetagent.test.in" (SHA256) BF:E9:8B:85:ED:61:B4:D5:61:2E:F2:C4:0B:0A:24:A3:D5:17:B5:E3:B4:54:53:4F:C7:39:7F:FE:49:1B:AF:4A
Unterschreiben Sie das Zertifikat:
# /opt/puppetlabs/puppet/bin/puppet cert sign puppetagent.test.in Notice: Signed certificate request for puppetagent.test.in Notice: Removing file Puppet::SSL::CertificateRequest puppetagent.test.in at '/etc/puppetlabs/puppet/ssl/ca/requests/puppetagent.test.in.pem'
Alle signierten Anfragen anzeigen:
# /opt/puppetlabs/puppet/bin/puppet cert list --all + "puppetagent.test.in" (SHA256) 0F:41:D0:67:78:BB:7B:48:F8:4B:10:10:C4:F9:FD:DD:46:19:34:4B:BE:4D:6F:4B:2F:45:57:86:33:C2:BC:45 + "puppetmaster.test.in" (SHA256) 4A:F3:F7:C0:81:7D:76:49:77:31:81:B1:70:50:AE:EE:F9:49:95:22:B0:24:0C:08:C3:5E:30:E6:29:75:28:07 (alt names: "DNS:puppet", "DNS:puppetmaster.test.in")
Und du bist fertig! Ihre erste Puppet-Infrastruktur ist fertig.
Lassen Sie uns Puppet testen
Puppet verwendet ein Tool namens Facter um Informationen (Fakten) über die Puppet Agents zu sammeln. Standardmäßig werden Informationen wie Name des Betriebssystems, Version, Hostname, IP-Adresse, SSH-Schlüssel usw. gesammelt. Sie können aber auch benutzerdefinierte Fakten hinzufügen, auf die ich in einem separaten Artikel eingehen werde.
Wie nützlich sind Fakten?
Beim Erstellen einer Konfigurationsvorlage möchten Sie möglicherweise automatisch einen Fakt (z. B. die IP-Adresse eines Agentenknotens) abrufen und an der entsprechenden Stelle ausfüllen. Ebenso möchten Sie vielleicht einen Hostnamen eines Agentenknotens lesen und ihn in der Konfigurationsvorlage verwenden.
Der folgende Befehl (auf dem Master-Knoten ausführen) listet alle gesammelten Fakten eines Agenten-Knotens auf.
# /opt/puppetlabs/puppet/bin/facter
Beispielausgabe:
::::::::::::::::::::::::::::::: partitions => { /dev/vda1 => { filesystem => "xfs", mount => "/", size => "39.99 GiB", size_bytes => 42943138304, uuid => "6c8f1327-a7c0-40a2-8bb3-89ea95a69d82" } } path => /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin processors => { count => 2, isa => "x86_64", models => [ "Intel Core Processor (Haswell, no TSX)", "Intel Core Processor (Haswell, no TSX)" ], physicalcount => 2 } :::::::::::::::::::::::::::::::::::::::::
Das ist es! Jetzt müssen Sie Manifeste und Module verstehen, um Puppet effektiv zu nutzen .