Alternativer Nomaden-Orchestrator auf dem Desktop

Die Container-Orchestrierung ist derzeit hauptsächlich mit Kubernetes verbunden. Dies ist jedoch nicht die einzig mögliche Wahl. Es gibt alternative Orchestrierungswerkzeuge wie nomad, den Entwickler von HashiCorp (bekannt als Vagrant-Virtualisierungsentwickler).

Die Arbeit mit Orchestrierung zu meistern ist normalerweise schwierig, weil Daher hat in einem früheren Beitrag nicht jeder Zugriff von mehreren Servern mit Root-Zugriff auf die Infrastruktur
Mit MicroK8s stellen wir Kubernetes in wenigen Minuten auf dem Desktop bereit. Wir haben den Prozess der Bereitstellung der Kubernetes-Umgebung auf dem Desktop am Beispiel der Django-Webanwendung beschrieben. Zunächst wollte ich die Datenbankausnutzung in der MicroK8-Umgebung weiter beschreiben. Aber dann dachte ich, es wäre interessant, weiter mit einem ebenso praktischen Nomaden-Orchestrierungswerkzeug zu arbeiten. Ich werde nicht einmal einen Deutschen geben, um verschiedene Orchestrierungssysteme zu vergleichen. Das einzige, was ich für diejenigen bemerke, die bezweifeln, dass Nomad noch einfacher zu installieren ist als MicroK8s, weil Kopieren Sie dazu einfach die beiden ausführbaren Dateien (Nomad und Consul) vom Server des Entwicklers.

Wie gesagt, Sie müssen zuerst Nomad und Consul herunterladen, die als vorgefertigte Binärdateien für alle wichtigen Betriebssysteme geliefert werden. Sie benötigen keinen Root-Zugriff, um diese Dateien auszuführen, sodass alles im Ausgangsverzeichnis abgelegt und im Auftrag eines nicht privilegierten Benutzers ausgeführt werden kann.

Und natürlich sollten Sie Docker bereits installiert haben, wenn Sie nur Docker-Container neu anordnen möchten. Nomad kann übrigens nicht nur Container ausführen, sondern auch reguläre ausführbare Dateien, die wir bald verwenden werden.

Zuerst müssen Sie eine Nomadenkonfigurationsdatei erstellen. Nomad kann im Servermodus oder im Clientmodus sowie gleichzeitig in beiden Modi gestartet werden (in der Produktion nicht empfohlen). Dazu müssen Sie den Serverabschnitt, den Clientabschnitt oder beide dieser Abschnitte in die Konfigurationsdatei einfügen:

bind_addr = "127.0.0.1" data_dir = "/tmp/nomad" advertise { http = "127.0.0.1" rpc = "127.0.0.1" serf = "127.0.0.1" } server { enabled = true bootstrap_expect = 1 } client { enabled = true options = { "driver.raw_exec.enable" = "1" } } consul { address = "127.0.0.1:8500" } 

Nomad wird durch einen Befehl gestartet, der den Pfad zur erstellten Konfigurationsdatei angibt:

 nomad agent --config nomad/nomad.conf 

Im letzten Abschnitt der Konfiguration wird die Adresse angegeben, unter der der Konsul arbeiten wird. Consul kann auch im Servermodus, im Clientmodus und sowohl im Server- als auch im Clientmodus arbeiten:

 consul agent -server -client 127.0.0.1 -advertise 127.0.0.1 -data-dir /tmp/consul -ui -bootstrap 

Nachdem Sie diese Befehle ausgeführt haben, können Sie sie im Browser öffnen (http: // localhost: 4646) - dies ist der UI-Nomade, und (http: // localhost: 8500) - dies ist der UI-Konsul.

Erstellen Sie als Nächstes eine Docker-Datei für das Django-Image. Von der Docker-Datei im vorherigen Beitrag unterscheidet sie sich von der Zeile, in der der Zugriff auf Django über einen beliebigen Host zulässig ist:

 FROM python:3-slim LABEL maintainer="apapacy@gmail.com" WORKDIR /app COPY requirements.txt . RUN pip install -r requirements.txt RUN django-admin startproject mysite /app \ && echo "\nALLOWED_HOSTS = ['*']\n" >> /app/mysite/settings.py EXPOSE 8000 STOPSIGNAL SIGINT ENTRYPOINT ["python", "manage.py"] CMD ["runserver", "0.0.0.0:8000"] 

Nach dem Containerbau:

 docker build django/ -t apapacy/tut-django:1.0.1 

Sie müssen eine Aufgabe erstellen, in der die erforderliche Anzahl von Replikaten von Django-Containern erstellt wird (nomad / django.conf):

 job "django-job" { datacenters = ["dc1"] type = "service" group "django-group" { count = 3 restart { attempts = 2 interval = "30m" delay = "15s" mode = "fail" } ephemeral_disk { size = 300 } task "django-job" { driver = "docker" config { image = "apapacy/tut-django:1.0.1" port_map { lb = 8000 } } resources { network { mbits = 10 port "lb" {} } } service { name = "django" tags = ["urlprefix-/"] port = "lb" check { name = "alive" type = "http" path = "/" interval = "10s" timeout = "2s" } } } } } 

Alle Parameter dieser Konfiguration sind anhand ihrer Namen verständlich. Das einzige, was ich entschlüsseln möchte, ist eine Zeile: port "lb" {} , was bedeutet, dass die Ports von der Umgebung dynamisch zugewiesen werden (Sie können sie auch statisch festlegen).

Die Aufgabe wird mit dem folgenden Befehl gestartet:

 nomad job run nomad/django.conf 

Jetzt können Sie über den UI-Nomaden (http: // localhost: 4646) den Status des Django-Job-Jobs und über den UI-Konsul (http: // localhost: 8500) den Status des Django-Dienstes sowie die IP-Adressen und Ports anzeigen, an denen er funktioniert jede Replik des Django-Dienstes. Jetzt sind Dienste über diese IP-Adressen verfügbar, jedoch nur innerhalb des Nomadennetzwerks und von außen nicht zugänglich. Um Dienste für den externen Zugriff zu veröffentlichen, können Sie eine Reihe von Funktionen verwenden. Zum Beispiel über Haproxy, aber der einfachste Weg, dies zu tun, ist über ein anderes (drittes nach Nomad und Konsul) Modul von HashiCorp - fabio.

Sie müssen es auch nicht herunterladen - Sie können diesen Nomaden bereitstellen, der, wie am Anfang der Nachricht erwähnt, nicht nur mit Docker-Containern, sondern auch mit ausführbaren Dateien funktioniert. Erstellen Sie dazu eine weitere Aufgabe (nomad / fabio.conf):

 job "fabio-job" { datacenters = ["dc1"] type = "system" update { stagger = "60s" max_parallel = 1 } group "fabio-group" { count = 1 task "fabio-task" { driver = "raw_exec" artifact { source = "https://github.com/fabiolb/fabio/releases/download/v1.5.4/fabio-1.5.4-go1.9.2-linux_amd64" } config { command = "fabio-1.5.4-go1.9.2-linux_amd64" } resources { cpu = 100 # 500 MHz memory = 128 # 256MB network { mbits = 10 port "lb" { static = 9999 } port "admin" { static = 9998 } } } } } } 

Der Treiber driver = "raw_exec" verwendet, um diese Aufgabe abzuschließen. Da nicht alle Treiber standardmäßig geladen sind, haben wir in der Nomadenkonfiguration diese Funktion bereitgestellt:

 client { enabled = true options = { "driver.raw_exec.enable" = "1" } } 

Übrigens wird sich in den neuen Versionen von nomad die Syntax zum Laden von Plugins und Treibern ändern, sodass dieser Teil der Konfiguration bald abgeschlossen sein muss.

Die Aufgabe wird mit dem folgenden Befehl gestartet:

 nomad job run nomad/fabio.conf 

Danach steht das UI-Fabio im Browser unter der Adresse (http: // localhost: 9998) zur Verfügung. Und unter der Adresse (http: // localhost: 9999) wird der Django-Dienst veröffentlicht.

Der Code für die in der Veröffentlichung gezeigten Konfigurationen befindet sich im Repository .

Nützliche Links

1.dvps.blog/minimalnoie-sravnieniie-swarm-kubernetes-mesos-nomad-rancher

papacy@gmail.com
20. Februar 2019

Source: https://habr.com/ru/post/de440956/


All Articles