4 min zu lesen.
Willkommen zum zweiten Teil unserer Nomad-Tutorialserie! In diesem Beitrag, "Nomad Tutorials Teil-2: Nomad-Job erstellen", setzen wir unsere Reise in die faszinierende Welt der HashiCorp Nomad-Orchestrierung fort. Nachdem wir uns im ersten Teil darauf konzentriert haben, Nomad auf einem Ubuntu-Server zu installieren, werden wir nun tiefer in die praktische Anwendung eintauchen. Nomad ermöglicht nicht nur die effiziente Verwaltung von Containern, sondern ermöglicht es auch, komplexe Workloads über Cluster hinweg zu orchestrieren. In diesem Tutorial werden wir lernen, wie man einen Nomad-Job erstellt, um Anwendungen zu starten und zu verwalten. Schritt für Schritt werden wir durch die Prozesse gehen, um sicherzustellen, dass du die Grundlagen der Nomad-Jobdefinitionen verstehst und in der Lage bist, sie in deiner eigenen Umgebung anzuwenden. Lass uns gemeinsam entdecken, wie Nomad die Orchestrierung deiner Anwendungen vereinfachen kann!
Bevor wir mit der Erstellung unseres Nomad-Jobs beginnen, ist eine saubere Projektstruktur entscheidend. Öffne dazu Visual Studio Code und erstelle einen neuen Ordner für dein Nomad-Projekt. In diesem Ordner erstellen wir einen Unterordner namens "Zertifikate", um die Authentifizierung von Nomad zu verwalten. Falls du im ersten Teil keine Zertifikate erstellt hast, kannst du dies überspringen oder hier nochmal nachholen.
# Erstelle den Hauptordner für das Nomad-Projekt
mkdir NomadProjekt
# Navigiere in den Projektordner
cd NomadProjekt
# Erstelle den Ordner für die Zertifikate
mkdir Zertifikate
Innerhalb des Ordners "NomadProjekt" erstelle eine Datei namens nomad.env, in der wir unsere Umgebungsvariablen speichern werden. Diese Datei wird verwendet, um Umgebungsvariablen durch das source
-Kommando zu laden. Öffne die Datei mit deinem bevorzugten Texteditor und füge die relevanten Umgebungsvariablen ein:
export NOMAD_ADDR=<http/https-Adresse des Servers>:4646
export NOMAD_CACERT=/pfad/zu/Zertifikate/nomad-agent-ca.pem
export NOMAD_CLIENT_CERT=/pfad/zu/Zertifikate/global-server-nomad.pem
export NOMAD_CLIENT_KEY=/pfad/zu/Zertifikate/global-server-nomad-key.pem
Ersetze /pfad/zu/Zertifikate/ und die Nomad Adresse die tatsächlichen Werte. Diese Umgebungsvariablen sind entscheidend, um Nomad-Befehle auszuführen und mit dem Nomad-Cluster zu interagieren.
Mit diesen Vorbereitungen ist dein Projektordner nun bereit für die Erstellung und Verwaltung von Nomad-Jobs!
Damit Nomad die Werte nutzen kann führe nun auf der Konsole folgenden Befehl aus.
source nomad.env
Dieser Beispielcode erstellt einen Service, den wenn man ihn über den Port 8080 anspricht, "Hello World!" zurückgibt. Speichere den job als demo-job.nomad
ab.
job "http-echo" {
group "echo" {
network {
port "http" {
static = 8080
}
}
task "server" {
driver = "docker"
config {
image = "hashicorp/http-echo:latest"
args = [
"-listen", ":8080",
"-text", "Hello World!",
]
}
}
}
}
In HashiCorp Nomad repräsentiert ein "Job" eine abstrakte Einheit, die eine Gruppe von Aufgaben (Tasks) beschreibt, die auf dem Nomad-Cluster ausgeführt werden sollen. Ein Job ist also eine Orchestrierungseinheit, die eine oder mehrere Anwendungen, Dienste oder Prozesse definiert, die auf dem verteilten Cluster ausgeführt werden sollen. In dem obigen Code ausschnitt ist dies der Job "http-echo".
Als nächste Unterorganisationseinheit ist in dem Job die Gruppe "echo".
In Nomad repräsentiert eine "Gruppe" eine Sammlung von Aufgaben (Tasks), die zusammen bereitgestellt und skaliert werden. Also zum beispiel auf dem selben Server. Gruppen ermöglichen es, mehrere Instanzen derselben Anwendung oder desselben Dienstes zu definieren, die gemeinsam verwaltet und überwacht werden. Hier werden in dem Codebeispiel von oben zum Beispeil auch die Kommunikationseinstellungen vorgenommen, welche Ports beispielsweise freigegebenw werden sollen. Jede Gruppe innerhalb eines Nomad-Jobs definiert eine isolierte Umgebung für die darin enthaltenen Aufgaben und ihre Ressourcenanforderungen. Gruppen sind besonders nützlich, wenn es darum geht, Skalierbarkeit, Lastenausgleich und Hochverfügbarkeit sicherzustellen.
Unter der Gruppe befindet sich der Task "server".
Eine "Aufgabe" in Nomad repräsentiert eine einzelne Instanz einer Anwendung, eines Dienstes oder eines Prozesses innerhalb einer Gruppe. Jede Aufgabe wird auf einem separaten Nomad-Agenten im Cluster gestartet und ausgeführt. Aufgaben sind die kleinsten ausführbaren Einheiten in einem Nomad-Job und können als Container, Prozesse oder andere Formen von ausführbaren Anwendungen konfiguriert werden. Nomad kümmert sich um die effiziente Verteilung von Aufgaben über den Cluster und stellt sicher, dass die definierten Ressourcenanforderungen erfüllt werden.
Mit dem Befehl nomad run
können wir einen Job starten. Führe dazu das folgende aus:
nomad run demo-job.nomad
Nun sollte in der Ausgabe in etwa so etwas zu sehen sein:
==> 2023-12-10T15:57:46+01:00: Monitoring evaluation "1cd4aa7d"
2023-12-10T15:57:46+01:00: Evaluation triggered by job "http-echo"
2023-12-10T15:57:46+01:00: Evaluation within deployment: "90e82e55"
2023-12-10T15:57:46+01:00: Allocation "c99ab72a" created: node "07d3e6d8", group "echo"
2023-12-10T15:57:46+01:00: Evaluation status changed: "pending" -> "complete"
==> 2023-12-10T15:57:46+01:00: Evaluation "1cd4aa7d" finished with status "complete"
==> 2023-12-10T15:57:46+01:00: Monitoring deployment "90e82e55"
â ¦ Deployment "90e82e55" in progress...
2023-12-10T15:57:47+01:00
ID = 90e82e55
Job ID = http-echo
Job Version = 0
Status = running
Description = Deployment is running
Deployed
Task Group Desired Placed Healthy Unhealthy Progress Deadline
echo 1 1 0 0 2023-12-10T16:07:46+01:00
Sobald ein erfolgreicher Start durchgeführt wurde, kann der Service über die
Herzlichen Glückwunsch, du hast deine erste Anwendung ausgerollt, im nächsten Teil werden wir uns mit Services und Service Discorvery in Nomad beschäftigen.