Mädchen auf einem Roller. Illustration von freepik , Nomad Logo von HashiCorpKubernetes ist ein 300 kg schwerer Gorilla für die Container-Orchestrierung. Es funktioniert in einigen der größten Containersysteme der Welt, ist aber teuer.
Besonders teuer für kleine Teams, die viel Zeit für Support und eine steile Lernkurve aufwenden müssen. Für unser vierköpfiges Team ist dies zu viel Aufwand. Also suchten wir nach Alternativen - und verliebten uns in
Nomad .
Was willst du
Unser Team unterstützt eine Reihe typischer Services zur Überwachung und Analyse der Leistung: API-Endpunkte für Go-Metriken, Export von Prometheus, Protokollparser wie Logstash und
Gollum sowie Datenbanken wie InfluxDB oder Elasticsearch. Jeder dieser Dienste wird in einem eigenen Container ausgeführt. Wir brauchen ein einfaches System, um all dies betriebsbereit zu halten.
Wir haben mit einer Liste der Anforderungen für die Container-Orchestrierung begonnen:
- Starten Sie eine Reihe von Diensten auf vielen Computern.
- Übersicht über die Ausführung von Diensten.
- Kommunikation zwischen Diensten.
- Automatischer Neustart, wenn der Dienst abstürzt.
- Infrastrukturwartung durch ein kleines Team.
Darüber hinaus sind die folgenden Dinge nett, aber keine obligatorischen Ergänzungen:
- Markieren von Maschinen nach ihren Fähigkeiten (z. B. Markieren von Maschinen mit schnellen Festplatten für schwere E / A-Dienste).
- Die Möglichkeit, Dienste unabhängig vom Orchester zu starten (z. B. während der Entwicklung).
- Ein gemeinsamer Ort, um Konfigurationen und Geheimnisse auszutauschen.
- Endpunkt für Metriken und Protokolle.
Warum Kubernetes nicht zu uns passt
Bei der Erstellung eines Prototyps mit Kubernetes haben wir festgestellt, dass wir immer komplexere Logikebenen hinzugefügt haben, auf die wir uns bedingungslos verlassen haben.
Beispielsweise unterstützt Kubernetes integrierte Dienstkonfigurationen über
ConfigMaps . Sie können schnell verwirrt sein, insbesondere wenn Sie mehrere Konfigurationsdateien zusammenführen oder dem Pod zusätzliche Dienste hinzufügen. Mit Kubernetes (oder in diesem Fall dem
Ruder ) können Sie dynamisch externe Konfigurationen implementieren, um Interessen zu trennen. Dies führt jedoch zu einer verdeckten Verbindung zwischen Ihrem Projekt und Kubernetes. Helm und ConfigMaps sind jedoch zusätzliche Optionen, sodass Sie sie nicht verwenden müssen. Sie können die Konfiguration einfach in das Docker-Image kopieren. Trotzdem ist es verlockend, diesen Weg zu gehen und unnötige Abstraktionen zu erstellen, die Sie später bereuen können.
Darüber hinaus wächst das Kubernetes-Ökosystem rasant. Es braucht viel Zeit und Energie, um mit den Best Practices und den neuesten Tools auf dem neuesten Stand zu bleiben. Kubectl, Minikube, Kubeadm, Helm, Pinne, Kops, OC - die Liste geht weiter und weiter. Zu Beginn der Arbeit sind nicht alle diese Tools erforderlich, aber Sie wissen nicht, was benötigt wird, daher müssen Sie sich über alles im Klaren sein. Aus diesem Grund ist die Lernkurve ziemlich steil.
Wann man Kubernetes benutzt
In unserem Unternehmen verwenden viele Kubernetes und sind sehr zufrieden damit. Diese Instanzen werden von Google oder Amazon verwaltet, die über ausreichende Supportressourcen verfügen.
Kubernetes verfügt über
erstaunliche Funktionen , die die Verwaltung und umfangreiche Orchestrierung von Containern vereinfachen:
- Detaillierte Rechteverwaltung .
- Benutzerdefinierte Controller fügen dem Cluster Logik hinzu. Dies sind nur Programme, die mit der Kubernetes-API kommunizieren.
- Autoskalierung ! Kubernetes kann Services bei Bedarf mithilfe von Service-Metriken skalieren, ohne dass manuelle Eingriffe erforderlich sind.
Die Frage ist, ob Sie wirklich alle diese Funktionen benötigen. Sie können sich nicht nur auf die Abstraktion verlassen.
Sie müssen herausfinden, was unter der Haube passiert .
Unser Team bietet die meisten Dienste remote an (aufgrund der engen Verbindung mit der Hauptinfrastruktur), sodass wir keinen eigenen Kubernetes-Cluster aufbauen wollten. Wir wollten nur Dienstleistungen erbringen.
Batterien nicht enthalten
Nomad macht 20% der Orchestrierung aus, was 80% des Notwendigen ergibt. Er verwaltet lediglich Bereitstellungen. Nomad kümmert sich um Bereitstellungen, startet Container im Fehlerfall neu ... und fertig.
Der springende Punkt bei Nomad ist, dass es ein
Minimum tut: Keine detaillierte Rechteverwaltung oder
erweiterte Netzwerkrichtlinien sind so speziell konzipiert. Diese Komponenten werden von oder überhaupt nicht bereitgestellt.
Ich denke, Nomad hat den perfekten Kompromiss zwischen Benutzerfreundlichkeit und Nützlichkeit gefunden. Es ist gut für kleine, unabhängige Dienste. Wenn Sie mehr Kontrolle benötigen, müssen Sie diese selbst erhöhen oder einen anderen Ansatz verwenden. Nomad ist
nur ein Orchester.
Das Beste an Nomad ist, dass es leicht
zu ersetzen ist . Es besteht praktisch keine Bindung an den Anbieter, da seine Funktionen problemlos in jedes andere System integriert werden können, das Dienste verwaltet. Es funktioniert wie eine normale Binärdatei auf jedem Computer in einem Cluster.
Nomadenökosystem lose gekoppelter Komponenten
Die wahre Kraft von Nomad in seinem Ökosystem. Es lässt sich sehr gut in andere - völlig optionale - Produkte wie
Consul (Schlüsselwertspeicherung) oder
Vault (Geheimdienstverarbeitung) integrieren. In der Nomad-Datei befinden sich Abschnitte zum Extrahieren von Daten aus diesen Diensten:
template { data = <<EOH LOG_LEVEL="{{key "service/geo-api/log-verbosity"}}" API_KEY="{{with secret "secret/geo-api-key"}}{{.Data.value}}{{end}}" EOH destination = "secrets/file.env" env = true }
Hier lesen wir den Schlüsseldienst
service/geo-api/log-verbosity
von Consul und stellen ihn dabei mit der Umgebungsvariablen
LOG_LEVEL
. Wir repräsentieren auch den
secret/geo-api-key
von Vault als
API_KEY
. Einfach aber kraftvoll!
Aufgrund seiner Einfachheit kann Nomad über die API problemlos durch andere Dienste erweitert werden. Beispielsweise werden Tags für Aufgaben unterstützt. Wir
trv-metrics
alle Dienste mit Metriken mit dem Tag
trv-metrics
. Somit findet Prometheus diese Dienste leicht über Consul und überprüft regelmäßig den Endpunkt
/metrics
auf neue Daten. Das Gleiche kann beispielsweise für Protokolle mit
Loki durchgeführt werden .
Es gibt viele andere Beispiele für Erweiterbarkeit:
- Ausführen des Jenkins-Jobs mit einem Hook, und Consul verfolgt die erneute Bereitstellung des Nomad-Jobs, wenn sich die Dienstkonfiguration ändert.
- Ceph fügt Nomad ein verteiltes Dateisystem hinzu.
- fabio für den lastausgleich .
All dies ermöglicht es Ihnen
, die Infrastruktur organisch zu entwickeln, ohne eine besondere Bindung an den Anbieter zu haben.
Ehrliche Warnung
Kein System ist perfekt. Ich empfehle nicht, die neuesten Funktionen sofort in die Produktion aufzunehmen. Natürlich gibt es Fehler und fehlende Funktionen, aber das gilt auch für Kubernetes.
Im Vergleich zu Kubernetes ist die Nomadengemeinschaft nicht so groß. Kubernetes hat bereits ungefähr 75.000 Commits und 2.000 Mitwirkende, während Nomad ungefähr 14.000 Commits und 300 Mitwirkende hat. Nomad wird es schwer haben, mit Kubernetes Schritt zu halten, aber vielleicht ist das nicht nötig! Dies ist ein spezialisierteres System, und eine kleinere Community bedeutet auch, dass Ihre Pull-Anfrage eher bemerkt und akzeptiert wird als Kubernetes.
Zusammenfassung
Fazit: Verwenden Sie Kubernetes nicht, nur weil es jeder tut. Bewerten Sie Ihre Anforderungen sorgfältig und prüfen Sie, welches Tool rentabler ist.
Wenn Sie eine Menge homogener Dienste in einer großen Infrastruktur bereitstellen möchten, ist Kubernetes eine gute Option. Denken Sie nur an die zusätzliche Komplexität und die Wartungskosten. Einige der Kosten können durch die Verwendung einer verwalteten Kubernetes-Umgebung wie der
Google Kubernetes Engine oder
Amazon EKS vermieden werden.
Wenn Sie nur nach einem zuverlässigen Orchestrator suchen, der einfach zu unterstützen und erweiterbar ist, probieren Sie Nomad aus. Sie fragen sich vielleicht, wie weit dies Sie führen wird.
Wenn Sie Kubernetes mit einem Auto vergleichen, wird Nomad ein Roller sein. Manchmal braucht man einen und manchmal einen anderen. Beide haben ein Existenzrecht.