Einführung
In diesem Tutorial richten wir einen HashiCorp Nomad-Cluster ein, indem wir die Konsole zur Erkennung von Diensten und Knoten verwenden. Mit drei Serverknoten und einer beliebigen Anzahl von Clientknoten bietet dieses Tutorial eine gute Grundlage für wachsende Projekte. Wir erstellen außerdem einen Snapshot in der Hetzner Cloud für unsere Clients, wodurch wir weitere Clients hinzufügen können, ohne diese manuell konfigurieren zu müssen. Dieser Cluster läuft in einem privaten Netzwerk zwischen den Servern und unterstützt alle Standardfunktionen von Nomad und der Konsole, wie z. B. Diensterkennung und Volumes.
Dieses Tutorial orientiert sich teilweise an den Schritten, die in den offiziellen Installationsanleitungen von Consul und Nomad empfohlen werden.
Voraussetzungen
- Ein Hetzner Cloud-Konto
- Einführung in Linux und Terminalbefehle
- Möglichkeit zur Verbindung mit dem Server über SSH
Dieses Tutorial wurde auf Ubuntu 24.04 Servern von Hetzner Cloud mit den Versionen Nomad 1.9.3 und Consul 1.20.1 getestet.
Begriffe und Symbole
Befehle:
local$ <دستور> # این دستور باید در ماشین محلی شما اجرا شود
server$ <دستور> # این دستور باید در سرور بهعنوان کاربر root اجرا شود
Schritt 1 – Erstellen Sie ein Basisbild
Folgende Ressourcen werden in diesem Schritt verwendet:
- 1 Hetzner Cloud-Server Modell CX22
Wir beginnen mit der Einrichtung eines Consul/Nomad-Servers auf einem neuen CX22-Server in der Hetzner Cloud. Der resultierende Snapshot dient in den folgenden Schritten als Basis-Image für alle Cluster-Server und Clients.
Schritt 1.1 – Installation von Consul
Um Consul zu installieren, führen Sie die folgenden Befehle aus:
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 consulUm die Autovervollständigungsfunktion in Consul hinzuzufügen (optional):
server$ consul -autocomplete-installSchritt 1.2 – Installieren Sie die Nomad-Binärdatei
Um Nomad zu installieren, führen Sie die folgenden Befehle aus:
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 nomadUm die Autovervollständigungsfunktion in Nomad hinzuzufügen (optional):
server$ nomad -autocomplete-installSchritt 1.3 – Vorbereiten der systemd-Dienste
Consul und Nomad sollen beim Systemstart automatisch starten. Um diese Funktion zu aktivieren, erstellen Sie für jedes der beiden Programme einen systemd-Dienst.
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_mountsErstellen Sie anschließend die Konfigurationsdatei /etc/systemd/system/consul.service mit folgendem Inhalt:
[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.targetErstellen Sie anschließend die Konfigurationsdatei /etc/systemd/system/nomad.service mit folgendem Inhalt:
[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 in dieser Phase noch nicht, da die Installation 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 Einrichtung der Cluster-Server und -Clients.
Schritt 2 – Einrichten der Cluster-Server
In diesem Schritt erstellen Sie drei Cluster-Server aus dem Basis-Image. Diese Server bilden die Basis Ihres Clusters und wählen automatisch einen Cluster-Leader.
Wir werden folgende Ressourcen nutzen:
- 1 Hetzner Cloud Network
- 3 Hetzner Cloud-Server Modell CX22
Erstellen Sie in der Hetzner Cloud Console drei CX22-Server aus dem in Schritt 1 erstellten Snapshot und verbinden Sie diese mit einem gemeinsamen Cloud-Netzwerk. In diesem Tutorial wird das Netzwerk 10.0.0.0/8 verwendet, kleinere Netzwerke sind aber ebenfalls geeignet.
Schritt 2.1 – Generieren 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, da wir ihn in den nächsten Schritten benötigen.
server$ consul keygenSchritt 2.2 – Zertifikate verteilen
Nun können wir die korrekten Zertifikate aus Schritt 1 in das Consul-Konfigurationsverzeichnis kopieren. Führen Sie dazu folgenden Befehl auf allen Servern aus:
server$ cp consul-agent-ca.pem /etc/consul.d/Die in Schritt 1 erstellten drei Serverzertifikate müssen so verteilt werden, dass jeder Server sein eigenes, eindeutiges Zertifikat mit dem zugehörigen Schlüssel erhält. Dieses Tutorial stellt die folgenden Befehle für die verschiedenen Server bereit:
[10.0.0.2] server$ cp -a dc1-server-consul-0* /etc/consul.d/
[10.0.0.3] server$ cp -a dc1-server-consul-1* /etc/consul.d/
[10.0.0.4] server$ cp -a dc1-server-consul-2* /etc/consul.d/Schritt 2.3 – Consul-Konfiguration bearbeiten
Bearbeiten Sie auf allen Servern die Konfigurationsdatei /etc/consul.d/consul.hcl und fügen Sie folgenden Inhalt hinzu:
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
}Schritt 2.4 – Consul und Nomad einrichten
Nachdem die Konfigurationen nun korrekt durchgeführt wurden, können Sie die Consul- und Nomad-Dienste starten.
server$ systemctl enable consul
server$ systemctl start consul
server$ systemctl enable nomad
server$ systemctl start nomadUm den Status der Dienste zu überprüfen, können Sie die folgenden Befehle verwenden:
server$ systemctl status consul
server$ systemctl status nomad Wenn alles korrekt funktioniert, sollten die Consul- und Nomad-Dienste laufen und der Cluster ordnungsgemäß eingerichtet sein.
Schritt 2.5 – Verbinden weiterer Knoten mit dem Cluster
Nachdem die Hauptserver des Clusters nun betriebsbereit sind, können die übrigen Knoten verbunden werden. Um Client-Knoten mit dem Cluster zu verbinden, wenden Sie einfach dieselben Einstellungen auf die Consul- und Nomad-Konfigurationen der neuen Knoten an.
Erstellen Sie auf jedem der Client-Knoten die gleichen Konfigurationsdateien wie auf dem Hauptserver und starten Sie anschließend die Dienste:
client$ cp consul-agent-ca.pem /etc/consul.d
/client$ cp dc1-client-consul-* /etc/consul.d
/client$ systemctl enable consul client$ systemctl start consul
client$ systemctl enable nomad client$ systemctl start nomadSchritt 3 – Cluster und Konfiguration überprüfen
Nach dem Starten der Server und Clients können Sie den Status des Clusters mit den folgenden Befehlen überprüfen:
client$ consul membersDieser Befehl sollte eine Liste der Knoten im Cluster anzeigen. Sie können den Status und die Einstellungen von Nomad auch mit dem folgenden Befehl überprüfen:
client$ nomad statusSchritt 4 – Clustermanagement
Nachdem Ihr Consul- und Nomad-Cluster nun ordnungsgemäß eingerichtet ist, können Sie ihn verwalten und seine verschiedenen Funktionen nutzen.
Um den Clusterstatus anzuzeigen und Verwaltungsanforderungen auszuführen, verwenden Sie die folgenden Befehle:
Konsulatsinformationen#, um allgemeine Informationen über den Consul-Cluster zu erhalten.Jobstatus für Nomaden#, um den Jobstatus von Nomad anzuzeigenNomaden-Zuteilungsstatus#, um den Status der Zuteilungen im Nomad-Cluster anzuzeigen
Verwendung des Nomad-Clusters
Nomad ermöglicht die Durchführung verschiedener Aufgaben wie das Verwalten von Jobs, das Bereitstellen von Pods und die Koordination mit Consul zur Ermittlung von Diensten.
Consul zur Ermittlung von Diensten verwenden
Consul bietet eine automatische Diensterkennung. Über die Consul-Weboberfläche (standardmäßig auf Port 8500 verfügbar) können Sie die verfügbaren Dienste anzeigen und bei Bedarf konfigurieren.
Ergebnis
In diesem Tutorial haben Sie mit Hetzner Cloud einen Cluster aus HashiCorp Nomad- und Consul-Servern in einem privaten Cloud-Netzwerk erstellt. Dieser Cluster eignet sich zur Verwaltung verschiedener umfangreicher Workloads. Außerdem wurde in diesem Tutorial die Einrichtung neuer Knoten per Snapshot und die detaillierte Konfiguration der Server behandelt.









