Einführung
In diesem Tutorial richten wir einen HashiCorp Nomad-Cluster mit Consul für die Dienst- und Knotenerkennung ein.
Mit 3 Serverknoten und einer beliebigen Anzahl von Clientknoten kann dieses Setup als Grundlage für wachsende Projekte dienen.
Wir werden außerdem einen Snapshot der Hetzner Cloud für Kunden erstellen, der es ermöglicht, weitere Kunden ohne manuelle Konfiguration hinzuzufügen.
Der Cluster läuft in einem privaten Netzwerk zwischen Servern und unterstützt alle Nomad- und Consul-Funktionen standardmäßig, wie z. B. Service Discovery und Volume-Management.
Dieses Tutorial orientiert sich teilweise an den empfohlenen Schritten im offiziellen Consul- und Nomad-Bereitstellungsleitfaden.
Voraussetzungen
- Ein Hetzner Cloud-Konto
- Grundkenntnisse in Linux und Shell-Befehlen
- Möglichkeit zur Verbindung mit dem Server über SSH
- Besitzen Sie einen Hetzner-Server?
Dieses Tutorial wurde auf Ubuntu 24.04 Hetzner Cloud-Servern mit Nomad Version 1.9.3 und Consul 1.20.1 getestet.
Begriffe und Symbole
Befehle
local$ <command> این دستور باید روی ماشین محلی اجرا شود.
server$ <command> این دستور باید بهعنوان root روی سرور اجرا شود.
Schritt 1 – Erstellen des Basisbildes
Folgende Ressource wird in diesem Schritt verwendet:
- 1 Hetzner Cloud-Server Typ CX22
Wir beginnen mit der Einrichtung eines Consul/Nomad-Servers auf einem neuen CX22-Server. Der erstellte Snapshot dient in den folgenden Schritten als Basis-Image für alle Cluster-Server und Clients.
Diese Anleitung beschreibt die Einrichtung eines Clusters mit drei Servern. Dadurch wird eine hohe Verfügbarkeit bei gleichzeitig geringen Kosten gewährleistet. Die Einrichtung eines einzelnen Servers wird nicht empfohlen, ist aber möglich. Die Anleitung enthält in den entsprechenden Schritten Hinweise zu den notwendigen Änderungen für einen oder mehrere der drei Server.
Rufen Sie die Hetzner Cloud-Weboberfläche auf und erstellen Sie einen neuen CX22-Server mit Ubuntu 24.04.
Schritt 1.1 – Installation von Consul
Consul installieren
Weitere Informationen zu den verfügbaren Versionen finden Sie auf der offiziellen Website.
server$ wget -O- https://apt.releases.hashicorp.com/gpg | gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
server$ echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/hashicorp.list
server$ apt update && apt install consulNun können wir Consul eine Autovervollständigungsfunktion hinzufügen (optional).
server$ consul -autocomplete-installTLS-Zertifikate für Consul vorbereiten
server$ consul tls ca create
server$ consul tls cert create -server -dc dc1
server$ consul tls cert create -server -dc dc1
server$ consul tls cert create -server -dc dc1
server$ consul tls cert create -client -dc dc1Wenn Sie weniger oder mehr als 3 Server im Consul-Cluster betreiben möchten, wiederholen Sie den Befehl. consul tls cert create -server -dc dc1 Anpassen.
Für einen Cluster-Server ist nur ein Zertifikat erforderlich, für 5 Server benötigen Sie 5 Zertifikate.
Diese Befehle erstellen drei Serverzertifikate und ein Clientzertifikat.
Ordner /Wurzel/ Es sollte nun mindestens die folgenden Dateien enthalten:
server$ ls
consul-agent-ca.pem
consul-agent-ca-key.pem
dc1-server-consul-0.pem
dc1-server-consul-0-key.pem
dc1-server-consul-1.pem
dc1-server-consul-1-key.pem
dc1-server-consul-2.pem
dc1-server-consul-2-key.pem
dc1-client-consul-0.pem
dc1-client-consul-0-key.pemSchritt 1.2 – Installation der Nomad-Binärdatei
Installieren Sie Nomad
Weitere Informationen zu den verfügbaren Versionen finden Sie auf der offiziellen Website.
server$ wget -O- https://apt.releases.hashicorp.com/gpg | gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
server$ echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/hashicorp.list
server$ apt update && apt install nomadFüge optional eine Autovervollständigung für Nomad hinzu:
server$ nomad -autocomplete-installDie folgende Konfigurationsdatei ist /etc/nomad.d/nomad.hcl Hinzufügen:
datacenter = "dc1"
data_dir = "/opt/nomad"Schritt 1.3 – Vorbereiten der systemd-Dienste
Consul und Nomad sollen nach einem Neustart automatisch starten. Erstellen Sie dazu für jedes Programm einen systemd-Dienst.
Zuerst müssen alle Berechtigungen festgelegt werden:
server$ chown consul:consul dc1-server-consul*
server$ chown consul:consul dc1-client-consul*
server$ chown -R consul:consul /opt/consul
server$ chown -R nomad:nomad /opt/nomad
server$ mkdir -p /opt/alloc_mounts && chown -R nomad:nomad /opt/alloc_mountsDie folgende Konfigurationsdatei ist /etc/systemd/system/consul.service Hinzufügen:
[Unit]
Description="HashiCorp Consul - A service mesh solution"
Documentation=https://www.consul.io/
Requires=network-online.target
After=network-online.target
ConditionFileNotEmpty=/etc/consul.d/consul.hcl
[Service]
EnvironmentFile=-/etc/consul.d/consul.env
User=consul
Group=consul
ExecStart=/usr/bin/consul agent -config-dir=/etc/consul.d/
ExecReload=/bin/kill --signal HUP $MAINPID
KillMode=process
KillSignal=SIGTERM
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.targetund die folgende Konfigurationsdatei zu /etc/systemd/system/nomad.service Hinzufügen:
[Unit]
Description=Nomad
Documentation=https://www.nomadproject.io/docs/
Wants=network-online.target
After=network-online.target
[Service]
User=nomad
Group=nomad
ExecReload=/bin/kill -HUP $MAINPID
ExecStart=/usr/bin/nomad agent -config /etc/nomad.d
KillMode=process
KillSignal=SIGINT
LimitNOFILE=65536
LimitNPROC=infinity
Restart=on-failure
RestartSec=2
OOMScoreAdjust=-1000
TasksMax=infinity
[Install]
WantedBy=multi-user.targetAktivieren Sie diese Dienste noch nicht, da die Einrichtung noch nicht abgeschlossen ist.
Schritt 1.5 – Erstellen eines Basis-Snapshots
Zum Schluss stoppen Sie den Server in der Hetzner Cloud-Konsole und erstellen einen Snapshot. Dieser Snapshot dient als Grundlage für die Konfiguration des Servers und der Cluster-Clients.
Nachdem die Snapshot-Erstellung erfolgreich war, löschen Sie die CX22-Instanz in diesem Schritt.
Schritt 2 – Einrichten der Cluster-Server
In diesem Schritt erstellen Sie 3 Cluster-Server aus dem in Schritt 1 erstellten Basis-Image.
Diese Server bilden die Basis Ihres Clusters und wählen dynamisch einen Cluster-Leader.
- 1 Hetzner Cloud Network
- 3 Hetzner Cloud-Server Typ CX22
Erstellen Sie in der Hetzner Cloud Console 3 CX22-Server aus dem in Schritt 1 erstellten Snapshot und ein gemeinsames Cloud-Netzwerk.
Diese Anleitung verwendet das Netzwerk 10.0.0.0/8, aber auch kleinere Netzwerke funktionieren.
Im Folgenden werden Server mit den internen Adressen 10.0.0.2, 10.0.0.3 und 10.0.0.4 erwähnt.
Falls Ihre Server unterschiedliche interne Adressen haben, ersetzen Sie diese in den nächsten Schritten.
Schritt 2.1 – Erstellen eines symmetrischen Verschlüsselungsschlüssels
Erstellen Sie zunächst einen symmetrischen Verschlüsselungsschlüssel, der von allen Servern gemeinsam genutzt wird. Bewahren Sie diesen Schlüssel an einem sicheren Ort auf; wir benötigen ihn in den nächsten Schritten.
server$ consul keygenSchritt 2.2 – Consul konfigurieren
Erstellen Sie für jeden Server eine Consul-Konfigurationsdatei. Diese Datei enthält die internen IP-Adressen der anderen Server.
Für jeden Server im Pfad /etc/consul.d/consul.hcl Erstellen Sie die folgende Datei:
datacenter = "dc1" data_dir = "/opt/consul" encrypt = "" ca_file = "/root/consul-agent-ca.pem" cert_file = "/root/dc1-server-consul-0.pem" key_file = "/root/dc1-server-consul-0-key.pem" verify_incoming = true verify_outgoing = true verify_server_hostname = true performance { raft_multiplier = 1 } retry_join = ["10.0.0.2", "10.0.0.3", "10.0.0.4"] bind_addr = "0.0.0.0" client_addr = "0.0.0.0" server = true bootstrap_expect = 3 ui = true
Ersetzen mit dem Schlüssel, der aus dem Befehl generiert wurde Consul Keygen.
Für andere Server cert_file Und Schlüsseldatei Ändern Sie es so, dass es mit dem Zertifikat für diesen Server übereinstimmt.
Schritt 2.3 – Nomad konfigurieren
Erstellen Sie für jeden Server eine Nomad-Konfigurationsdatei. Diese Datei befindet sich im Pfad /etc/nomad.d/nomad.hcl Es wird sein:
datacenter = "dc1"
data_dir = "/opt/consul"
encrypt = "your-symmetric-encryption-key"
tls {
defaults {
ca_file = "/etc/consul.d/consul-agent-ca.pem"
cert_file = "/etc/consul.d/dc1-server-consul-0.pem"
key_file = "/etc/consul.d/dc1-server-consul-0-key.pem"
verify_incoming = true
verify_outgoing = true
},
internal_rpc {
verify_server_hostname = true
}
}
retry_join = ["10.0.0.2"]
bind_addr = "{{ GetPrivateInterfaces | include \"network\" \"10.0.0.0/8\" | attr \"address\" }}"
acl = {
enabled = true
default_policy = "allow"
enable_token_persistence = true
}
performance {
raft_multiplier = 1
}Adressen ersetzen 10.0.0.x Mit der internen Adresse jedes Servers.
Schritt 2.4 – Dienste aktivieren und starten
Nachdem die Konfigurationsdateien erstellt wurden, aktivieren und starten Sie Consul und Nomad als systemd-Dienste:
server$ systemctl enable consul server$ systemctl start consul server$ systemctl enable nomad server$ systemctl start nomadÜberprüfen Sie den Status der einzelnen Dienste mit den folgenden Befehlen:
server$ systemctl status consul
server$ systemctl status nomadSchritt 2.5 – Überprüfung des Consul-Clusters
Um den Status des Consul-Clusters zu überprüfen, führen Sie folgenden Befehl aus:
server$ consul membersSie sollten eine Liste aller Server und Clients im Cluster sehen. Falls Probleme auftreten, überprüfen Sie die Konfigurationsdateien und lesen Sie die Protokolle.
server$ journalctl -u consulSchritt 2.6 – Überprüfung des Nomad-Clusters
Überprüfen Sie den Status des Nomad-Clusters mit folgendem Befehl:
server$ nomad server membersSie sollten eine Liste der Nomad-Server im Cluster sehen. Bei Problemen überprüfen Sie die Konfigurationsdateien und lesen Sie die Protokolle.
server$ journalctl -u nomadSchritt 2.7 – Überprüfen Sie die Weboberfläche
Die Web-Oberflächen von Consul und Nomad sollten nun verfügbar sein:
- Konsul:
http:// :8500 - Nomade:
http:// :4646
Ersetzen mit der öffentlichen oder privaten IP-Adresse des Servers.
Schritt 3 – Kunden hinzufügen
Jetzt können Sie Nomad-Clients hinzufügen. Dieser Schritt ähnelt der Servereinrichtung, jedoch mit der Clientrolle.
Schritt 3.1 – Clients installieren und konfigurieren
Die Installationsschritte für Nomad-Clients ähneln denen für Server. Zuerst müssen Consul und Nomad auf den Client-Rechnern installiert werden.
Diese Schritte umfassen das Herunterladen und Installieren von Softwarepaketen.
Schritt 3.2 – Consul für Kunden einrichten
Eine Consul-Konfigurationsdatei im Pfad /etc/consul.d/consul.hcl Erstellen. Für Clients ist die Konfiguration einfacher:
client {
enabled = true
network_interface = "{{ GetPrivateInterfaces | include \"network\" \"10.0.0.0/8\" | attr \"name\" }}"
}
acl {
enabled = true
}Beachten Sie, dass die IP-Adressen in retry_join Dies sind die internen Adressen der Consul-Server.
Die Zertifikats- und Schlüsseldateien (cert und key) müssen clientspezifisch sein.
Schritt 3.3 – Nomad für Kunden einrichten
Platzieren Sie die Nomad-Konfigurationsdatei im Pfad /etc/nomad.d/nomad.hcl Erstellen. Für Clients umfasst diese Konfiguration die folgenden Einstellungen:
datacenter = "dc1" data_dir = "/opt/nomad" bind_addr = "0.0.0.0" advertise { http = "10.0.1.2:4646" rpc = "10.0.1.2:4647" serf = "10.0.1.2:4648" } client { enabled = true network_interface = "eth0" servers = ["10.0.0.2:4647", "10.0.0.3:4647", "10.0.0.4:4647"] } tls { http = true rpc = true ca_file = "/root/consul-agent-ca.pem" cert_file = "/root/dc1-client-consul-0.pem" key_file = "/root/dc1-client-consul-0-key.pem" verify_server_hostname = true }Adresse werben Es sollte auf die interne Adresse dieses Clients verweisen. Außerdem die Adressen Server Sie sind identisch mit Nomad-Servern.
Schritt 3.4 – Dienste aktivieren und starten
Wie bei Servern müssen Sie die Consul- und Nomad-Dienste auch für Clients aktivieren und konfigurieren:
client$ systemctl enable consul
client$ systemctl start consul
client$ systemctl enable nomad
client$ systemctl start nomadPrüfen Sie den Status der Dienste:
client$ systemctl status consul
client$ systemctl status nomadSchritt 3.5 – Überprüfung der Client-Verbindung
Stellen Sie sicher, dass die Clients mit dem Consul-Cluster verbunden sind. Führen Sie auf einem Server folgenden Befehl aus:
server$ consul membersDie Kunden sollten in der Liste sichtbar sein. Außerdem gilt für Nomad:
server$ nomad node statusDie Clients sollten sich im Status “Bereit” befinden. Bei Problemen überprüfen Sie die Konfigurationsdateien und lesen Sie die Protokolle.
client$ journalctl -u consul
client$ journalctl -u nomadSchritt 4 – Aufgaben in Nomad ausführen
Nach erfolgreicher Einrichtung können Sie Ihre Jobs auf Nomad definieren und ausführen.
Erstellen Sie eine Aufgabenkonfigurationsdatei, zum Beispiel:
job "example" { datacenters = ["dc1"] group "example-group" { task "example-task" { driver = "docker" config { image = "nginx:latest" } resources { cpu = 500 memory = 256 } } } }Benennen Sie die obige Datei Beispiel.Nomade Speichern und mit folgendem Befehl ausführen:
server$ nomad job run example.nomadÜberprüfen Sie den Status der Aufgabenausführung:
server$ nomad job status exampleErgebnis
Sie haben erfolgreich einen Consul- und Nomad-Cluster eingerichtet. Sie können diese Infrastruktur nun zur Verwaltung Ihrer Aufgaben und Dienste nutzen.









