5 min zu lesen.
Die Verwaltung von verteilten Anwendungen und Workloads auf Servern kann eine komplexe Aufgabe sein. HashiCorp Nomad bietet eine Lösung, die es ermöglicht, Container und andere Workloads effizient auf einem Cluster zu orchestrieren. In diesem ersten Teil der Nomad-Tutorials werden wir Schritt für Schritt durch die Installation von Nomad auf einem Ubuntu-Server führen.
Die Installation von Nomad erfolgt sowohl auf dem Client als auch auf dem Server. Im folgenden Abschnitt wird die Installation von Nomad auf einem Mac-Client und einem Ubuntu-Server beschrieben.
Füge zuerst das HashiCorp-Repository zu Brew hinzu:
brew tap hashicorp/tap
Danach kann Nomad direkt installiert werden:
brew install hashicorp/tap/nomad
Um zur neuesten Version zu aktualisieren, führe das folgende aus:
brew upgrade hashicorp/tap/nomad
Installiere zunächst auf dem Ubuntu-Server einige Kernpakete, die benötigt werden, um die HashiCorp-Repositories auf Ubuntu hinzuzufügen:
sudo apt-get update && \
sudo apt-get install wget gpg coreutils
Füge den HashiCorp-Archivschlüssel hinzu:
wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
Füge das HashiCorp-Repository zur Liste der Paketquellen hinzu:
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
Aktualisiere die Paketquellen und installiere Nomad
sudo apt-get update && sudo apt-get install nomad
Weitere Informationen zur Installation auf anderen Betriebssystemen findest du hier.
Zusätzlich ist es erforderlich, Docker auf dem Server zu installieren. Nomad wird später Docker nutzen, um Container hosten zu können. Hier sind die Schritte zur Docker-Installation auf Ubuntu:
sudo apt update
sudo apt install -y docker.io
Die Erstellung von Zertifikaten ist optional, jedoch empfohlen, wenn eine sichere Kommunikation erforderlich ist. Hier sind die Schritte zur Erstellung von Zertifikaten:
nomad tls ca create
nomad tls cert create -server
nomad tls cert create -cli
Mit diesen Befehlen erstellst jeweil Zertifikats und Schlüssel für eine Zertifizierungsstelle (CA) für Nomad, ein Server und für die CLI (Command Line Interface). Beachte, dass das Server-Zertifikat für die Absicherung der Kommunikation zwischen den Nomad-Servern und der CLI verwendet wird.
Später wird zur Authentifizierung gegen die Nomad UI ein Zertifikat benötigt. Dieses wird in dem Browser oder im Betriebsystem installiert.
Um das Zertifikat zu generieren erstellt der nachfolgende Befehl eine PKCS#12-Datei (browser.p12), die das Zertifikat und den privaten Schlüssel enthält.
openssl pkcs12 -export -in global-cli-nomad.pem -inkey global-cli-nomad-key.pem -out browser.p12
Erstelle auf dem Server ein Verzeichnis in das die Zertifikate abgelegt werden können.
sudo mkdir -p /etc/tls/nomad/
Als nächstes werden die Zertifikate auf den Server kopiert, dazu wird einmal das CA Zertifikat und der Schlüssel sowie das Certifikat des Servers herüber kopiert. Ersetzte hierzu username
und zieladresse
mit deinen Werten.
scp /path/to/nomad-agent-ca.pem username@zieladresse:/etc/tls/nomad
scp /path/to/global-server-nomad.pem username@zieladresse:/etc/tls/nomad
scp /path/to/global-server-nomad-key.pem username@zieladresse:/etc/tls/nomad
Für die Kommunikation zwischen Docker-Containern und die Verwaltung von Netzwerken wird ein Container Network Interface (CNI)-Plugin benötigt. CNI-Plugins ermöglichen die effiziente Kommunikation und Koordination von Netzwerken in Containerumgebungen.
Hier sind die Schritte zur Installation des CNI-Plugins für Nomad auf deinem Ubuntu-Server:
curl -L -o cni-plugins.tgz "https://github.com/containernetworking/plugins/releases/download/v1.0.0/cni-plugins-linux-$( [ $(uname -m) = aarch64 ] && echo arm64 || echo amd64)"-v1.0.0.tgz && \
sudo mkdir -p /opt/cni/bin && \
sudo tar -C /opt/cni/bin -xzf cni-plugins.tgz
CNI-Plugins spielen eine entscheidende Rolle in der Containerorchestrierung, da sie die Konnektivität und Kommunikation zwischen Containern sicherstellen. Durch die Installation dieser Plugins wird Nomad in die Lage versetzt, Container-Netzwerke effektiv zu verwalten und sicherzustellen, dass die Anwendungen in deinem Cluster reibungslos miteinander interagieren können.
Zunächst müssen wir ein Secret erstellen, dass du später in den Platzhalter !mein-ausgedachtes-secret!
setzen kannst.
nomad operator gossip keyring generate
Die Nomad-Konfiguration wird auf dem Server erstellt und im Ordner /etc/nomad.d
abgelegt. Ich verwende als Dateinamen nomad.hcl
. Verwende einen Texteditor wie Nano, um die Konfiguration zu erstellen, falls dort bereits eine Datei liegt, ersetze allen vorhandenen Text:
# Der Pfad, in dem Nomad Daten speichert
data_dir = "/usr/hashicorp/nomad"
# Der Name des Datacenters, in dem Nomad betrieben wird
datacenter = "!dein-datacenter-name!"
bind_addr = "0.0.0.0"
advertise {
rpc = "localhost:4647"
serf = "localhost:4648"
http = "localhost:4646"
}
# Server-Konfiguration
server {
enabled = true
bootstrap_expect = 1
encrypt = "!dein-ausgedachtes-secret!"
}
# Client-Konfiguration
client {
enabled = true
}
plugin "docker" {
config {
# Erlaubt privilegierten Zugriff für Docker-Container
allow_privileged = true
# Aktiviert Volumes für Docker-Container
volumes {
enabled = true
}
}
}
# Optional, falls du Nomad mit Zertifikaten schützen möchtest
tls {
http = true
rpc = true
# Pfad zur CA-Zertifikatsdatei
ca_file = "/etc/tls/nomad/nomad-agent-ca.pem"
# Pfad zur Server-Zertifikatsdatei
cert_file = "/etc/tls/nomad/global-server-nomad.pem"
# Pfad zum Server-Schlüssel
key_file = "/etc/tls/nomad/global-server-nomad-key.pem"
# Aktiviert die Überprüfung des Serverhostnamens
verify_server_hostname = true
# Aktiviert die Überprüfung des HTTPS-Clients
verify_https_client = true
}
Ersetze die Platzhalter wie dein-datacenter-name
und dein-ausgedachtes-secret
durch deine spezifischen Werte. Stelle sicher, dass die Pfade zu den Zertifikatsdateien korrekt sind, falls du die TLS-Optionen aktivierst.
Erstelle eine Systemd-Dienstdatei, um Nomad als Dienst zu starten. Um den Editor zu öffnen, benutze nano auf dem Server und lege die Datei im Systemd-Systemverzeichnis ab.
sudo nano /etc/systemd/system/nomad.service
Kopiere in den Editor folgenden Code:
[Unit]
Description=Nomad
Documentation=https://www.nomadproject.io/docs/
Wants=network-online.target
After=network-online.target
[Service]
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
TasksMax=infinity
OOMScoreAdjust=-1000
[Install]
WantedBy=multi-user.target
Speichere die Dateien und starte den Nomad-Dienst mit:
sudo systemctl enable nomad.service
sudo systemctl start nomad.service
Nomad sollte nun erfolgreich auf Ihrem Ubuntu-Server installiert und gestartet sein. Du kannst dies testen, indem du https:<ip-adresse>:4646
in deinem Browser aufrufst. Wenn du dort eine Warnung erhältst, ist es möglich, dass du noch die notwendigen Zertifikate installieren musst. Außerdem solltest du prüfen, ob auf der Firewall der Port 4646 geöffnet ist.
Im nächsten Tutorial werden wir die Konfiguration von Nomad vertiefen und einen einfachen Job erstellen.