Nomad Tutorials Teil-1: Nomad installieren

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.

Installation der notwendigen Softwarepakete

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.

Mac Client

Füge zuerst das HashiCorp-Repository zu Brew hinzu:

bash
brew tap hashicorp/tap

Danach kann Nomad direkt installiert werden:

bash
brew install hashicorp/tap/nomad

Um zur neuesten Version zu aktualisieren, führe das folgende aus:

bash
brew upgrade hashicorp/tap/nomad

Ubuntu Server

Installiere zunächst auf dem Ubuntu-Server einige Kernpakete, die benötigt werden, um die HashiCorp-Repositories auf Ubuntu hinzuzufügen:

bash
sudo apt-get update && \
sudo apt-get install wget gpg coreutils

Füge den HashiCorp-Archivschlüssel hinzu:

bash
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:

bash
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

bash
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:

bash
sudo apt update
sudo apt install -y docker.io

Erstellung von Zertifikaten (optional)

Die Erstellung von Zertifikaten ist optional, jedoch empfohlen, wenn eine sichere Kommunikation erforderlich ist. Hier sind die Schritte zur Erstellung von Zertifikaten:

bash
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.

bash
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.

bash
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.

bash
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

Installation des CNI Plugins

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:

bash
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.

Erstellung der Nomad Konfiguration

Zunächst müssen wir ein Secret erstellen, dass du später in den Platzhalter !mein-ausgedachtes-secret! setzen kannst.

bash
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:

hcl
# 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.

Erstellung eines Services, der Nomad startet

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.

bash
sudo nano /etc/systemd/system/nomad.service

Kopiere in den Editor folgenden Code:

ini
[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:

bash
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.