Geekflare wird von unserem Publikum unterstützt. Wir können Affiliate-Provisionen durch den Kauf von Links auf dieser Website verdienen.
Teilen:

Docker Swarm für Container Orchestration

Docker Cloud
Invicti Web Application Security Scanner – die einzige Lösung, die eine automatische Verifizierung von Schwachstellen mit Proof-Based Scanning™ bietet.

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

What is 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.

Why use it? – Container Orchestration

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 ein großer Schmerz sein DevOps Ingenieure; 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.

Orchestrate Docker Containers

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

worker1: 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. Die Flagge --advertise-addr wird verwendet, um sich selbst auf den Knoten zu bewerben, die dem Cluster beitreten können.

geekflare@manager1:~$ docker swarm init --advertise-addr 192.168.56.104

Swarm initialized: current node (lssbyfzuiuh3sye1on63eyixf) is now a manager.

To add a worker to this swarm, run the following command:

docker swarm join --token SWMTKN-1-3h3d8qgvdlxi8tl1oqpfho9khx7i1t5nq7562s9gzojbcm9kr6-azy4rffrzou0nem9hxq4ro5am 192.168.56.104:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

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.

geekflare@worker1:~$ docker swarm join --token SWMTKN-1-3h3d8qgvdlxi8tl1oqpfho9khx7i1t5nq7562s9gzojbcm9kr6-azy4rffrzou0nem9hxq4ro5am 192.168.56.104:2377

This node joined a swarm as a worker.

Ausführen des Tokens auf dem Knoten worker2.

geekflare@worker2:~$ docker swarm join --token SWMTKN-1-3h3d8qgvdlxi8tl1oqpfho9khx7i1t5nq7562s9gzojbcm9kr6-azy4rffrzou0nem9hxq4ro5am 192.168.56.104:2377

This node joined a swarm as a worker.

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

geekflare@manager1:~$ docker node ls

ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION

lssbyfzuiuh3sye1on63eyixf *   manager1            Ready               Active              Leader              18.09.6

utdr3dnngqf1oy1spupy1qlhu     worker1             Ready               Active                                  18.09.6

xs6jqp95lw4cml1i1npygt3cg     worker2             Ready               Active                                  18.09.6

Lassen Sie uns das bauen geekflare_mongodb Docker-Image, in dem wir verwendet haben Dockerfile-Tutorial.

docker build -t geekflare_mongodb .

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

geekflare@manager1:~$ docker service create --name "Mongo-Container" -p 27017:27017 geekflare_mongodb

image geekflare_mongodb:latest could not be accessed on a registry to record its digest. Each node will access geekflare_mongodb:latest independently, possibly leading to different nodes running different versions of the image.

kok58xa4zi05psh3uy6s5x9e6

overall progress: 1 out of 1 tasks

1/1: running

verify: Service converged

Überprüfen Sie, ob der Docker-Schwarmdienst gestartet wurde. MODUS 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.

geekflare@manager1:~$ docker service ls

ID                  NAME                MODE                REPLICAS            IMAGE                      PORTS

kok58xa4zi05        Mongo-Container     replicated          1/1                 geekflare_mongodb:latest   *:27017->27017/tcp

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

geekflare@manager1:~$ docker service ps Mongo-Container

ID                  NAME                IMAGE                      NODE                DESIRED STATE       CURRENT STATE                ERROR               PORTS

jgqjo92rbq23        Mongo-Container.1   geekflare_mongodb:latest   manager1            Running             Running about a minute ago

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

geekflare@manager1:~$ docker ps

CONTAINER ID        IMAGE                      COMMAND                  CREATED             STATUS              PORTS               NAMES

05d77e7b4850        geekflare_mongodb:latest   "/bin/sh -c usr/bin/…"   2 minutes ago       Up 2 minutes        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.

geekflare@manager1:~$ docker service rm Mongo-Container

Mongo-Container

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

geekflare@manager1:~$ docker service create --name "Mongo-Container" -p 27017:27017 --mode global geekflare_mongodb

image geekflare_mongodb:latest could not be accessed on a registry to record its digest. Each node will access geekflare_mongodb:latest independently, possibly leading to different nodes running different versions of the image.

mfw8dp0zylffppkllkcjl8391

overall progress: 3 out of 3 tasks

utdr3dnngqf1: running

lssbyfzuiuh3: running

xs6jqp95lw4c: running

verify: Service converged

Ü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.

geekflare@manager1:~$ docker service ls

ID                  NAME                MODE                REPLICAS            IMAGE                      PORTS

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

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

geekflare@manager1:~$ docker service ps Mongo-Container

ID                  NAME                                        IMAGE                      NODE                DESIRED STATE       CURRENT STATE                ERROR               PORTS

zj2blvptkvj6        Mongo-Container.xs6jqp95lw4cml1i1npygt3cg   geekflare_mongodb:latest   worker2             Running             Running about a minute ago

3eaweijbbutf        Mongo-Container.utdr3dnngqf1oy1spupy1qlhu   geekflare_mongodb:latest   worker1             Running             Running about a minute ago

yejg1o2oyab7        Mongo-Container.lssbyfzuiuh3sye1on63eyixf   geekflare_mongodb:latest   manager1            Running             Running about a minute ago

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.

geekflare@manager1:~$ 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:

geekflare@manager1:~$ docker service create --name "Mongo-Container" -p 27017:27017 --replicas=2 geekflare_mongodb

image geekflare_mongodb:latest could not be accessed on a registry to record its digest. Each node will access geekflare_mongodb:latest independently, possibly leading to different nodes running different versions of the image.

4yfl41n7sfak65p6zqwwjq82c

overall progress: 2 out of 2 tasks

1/2: running

2/2: running

verify: Service converged

Ü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.

geekflare@manager1:~$ docker service ps Mongo-Container

ID                  NAME                IMAGE                      NODE                DESIRED STATE       CURRENT STATE           ERROR               PORTS

xukodj69h79q        Mongo-Container.1   geekflare_mongodb:latest   worker1             Running             Running 9 seconds ago

e66zllm0foc8        Mongo-Container.2   geekflare_mongodb:latest   manager1            Running             Running 9 seconds ago

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

geekflare@worker1:~$ docker ps

CONTAINER ID        IMAGE                      COMMAND                  CREATED              STATUS              PORTS               NAMES

5042b7f161cb        geekflare_mongodb:latest   "/bin/sh -c usr/bin/…"   About a minute ago   Up About a minute   27017/tcp           Mongo-Container.1.xukodj69h79q3xf0pouwm7bwv

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

geekflare@worker1:~$ 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 CURRENT STATE des Worker1-Knotens 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.

geekflare@manager1:~$ docker service ps Mongo-Container

ID                  NAME                    IMAGE                      NODE                DESIRED STATE       CURRENT STATE            ERROR                         PORTS

cd2rlv90umej        Mongo-Container.1       geekflare_mongodb:latest   worker2             Running             Running 30 seconds ago

xukodj69h79q         \_ Mongo-Container.1   geekflare_mongodb:latest   worker1             Shutdown            Failed 38 seconds ago    "task: non-zero exit (137)"

e66zllm0foc8        Mongo-Container.2       geekflare_mongodb:latest   manager1            Running             Running 3 minutes ago

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

geekflare@manager1:~$ docker service scale Mongo-Container=5

Mongo-Container scaled to 5

overall progress: 5 out of 5 tasks

1/5: running

2/5: running

3/5: running

4/5: running

5/5: running

verify: Service converged

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

geekflare@manager1:~$ docker service ls

ID                  NAME                MODE                REPLICAS            IMAGE                      PORTS

4yfl41n7sfak        Mongo-Container     replicated          5/5                 geekflare_mongodb:latest   *: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.

geekflare@manager1:~$ docker service ps Mongo-Container

ID                  NAME                    IMAGE                      NODE                DESIRED STATE       CURRENT STATE            ERROR                         PORTS

cd2rlv90umej        Mongo-Container.1       geekflare_mongodb:latest   worker2             Running             Running 2 minutes ago

xukodj69h79q         \_ Mongo-Container.1   geekflare_mongodb:latest   worker1             Shutdown            Failed 2 minutes ago     "task: non-zero exit (137)"

e66zllm0foc8        Mongo-Container.2       geekflare_mongodb:latest   manager1            Running             Running 5 minutes ago

qmp0gqr6ilxi        Mongo-Container.3       geekflare_mongodb:latest   worker2             Running             Running 47 seconds ago

9ddrf4tsvnu2        Mongo-Container.4       geekflare_mongodb:latest   worker1             Running             Running 46 seconds ago

e9dhoud30nlk        Mongo-Container.5       geekflare_mongodb:latest   worker1             Running             Running 44 seconds ago

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 beibehalten möchten, können Sie den Manager-Knoten entleeren.

geekflare@manager1:~$ docker node update --availability drain manager1

manager1

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

geekflare@manager1:~$ docker node ls

ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION

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.

geekflare@manager1:~$ docker service ps Mongo-Container

ID                  NAME                    IMAGE                      NODE                DESIRED STATE       CURRENT STATE             ERROR                         PORTS

cd2rlv90umej        Mongo-Container.1       geekflare_mongodb:latest   worker2             Running             Running 5 minutes ago

xukodj69h79q         \_ Mongo-Container.1   geekflare_mongodb:latest   worker1             Shutdown            Failed 5 minutes ago      "task: non-zero exit (137)"

qo405dheuutj        Mongo-Container.2       geekflare_mongodb:latest   worker1             Running             Running 41 seconds ago

e66zllm0foc8         \_ Mongo-Container.2   geekflare_mongodb:latest   manager1            Shutdown            Shutdown 44 seconds ago

qmp0gqr6ilxi        Mongo-Container.3       geekflare_mongodb:latest   worker2             Running             Running 3 minutes ago

9ddrf4tsvnu2        Mongo-Container.4       geekflare_mongodb:latest   worker1             Running             Running 3 minutes ago

e9dhoud30nlk        Mongo-Container.5       geekflare_mongodb:latest   worker1             Running             Running 3 minutes ago

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

Danke an unsere Sponsoren
Weitere großartige Lektüre zu DevOps
Treiben Sie Ihr Geschäft an
Einige der Tools und Dienste, die Ihr Unternehmen beim Wachstum unterstützen.
  • Invicti verwendet das Proof-Based Scanning™, um die identifizierten Schwachstellen automatisch zu verifizieren und innerhalb weniger Stunden umsetzbare Ergebnisse zu generieren.
    Versuchen Sie es mit Invicti
  • Web-Scraping, Wohn-Proxy, Proxy-Manager, Web-Unlocker, Suchmaschinen-Crawler und alles, was Sie zum Sammeln von Webdaten benötigen.
    Versuchen Sie es mit Brightdata
  • Semrush ist eine All-in-One-Lösung für digitales Marketing mit mehr als 50 Tools in den Bereichen SEO, Social Media und Content-Marketing.
    Versuchen Sie es mit Semrush
  • Intruder ist ein Online-Schwachstellenscanner, der Cyber-Sicherheitslücken in Ihrer Infrastruktur findet, um kostspielige Datenschutzverletzungen zu vermeiden.
    MIT DER INTELLIGENTEN SCHADENKALKULATION VON Intruder