Installation des Nomad-Clusters mit Consul auf Cloud-Servern

0 Aktien
0
0
0
0

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

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 consul

Nun können wir Consul eine Autovervollständigungsfunktion hinzufügen (optional).

server$ consul -autocomplete-install

TLS-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 dc1

Wenn 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.pem

Schritt 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 nomad

Füge optional eine Autovervollständigung für Nomad hinzu:

server$ nomad -autocomplete-install

Die 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_mounts

Die 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.target

und 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.target

Aktivieren 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 keygen

Schritt 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 nomad

Schritt 2.5 – Überprüfung des Consul-Clusters

Um den Status des Consul-Clusters zu überprüfen, führen Sie folgenden Befehl aus:

server$ consul members

Sie 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 consul

Schritt 2.6 – Überprüfung des Nomad-Clusters

Überprüfen Sie den Status des Nomad-Clusters mit folgendem Befehl:

server$ nomad server members

Sie sollten eine Liste der Nomad-Server im Cluster sehen. Bei Problemen überprüfen Sie die Konfigurationsdateien und lesen Sie die Protokolle.

server$ journalctl -u nomad

Schritt 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 nomad

Prüfen Sie den Status der Dienste:

client$ systemctl status consul 
client$ systemctl status nomad

Schritt 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 members

Die Kunden sollten in der Liste sichtbar sein. Außerdem gilt für Nomad:

server$ nomad node status

Die 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 nomad

Schritt 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 example

Ergebnis

Sie haben erfolgreich einen Consul- und Nomad-Cluster eingerichtet. Sie können diese Infrastruktur nun zur Verwaltung Ihrer Aufgaben und Dienste nutzen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Das könnte Ihnen auch gefallen