Warum wir bei Intersys auf Nomad setzen

Docker hat die Softwareentwicklung grundlegend verändert. In modernen, verteilten Architekturen mit Microservices reicht Docker allein jedoch nicht aus. Orchestrierungswerkzeuge wie Kubernetes, Docker Swarm oder Nomad übernehmen die automatische Verwaltung und Skalierung der Workloads.

Kubernetes hat sich als Branchenstandard etabliert. Wir haben uns bei Intersys trotzdem bewusst für HashiCorp Nomad entschieden: Für unsere Anforderungen ist Nomad eine schlankere, flexible und effiziente Alternative.

Grundprinzipien von Nomad

  • Ein einzelnes, leicht zu installierendes Binary.
  • On-premises oder in der Cloud betreibbar.
  • Leichtgewichtige, deklarative Job-Spezifikationen.
  • Unterstützung für Container, Binärdateien, Java-Anwendungen und Batch-Jobs.
  • Automatische Neustart-Strategien und skalierbare Workloads.

Der Nomad-Cluster

Ein Cluster besteht aus Server Nodes für das Cluster-Management und die Planung der Workloads sowie aus Client Nodes, die die geplanten Workloads ausführen. Die Server Nodes stimmen sich über den Raft-Konsensalgorithmus ab.

Diagramm eines Nomad-Clusters mit Jobs, Gruppen, Tasks, Servern und Clients
Die Struktur eines Nomad-Clusters mit Jobs, Gruppen, Tasks, Servern und Clients.

Job-Spezifikation

Workloads werden in HCL (HashiCorp Configuration Language) definiert. Eine Job-Spezifikation beschreibt den Job, seine Gruppen und die darin ausgeführten Tasks. Das folgende Beispiel startet einen NGINX-Webserver als Docker-Task.

demo.nomad.hclhcl
job "demo" {
    datacenters = ["dc1"]
    task "hello-world" {
        driver = "docker"
        config {
            image = "nginx:latest"
        }
    }
}

Damit der Webserver über den Port 25000 erreichbar ist, wird die Job-Konfiguration um eine Gruppe, einen Netzwerk-Port und die Portzuordnung ergänzt.

demo-with-port.nomad.hclhcl
job "demo" {
    datacenters = ["dc1"]
    group "hello-world" {
        network {
            port "http" {
                static = "25000"
                to = "80"
            }
        }
        task "hello-world" {
            driver = "docker"
            config {
                image = "nginx:latest"
                ports = ["http"]
            }
        }
    }
}

Erste Schritte mit Nomad

Für eine kurze Demo lässt sich Nomad herunterladen und im Entwicklungsmodus starten.

nomad-setup.shbash
# Download des Binaries
wget https://releases.hashicorp.com/nomad/1.9.5/nomad_1.9.5_linux_amd64.zip
# Entpacken im gewünschten Verzeichnis
unzip nomad_1.9.5_linux_amd64.zip
# Nomad im Dev-Modus starten (gleichzeitig Client und Server)
./nomad agent -dev

Anschliessend ist die Nomad-Oberfläche lokal unter http://localhost:4646 erreichbar.

Nomad-Benutzeroberfläche mit der Übersicht der Jobs
Die Jobs-Übersicht der Nomad-Oberfläche.

Gründe für den Einsatz

Als familiäres KMU suchten wir eine einfach erlernbare Lösung mit überschaubarem Wartungsaufwand. Nach der Evaluation von Kubernetes, OpenShift und HashiCorp Nomad haben wir uns für Nomad entschieden. Ausschlaggebend waren die schnelle Einführung, der geringe Wartungsaufwand und die stabile Performance.

Was gegen Nomad spricht

  • Kubernetes ist Marktführer und hat eine grössere Community sowie mehr Werkzeuge.
  • Die Abhängigkeit von HashiCorp muss bei strategischen Entscheiden berücksichtigt werden.

Fazit

Für uns als KMU überwiegen die Vorteile von Nomad: einfache Handhabung, geringer Wartungsaufwand und hohe Stabilität. Trotz der Dominanz von Kubernetes ist Nomad für unsere Anforderungen die richtige Wahl.