Docker Swarm für Container Orchestration

Alles über den Docker Swarm und wie er alle Container in einem Cluster verwaltet und orchestriert.


Was ist Docker Swarm??

Docker-Schwarm ist ein Modus zur Behandlung eines Clusters von Docker-Engines, daher der Name Schwarm. Der Cluster von Docker-Hosts wird im Schwarmmodus ausgeführt und besteht aus Managern und Mitarbeitern. Die Docker-Engine-Instanzen, die am Schwarm teilnehmen, werden als Knoten bezeichnet.

Eine Schwarmbereitstellung auf Produktionsebene besteht aus Docker-Knoten, die auf mehrere Server verteilt sind.

Warum es benutzen? – Container-Orchestrierung

Wenn Sie in einer Produktionsumgebung arbeiten, werden in Hunderten von Docker-Containern mehrere Anwendungen ausgeführt. Die Verwaltung all dieser Container kann für alle DevOps-Ingenieure ein großer Schmerz sein. Hier hilft Ihnen Docker Swarm. Es verwaltet und orchestriert problemlos den Cluster, in dem mehrere Docker-Container ausgeführt werden.

Im Folgenden sind einige seiner Funktionen aufgeführt:

  • Hohe Verfügbarkeit – zielt darauf ab, keine Ausfallzeiten oder Ausfälle anzubieten.
  • Lastverteilung – Ordnen Sie die Ressourcen und Anforderungen automatisch anderen Knoten im Cluster zu, wenn ein Knoten ausfällt.
  • Dezentralisiert – In einer Produktionsumgebung werden mehrere Manager-Knoten ausgeführt. Daher ist der Cluster niemals von einem einzelnen Manager-Knoten abhängig.
  • Skalierbarkeit – Mit einem einzigen Docker-Schwarmbefehl können Sie Container im Cluster problemlos vergrößern oder verkleinern.

Orchestrieren Sie Docker-Container

Nachdem Sie die Grundlagen von Docker Swarm kennen, sehen wir uns ein Beispiel für dessen Implementierung an.

In diesem Beispiel werden drei Computer in einem Cluster mit den folgenden Details ausgeführt:

manager1: 192.168.56.104

Arbeiter1: 192.168.56.105

worker2: 192.168.56.102

Führen Sie den folgenden Befehl auf dem Manager-Knoten aus, um den Schwarmmodus im Docker zu initialisieren. Das Flag –advertise-addr wird verwendet, um sich auf den Knoten zu bewerben, die dem Cluster beitreten können.

[E-Mail geschützt]: ~ $ docker swarm init –advertise-addr 192.168.56.104

Schwarm initialisiert: Der aktuelle Knoten (lssbyfzuiuh3sye1on63eyixf) ist jetzt ein Manager.

Führen Sie den folgenden Befehl aus, um diesem Schwarm einen Arbeiter hinzuzufügen:

Docker-Schwarm-Join –token SWMTKN-1-3h3d8qgvdlxi8tl1oqpfho9khx7i1t5nq7562s9gzojbcm9kr6-azy4rffrzou0nem9hxq4ro5am 192.168.56.104:2377

Um diesem Schwarm einen Manager hinzuzufügen, führen Sie “Docker-Schwarm-Join-Token-Manager” aus und befolgen Sie die Anweisungen.

Der obige Befehl generiert ein Token, das von anderen Knoten verwendet wird, um diesem Cluster beizutreten. Kopieren Sie den Befehl mit dem generierten Token und führen Sie ihn auf den Arbeitsknoten aus.

Ausführen des Tokens auf dem Knoten worker1.

[E-Mail geschützt]: ~ $ docker swarm join –token SWMTKN-1-3h3d8qgvdlxi8tl1oqpfho9khx7i1t5nq7562s9gzojbcm9kr6-azy4rffrzou0nem9hxq4ro5am 192.168.56.104:2377

Dieser Knoten ist als Arbeiter einem Schwarm beigetreten.

Ausführen des Tokens auf dem Knoten worker2.

[E-Mail geschützt]: ~ $ docker swarm join –token SWMTKN-1-3h3d8qgvdlxi8tl1oqpfho9khx7i1t5nq7562s9gzojbcm9kr6-azy4rffrzou0nem9hxq4ro5am 192.168.56.104:2377

Dieser Knoten ist als Arbeiter einem Schwarm beigetreten.

Jetzt können Sie auf dem Manager-Knoten überprüfen, welche Knoten im Cluster ausgeführt werden.

[E-Mail geschützt]: ~ $ Docker-Knoten ls

ID HOSTNAME STATUS VERFÜGBARKEITSMANAGER STATUS MOTORVERSION

lssbyfzuiuh3sye1on63eyixf * manager1 Ready Active Leader 18.09.6

utdr3dnngqf1oy1spupy1qlhu worker1 Ready Active 18.09.6

xs6jqp95lw4cml1i1npygt3cg worker2 Ready Active 18.09.6

Erstellen wir das Docker-Image geekflare_mongodb, das wir im Dockerfile-Tutorial verwendet haben.

Docker Build -t geekflare_mongodb .

Führen Sie einen Container des MongoDB-Docker-Images aus, indem Sie einen Schwarmdienst erstellen. 27017 ist die Portnummer, an der MongoDB verfügbar ist.

[E-Mail geschützt]: ~ $ docker service create –name "Mongo-Container" -S. 27017: 27017 geekflare_mongodb

image geekflare_mongodb: In einer Registrierung konnte nicht auf die neueste Version zugegriffen werden, um deren Digest aufzuzeichnen. Jeder Knoten greift unabhängig voneinander auf geekflare_mongodb: spätestens zu, was möglicherweise dazu führt, dass auf verschiedenen Knoten unterschiedliche Versionen des Bildes ausgeführt werden.

kok58xa4zi05psh3uy6s5x9e6

Gesamtfortschritt: 1 von 1 Aufgaben

1/1: läuft

Überprüfen Sie: Dienst konvergiert

Überprüfen Sie, ob der Docker-Schwarmdienst gestartet wurde. MODE repliziert bedeutet, dass der Container auf allen Knoten im Cluster repliziert wurde, und REPLICAS 1/1 bedeutet, dass derzeit nur ein Schwarmdienst ausgeführt wird.

[E-Mail geschützt]: ~ $ Docker Service ls

ID NAME MODE REPLICAS IMAGE PORTS

kok58xa4zi05 Mongo-Container repliziert 1/1 geekflare_mongodb: aktuell *: 27017->27017 / tcp

Lassen Sie uns überprüfen, auf welchem ​​Knoten im Cluster dieser einzelne Dienst ausgeführt wird. Es wird auf dem Manager1-Knoten ausgeführt.

[E-Mail geschützt]: ~ $ Docker Service ps Mongo-Container

ID NAME BILD NODE GEWÜNSCHT STAAT AKTUELLER STAAT FEHLER PORTS

jgqjo92rbq23 Mongo-Container.1 geekflare_mongodb: letzter Manager1 Laufen Laufen Vor ungefähr einer Minute

Führen Sie den Befehl docker ps aus, um weitere Details zu dem Container abzurufen, in dem dieser Schwarmdienst ausgeführt wird.

[E-Mail geschützt]: ~ $ docker ps

BEHÄLTER-ID BILDBEFEHL ERSTELLTE STATUS-PORTS-NAMEN

05d77e7b4850 geekflare_mongodb: spätestens   "/ bin / sh -c usr / bin /…"   Vor 2 Minuten Up 2 Minuten 27017 / tcp Mongo-Container.1.jgqjo92rbq23sv01hrufdigtx

Sie können den Schwarmdienst in ausführen “Global” Modus auch anstelle des Standardmodus “repliziert”. Im globalen Modus wird eine Aufgabe des Schwarmdienstes auf allen Knoten im Cluster ausgeführt.

Lassen Sie mich den vorhandenen laufenden Container entfernen, bevor ich den Dienst im globalen Modus ausführe.

[E-Mail geschützt]: ~ $ Docker Service rm Mongo-Container

Mongo-Container

Starten Sie den Schwarmdienst in einem Docker-Container im globalen Modus mit dem Flag –mode.

[E-Mail geschützt]: ~ $ docker service create –name "Mongo-Container" -p 27017: 27017 –mode global geekflare_mongodb

image geekflare_mongodb: In einer Registrierung konnte nicht auf die neueste Version zugegriffen werden, um deren Digest aufzuzeichnen. Jeder Knoten greift unabhängig voneinander auf geekflare_mongodb: spätestens zu, was möglicherweise dazu führt, dass auf verschiedenen Knoten unterschiedliche Versionen des Bildes ausgeführt werden.

mfw8dp0zylffppkllkcjl8391

Gesamtfortschritt: 3 von 3 Aufgaben

utdr3dnngqf1: läuft

lssbyfzuiuh3: läuft

xs6jqp95lw4c: läuft

Überprüfen Sie: Dienst konvergiert

Überprüfen Sie, ob der Schwarmdienst im globalen Modus gestartet wurde. Da im Cluster drei Knoten (1 Manager, 2 Worker) ausgeführt werden, beträgt die Anzahl der Replikate 3.

[E-Mail geschützt]: ~ $ Docker Service ls

ID NAME MODE REPLICAS IMAGE PORTS

mfw8dp0zylff Mongo-Container global 3/3 geekflare_mongodb: aktuell *: 27017->27017 / tcp

3 Dienste werden jetzt auf 3 Knoten ausgeführt. Überprüfen Sie dies, indem Sie den folgenden Befehl ausführen.

[E-Mail geschützt]: ~ $ Docker Service ps Mongo-Container

ID NAME BILD NODE GEWÜNSCHT STAAT AKTUELLER STAAT FEHLER PORTS

zj2blvptkvj6 Mongo-Container.xs6jqp95lw4cml1i1npygt3cg geekflare_mongodb: letzter Worker2 Running Running vor ungefähr einer Minute

3eaweijbbutf Mongo-Container.utdr3dnngqf1oy1spupy1qlhu geekflare_mongodb: letzter Arbeiter1 Laufen Laufen Vor ungefähr einer Minute

yejg1o2oyab7 Mongo-Container.lssbyfzuiuh3sye1on63eyixf geekflare_mongodb: letzter Manager1 Laufen Laufen vor ungefähr einer Minute

Lassen Sie mich als Nächstes zeigen, wie Sie die Anzahl der Replikate definieren können. Vorher werde ich den aktuellen Container entfernen, der ausgeführt wird.

[E-Mail geschützt]: ~ $ Docker Service rm Mongo-Container

Mongo-Container

Verwenden Sie das Flag –replicas im Befehl und geben Sie die Anzahl der Replikate an, die Sie für den Schwarmdienst benötigen. Zum Beispiel möchte ich zwei Repliken des Schwarmdienstes haben:

[E-Mail geschützt]: ~ $ docker service create –name "Mongo-Container" -p 27017: 27017 –replicas = 2 geekflare_mongodb

image geekflare_mongodb: In einer Registrierung konnte nicht auf die neueste Version zugegriffen werden, um deren Digest aufzuzeichnen. Jeder Knoten greift unabhängig voneinander auf geekflare_mongodb: spätestens zu, was möglicherweise dazu führt, dass auf verschiedenen Knoten unterschiedliche Versionen des Bildes ausgeführt werden.

4yfl41n7sfak65p6zqwwjq82c

Gesamtfortschritt: 2 von 2 Aufgaben

1/2: Laufen

2/2: rennen

Überprüfen Sie: Dienst konvergiert

Überprüfen Sie die derzeit ausgeführten Schwarmdienste. Sie können sehen, dass ein Replikat auf dem Manager1-Knoten und das andere auf dem Worker1-Knoten ausgeführt wird.

[E-Mail geschützt]: ~ $ Docker Service ps Mongo-Container

ID NAME BILD NODE GEWÜNSCHT STAAT AKTUELLER STAAT FEHLER PORTS

xukodj69h79q Mongo-Container.1 geekflare_mongodb: letzter Arbeiter1 Laufen Laufen Vor 9 Sekunden

e66zllm0foc8 Mongo-Container.2 geekflare_mongodb: letzter Manager1 Laufen Laufen Laufen vor 9 Sekunden

Gehen Sie zum Knoten worker1 und überprüfen Sie, ob auf dem Docker-Container der Schwarmdienst ausgeführt wird.

[E-Mail geschützt]: ~ $ docker ps

BEHÄLTER-ID BILDBEFEHL ERSTELLTE STATUS-PORTS-NAMEN

5042b7f161cb geekflare_mongodb: spätestens   "/ bin / sh -c usr / bin /…"   Vor ungefähr einer Minute Up Ungefähr eine Minute 27017 / tcp Mongo-Container.1.xukodj69h79q3xf0pouwm7bwv

Führen Sie den folgenden Befehl aus, um diesen Container zu stoppen.

[E-Mail geschützt]: ~ $ docker stop 5042b7f161cb

5042b7f161cb

Wenn Sie nun vom Manager1-Knoten aus überprüfen, auf welchen Knoten der Dienst ausgeführt wird, wird er auf dem Manager1-Knoten und dem Worker2-Knoten ausgeführt. Der AKTUELLE ZUSTAND des Knotens worker1 ist Shutdown (da der Container, in dem der Dienst ausgeführt wird, gestoppt wurde). Da jedoch zwei Replikate dieses Dienstes ausgeführt werden müssen, wurde auf Worker 2 ein anderer Dienst gestartet.

So erreichen Sie mit Docker Swarm eine hohe Verfügbarkeit.

[E-Mail geschützt]: ~ $ Docker Service ps Mongo-Container

ID NAME BILD NODE GEWÜNSCHT STAAT AKTUELLER STAAT FEHLER PORTS

cd2rlv90umej Mongo-Container.1 geekflare_mongodb: letzter worker2 Running Running Vor 30 Sekunden

xukodj69h79q \ _ Mongo-Container.1 geekflare_mongodb: letzter Worker1 Herunterfahren vor 38 Sekunden fehlgeschlagen    "Aufgabe: Exit ungleich Null (137)"

e66zllm0foc8 Mongo-Container.2 geekflare_mongodb: letzter Manager1 Laufen Laufen Vor 3 Minuten

Es ist sehr einfach, Docker-Container zu vergrößern oder zu verkleinern. Mit dem folgenden Befehl wird der Mongo-Container auf 5 skaliert.

[E-Mail geschützt]: ~ $ Docker-Service-Skala Mongo-Container = 5

Mongo-Container auf 5 skaliert

Gesamtfortschritt: 5 von 5 Aufgaben

1/5: Laufen

2/5: Laufen

3/5: Laufen

4/5: läuft

5/5: läuft

Überprüfen Sie: Dienst konvergiert

Überprüfen Sie, wie viele Replikate des Mongo-Containers gerade ausgeführt werden. Es muss 5 sein.

[E-Mail geschützt]: ~ $ Docker Service ls

ID NAME MODE REPLICAS IMAGE PORTS

4yfl41n7sfak Mongo-Container repliziert 5/5 geekflare_mongodb: aktuell *: 27017->27017 / tcp

Überprüfen Sie, wo diese 5 Replikate im Cluster ausgeführt werden. Auf Manager1-Knoten wird jeweils 1 Replikat und auf beiden Worker-Knoten jeweils 2 Replikate ausgeführt.

[E-Mail geschützt]: ~ $ Docker Service ps Mongo-Container

ID NAME BILD NODE GEWÜNSCHT STAAT AKTUELLER STAAT FEHLER PORTS

cd2rlv90umej Mongo-Container.1 geekflare_mongodb: letzter worker2 Running Running Vor 2 Minuten

xukodj69h79q \ _ Mongo-Container.1 geekflare_mongodb: letzter Worker1 Herunterfahren vor 2 Minuten fehlgeschlagen     "Aufgabe: Exit ungleich Null (137)"

e66zllm0foc8 Mongo-Container.2 geekflare_mongodb: letzter Manager1 Running Running Vor 5 Minuten

qmp0gqr6ilxi Mongo-Container.3 geekflare_mongodb: letzter worker2 Running Running Vor 47 Sekunden

9ddrf4tsvnu2 Mongo-Container.4 geekflare_mongodb: letzter Arbeiter1 Laufen Laufen Vor 46 Sekunden

e9dhoud30nlk Mongo-Container.5 geekflare_mongodb: letzter Arbeiter1 Laufen Laufen Vor 44 Sekunden

Wenn Sie in Ihrem Cluster nicht möchten, dass Ihre Dienste auf Manager-Knoten ausgeführt werden, und diese nur für die Verwaltung der Knoten behalten möchten, können Sie den Manager-Knoten entleeren.

[E-Mail geschützt]: ~ $ Docker Node Update – Verfügbarkeit Drain Manager1

manager1

Überprüfen Sie die Verfügbarkeit des Manager-Knotens.

[E-Mail geschützt]: ~ $ Docker-Knoten ls

ID HOSTNAME STATUS VERFÜGBARKEITSMANAGER STATUS MOTORVERSION

lssbyfzuiuh3sye1on63eyixf * manager1 Ready Drain Leader 18.09.6

utdr3dnngqf1oy1spupy1qlhu worker1 Ready Active 18.09.6

xs6jqp95lw4cml1i1npygt3cg worker2 Ready Active 18.09.6

Sie werden sehen, dass die Dienste nicht mehr auf dem Manager-Knoten ausgeführt werden. Sie sind auf die Arbeitsknoten im Cluster verteilt.

[E-Mail geschützt]: ~ $ Docker Service ps Mongo-Container

ID NAME BILD NODE GEWÜNSCHT STAAT AKTUELLER STAAT FEHLER PORTS

cd2rlv90umej Mongo-Container.1 geekflare_mongodb: letzter worker2 Running Running Vor 5 Minuten

xukodj69h79q \ _ Mongo-Container.1 geekflare_mongodb: letzter Worker1 Herunterfahren vor 5 Minuten fehlgeschlagen      "Aufgabe: Exit ungleich Null (137)"

qo405dheuutj Mongo-Container.2 geekflare_mongodb: letzter Arbeiter1 Laufen Laufen Vor 41 Sekunden

e66zllm0foc8 \ _ Mongo-Container.2 geekflare_mongodb: letzter Manager1 Herunterfahren Herunterfahren vor 44 Sekunden

qmp0gqr6ilxi Mongo-Container.3 geekflare_mongodb: letzter Worker2 Running Running vor 3 Minuten

9ddrf4tsvnu2 Mongo-Container.4 geekflare_mongodb: letzter Arbeiter1 Laufen Laufen Vor 3 Minuten

e9dhoud30nlk Mongo-Container.5 geekflare_mongodb: letzter Arbeiter1 Laufen Laufen Vor 3 Minuten

Das war alles über Docker Swarm und wie man Container im Docker Swarm-Modus orchestriert. Probieren Sie diese in Ihrer Nicht-Produktionsumgebung aus, um eine Vorstellung davon zu bekommen, wie es funktioniert.

STICHWORTE:

  • Docker

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map