Docker Swarm von der Bereitstellung bis zum grundlegenden Betrieb

Docker Swarm von der Bereitstellung bis zum grundlegenden Betrieb

Über Docker Swarm

Docker Swarm besteht aus zwei Teilen:

  1. Docker-Cluster: Organisieren Sie einen oder mehrere Docker-Knoten, sodass Benutzer sie in einem Cluster verwalten können.
  2. Anwendungsorchestrierung: Es gibt eine Reihe von APIs zum Bereitstellen und Verwalten von Containern;

Offizielle Informationen: https://docs.docker.com/swarm/

Netzwerkdiagramm

Die folgende Abbildung ist ein typisches Docker Swarm-Cluster-Bereitstellungsdiagramm von der offiziellen Docker-Website:

Folgen Sie als Nächstes dem obigen Bild, um einen Docker Swarm-Cluster zu erstellen.

Vorbereitung

Insgesamt wurden bei diesem tatsächlichen Kampf fünf Maschinen eingesetzt und die Konfigurationsinformationen sind alle dieselben und lauten wie folgt:

  • Betriebssystem: CentOS Linux Version 7.6.1810
  • Docker-Dienstversion: 1.13.1
  • Die Firewalls wurden ausgeschaltet;

Die Maschineninformationen sind in der folgenden Tabelle aufgeführt:

IP-Adresse Hostname Identität
192.168.121.142 m0 Verwaltungsknoten
192.168.121.139 m1 Verwaltungsknoten
192.168.121.140 m2 Verwaltungsknoten
192.168.121.141 w0 Arbeiterknoten
192.168.121.138 w1 Arbeiterknoten

Warum drei Verwaltungsknoten?

Wie aus dem offiziellen Diagramm ersichtlich, verwendet die interne Verwaltungskoordination zwischen den Verwaltungsknotenclustern den Raft-Konsensalgorithmus, der die hohe Verfügbarkeit (HA) der Verwaltungsknoten gewährleistet. Im Allgemeinen wird auf die folgenden zwei Prinzipien verwiesen:

  • Setzen Sie eine ungerade Anzahl Verwaltungsknoten ein, um Brain Splits zu reduzieren.
  • Setzen Sie nicht zu viele Verwaltungsknoten ein, da mehr Verwaltungsknoten mehr Zeit bedeuten, um einen Konsens zu erreichen.

Übersicht über die Schritte zur Clusterbereitstellung

Der gesamte Bereitstellungsprozess gliedert sich in die folgenden Schritte:

  • Initialisieren Sie den ersten Verwaltungsknoten (m0).
  • Fügen Sie neue Verwaltungsknoten hinzu (m1, m2);
  • Arbeitsknoten (w0, w1) verbinden;

Jetzt fangen wir offiziell an;

Initialisieren Sie den ersten Verwaltungsknoten (m0).

Die IP-Adresse des m0-Knotens lautet 192.168.121.142, führen Sie daher den folgenden Befehl auf dem m0-Knoten aus:

Docker-Schwarm-Init \
--advertise-addr 192.168.121.142:2377
--listen-addr 192.168.121.142:2377

In Bezug auf die beiden Parameter Advertise-Addr und Listen-Addr wird ersterer verwendet, um die Adresse anderer Knoten beim Herstellen einer Verbindung mit m0 anzugeben, und letzterer gibt die IP und den Port an, die den Schwarmverkehr übertragen. Weitere Einzelheiten und tiefere Unterschiede finden Sie im Artikel: https://boxboat.com/2016/08/17/whats-docker-swarm-advertise-addr/

2. Die Konsole gibt die folgenden Informationen zurück und zeigt damit an, dass der Swarm-Cluster erfolgreich initialisiert wurde:

Swarm initialisiert: Der aktuelle Knoten (7585zt09o2sat82maef0ocf42) ist jetzt ein Manager.

Um diesem Schwarm einen Arbeiter hinzuzufügen, führen Sie den folgenden Befehl aus:

  Docker-Schwarm beitreten \
  --token SWMTKN-1-5huefb5501cv7p8i2op1am2oevasoqu4te8vpvapndkudvszb4-e8l6755jstd7urpdo5smyi8fv \
  192.168.121.142:2377

Um diesem Swarm einen Manager hinzuzufügen, führen Sie „Docker Swarm Join-Token Manager“ aus und folgen Sie den Anweisungen.

Listen Sie alle Knoten im aktuellen Swarm-Cluster auf, und Sie können den Status und die Identität des einzigen Knotens m0 sehen:

[root@m0 ~]# Docker-Knoten ls
ID HOSTNAME STATUS VERFÜGBARKEIT MANAGER STATUS
7585zt09o2sat82maef0ocf42 * m0 Bereit Aktiver Anführer

Nachdem der Cluster nun eingerichtet wurde, müssen wir weitere Verwaltungsknoten und Arbeitsknoten hinzufügen.

Wie füge ich einen neuen Knoten hinzu?

Die Strategie für neue Knoten, die Docker Swarm beitreten, besteht darin, eine lange Befehlsfolge vom Verwaltungsknoten abzurufen, die als Join-Token bezeichnet wird. Jede Maschine, die dem Cluster beitreten möchte, kann dem Swarm-Cluster beitreten, indem sie dieses Join-Token selbst ausführt.

Wenn ein neuer Verwaltungsknoten hinzugefügt werden muss, führen Sie den Befehl docker swarm join-token manager auf m0 aus, um das Join-Token des Verwaltungsknotens abzurufen, wie unten gezeigt:

[root@m0 ~]# Docker Swarm-Join-Token-Manager
Um diesem Swarm einen Manager hinzuzufügen, führen Sie den folgenden Befehl aus:

  Docker-Schwarm beitreten \
  --token SWMTKN-1-5huefb5501cv7p8i2op1am2oevasoqu4te8vpvapndkudvszb4-5tz9d4w7nwzu8r4ozd0ff2aiu \
  192.168.121.142:2377

Wenn ein neuer Worker-Knoten hinzugefügt werden muss, führen Sie den Befehl „Docker Swarm Join-Token Worker“ in m0 aus, um das Join-Token des Worker-Knotens abzurufen, wie unten gezeigt:

[root@m0 ~]# Docker Swarm Join-Token-Arbeiter
Um diesem Schwarm einen Arbeiter hinzuzufügen, führen Sie den folgenden Befehl aus:

  Docker-Schwarm beitreten \
  --token SWMTKN-1-5huefb5501cv7p8i2op1am2oevasoqu4te8vpvapndkudvszb4-e8l6755jstd7urpdo5smyi8fv \
  192.168.121.142:2377

Beide Join-Token sind bereit und dann beginnen wir mit dem Hinzufügen neuer Knoten.

Verwaltungsknoten m1 und m2 hinzufügen

Führen Sie den zuvor erhaltenen Management-Node-Join-Token auf m1 aus:

[root@m1 ~]# Docker-Schwarm beitreten \
> --token SWMTKN-1-5huefb5501cv7p8i2op1am2oevasoqu4te8vpvapndkudvszb4-5tz9d4w7nwzu8r4ozd0ff2aiu \
> 192.168.121.142:2377
Dieser Knoten ist einem Schwarm als Manager beigetreten.

Machen Sie dasselbe auf m2;

Führen Sie den Befehl „docker node ls“ auf einem der Knoten m0, m1 und m2 aus, um den aktuellen Status des Swarm-Clusters anzuzeigen. Wie in der folgenden Abbildung dargestellt, befinden sich alle drei Verwaltungsknoten im Normalzustand. Das ID-Feld hat ein Sternchen als Suffix, was darauf hinweist, dass die Maschine, die den Befehl derzeit ausführt, m1 ist:

[root@m1 ~]# Docker-Knoten ls
ID HOSTNAME STATUS VERFÜGBARKEIT MANAGER STATUS
0isfyre69mdu1hm11esf1q3dk m2 Bereit Aktiv Erreichbar
7585zt09o2sat82maef0ocf42 m0 Bereit Aktiver Anführer
slc0hjbs7jh2hdi8ai3wohy23 * m1 Bereit Aktiv Erreichbar

Arbeitsknoten w0 und w1 verbinden

Führen Sie den Join-Token des zuvor erhaltenen Arbeitsknotens auf w0 aus:

[root@w0 ~]# Docker-Schwarm beitreten \
> --token SWMTKN-1-5huefb5501cv7p8i2op1am2oevasoqu4te8vpvapndkudvszb4-e8l6755jstd7urpdo5smyi8fv \
> 192.168.121.142:2377
Dieser Knoten ist einem Schwarm als Arbeiter beigetreten.

Führen Sie die gleiche Operation auf w1 aus;

Führen Sie den Befehl docker node ls auf einem der Knoten m0, m1 und m2 aus, um den aktuellen Status des Swarm-Clusters anzuzeigen. Sie können sehen, dass alle Arbeitsknoten bereit sind:

[root@m0 ~]# Docker-Knoten ls
ID HOSTNAME STATUS VERFÜGBARKEIT MANAGER STATUS
0isfyre69mdu1hm11esf1q3dk m2 Bereit Aktiv Erreichbar
7585zt09o2sat82maef0ocf42 * m0 Bereit Aktiver Anführer
i71bcxt1auc804syybroajtan w1 Bereit Aktiv    
slc0hjbs7jh2hdi8ai3wohy23 m1 Bereit Aktiv Erreichbar
wqcwcccva3d3mxgi5p423d4fv w0 Bereit Aktiv

An diesem Punkt ist die Swarm-Clusterumgebung erstellt und kann als Nächstes überprüft werden.

Überprüfen der Swarm-Clusterumgebung

Erstellen Sie ein Overlay-Netzwerk mit dem Namen tomcat-net. Dies ist ein Layer-2-Netzwerk. Docker-Container in diesem Netzwerk können aufeinander zugreifen, auch wenn die Hostcomputer unterschiedlich sind:

Docker-Netzwerk erstellen -d Overlay Tomcat-Net

Erstellen Sie einen Dienst namens Tomcat und verwenden Sie dabei das soeben erstellte Overlay-Netzwerk:

Docker-Dienst erstellen --Name Tomcat \
--Netzwerk Tomcat-Net \
-p 8080:8080 \
--Replikate 3 \
Tomcat: 7.0.96-jdk8-openjdk

Führen Sie den Befehl „Docker Service ls“ aus, um alle aktuellen Dienste anzuzeigen:

[root@m0 ~]# Docker-Dienst ls
ID NAME MODUS REPLIKATE BILD
kguawc4b5th4 Tomcat repliziert 3/3 Tomcat:7.0.96-jdk8-openjdk
 

Führen Sie den Befehl docker service ps tomcat aus, um den Dienst mit dem Namen tomcat anzuzeigen. Sie können sehen, dass die drei Container jeweils auf den Maschinen m0, m2 und w1 bereitgestellt sind:

[root@m0 ~]# Docker-Dienst PS Tomcat
ID NAME BILD KNOTEN GEWÜNSCHTER ZUSTAND AKTUELLER ZUSTAND FEHLER PORTS
n1gs9f1plce2 tomcat.1 tomcat:7.0.96-jdk8-openjdk w1 Läuft Läuft vor 19 Minuten     
q8jyg088ci21 tomcat.2 tomcat:7.0.96-jdk8-openjdk m2 Läuft Läuft vor 19 Minuten     
h9ww33dpw56m tomcat.3 tomcat:7.0.96-jdk8-openjdk m0 Läuft Läuft vor 19 Minuten

Führen Sie den Befehl „docker service inspect --pretty tomcat“ aus, um ausführliche Informationen zum Dienst mit dem Namen „tomcat“ anzuzeigen (entfernen Sie „–pretty“, um eine umfassendere Ansicht zu erhalten):

[root@m0 ~]# Docker-Dienst inspizieren --pretty Tomcat

ID: kguawc4b5th4qlwlsv183qtai
Name: Kater
Servicemodus: Repliziert
 Replikate: 3
Platzierung:
Konfiguration aktualisieren:
 Parallelität: 1
 Bei Fehler: Pause
 Maximale Ausfallrate: 0
Containerspezifikation:
 Bild: tomcat:7.0.96-jdk8-openjdk@sha256:91eadffb59d9a35ada2d39fcd616a749ac580aa5e834499b7128f27be2e46623
Ressourcen:
Netzwerke: tomcat-net 
Endpunktmodus: vip
Häfen:
 VeröffentlichtPort 8080
 Protokoll = tcp
 ZielPort = 8080

Öffnen Sie den Browser und versuchen Sie, auf Port 8080 der fünf Maschinen m0, m1, m2, w0 und w1 zuzugreifen. Sie können erfolgreich auf die Tomcat-Homepage zugreifen:

Servicemodell

  1. Es gibt zwei Dienstmodi: Ingress und Host. Wenn nicht angegeben, wird standardmäßig Ingress verwendet.
  2. Im Ingress-Modus wird der Datenverkehr, der am Port 8080 eines beliebigen Swarm-Knotens ankommt, dem internen Port 80 einer beliebigen Dienstreplik zugeordnet, selbst wenn auf dem Knoten keine Tomcat-Dienstreplik vorhanden ist.
  3. Im Hostmodus werden Ports nur auf dem Computer geöffnet, auf dem die Containerkopie ausgeführt wird. Der Befehl zur Verwendung des Hostmodus lautet wie folgt:
Docker-Dienst erstellen --Name Tomcat \
--Netzwerk Tomcat-Net \
--publish veröffentlicht=8080,Ziel=8080,Modus=Host \
--Replikate 3 \
Tomcat: 7.0.96-jdk8-openjdk

Service-Skalierung

Führen Sie den Befehl „docker service scale tomcat=5“ aus, um die Anzahl der Replikate von 3 auf 5 anzupassen:

[root@m0 ~]# Docker-Dienst skalieren Tomcat=5
Kater auf 5 skaliert

Führen Sie den Befehl docker service ps tomcat aus, um den Dienst mit dem Namen tomcat anzuzeigen. Sie können sehen, dass auf jeder Maschine ein Container verteilt ist:

[root@m0 ~]# Docker-Dienst PS Tomcat
ID NAME BILD KNOTEN GEWÜNSCHTER ZUSTAND AKTUELLER ZUSTAND FEHLER PORTS
w32tjahze2fk tomcat.1 tomcat:7.0.96-jdk8-openjdk m2 Läuft Läuft vor 42 Minuten       
yj5czwwhrrsh tomcat.2 tomcat:7.0.96-jdk8-openjdk m0 Läuft Läuft vor 42 Minuten       
pq40995nbd0k tomcat.3 tomcat:7.0.96-jdk8-openjdk w1 Läuft Läuft vor 42 Minuten       
y1y6z1jczel1 tomcat.4 tomcat:7.0.96-jdk8-openjdk m1 Läuft Läuft vor etwa einer Minute     
w0dcii8f79os tomcat.5 tomcat:7.0.96-jdk8-openjdk w0 Läuft Läuft vor etwa einer Minute

Laufendes Upgrade

Im aktuellen Tomcat-Dienst lautet das Tag des Tomcat-Images 7.0.96-jdk8-openjdk . Versuchen wir, es auf 9.0.24-jdk11-openjdk zu aktualisieren. Führen Sie den folgenden Befehl aus:

Docker-Dienstaktualisierung \
--image tomcat:9.0.24-jdk11-openjdk \
--update-parallelism 1 \
--update-delay 10 s Tomcat

Zum obigen Befehl sind einige Dinge zu beachten:
a. update-parallelism: Die Anzahl der Container, die jedes Mal aktualisiert werden. Hier ist der Wert auf 1 gesetzt, was bedeutet, dass jeder Container erst aktualisiert wird, wenn er erfolgreich aktualisiert wurde.
b. Update-Verzögerung: Die Wartezeit vor dem Upgrade des nächsten Batches, nachdem jeder Batch erfolgreich aktualisiert wurde. Hier bedeutet dies, dass nach dem Upgrade eines Containers 10 Sekunden gewartet wird, bevor der nächste aktualisiert wird.

2. Führen Sie während des Aktualisierungsvorgangs den Befehl docker service ps tomcat aus, um den Dienst anzuzeigen. Sie können den Vorgang des Startens der Container der neuen Version nacheinander verfolgen:

[root@m0 ~]# Docker-Dienst PS Tomcat
ID NAME BILD KNOTEN GEWÜNSCHTER ZUSTAND AKTUELLER ZUSTAND FEHLER PORTS
w32tjahze2fk tomcat.1 tomcat:7.0.96-jdk8-openjdk m2 Läuft Läuft vor 56 Minuten       
yj5czwwhrrsh tomcat.2 tomcat:7.0.96-jdk8-openjdk m0 Läuft Läuft vor 56 Minuten       
semuna9awsn7 tomcat.3 tomcat:9.0.24-jdk11-openjdk w1 Läuft Läuft vor 15 Sekunden       
pq40995nbd0k \_ tomcat.3 tomcat:7.0.96-jdk8-openjdk w1 Herunterfahren Herunterfahren vor etwa einer Minute     
y1y6z1jczel1 tomcat.4 tomcat:7.0.96-jdk8-openjdk m1 Läuft Läuft vor 15 Minuten       
oot3yex74v4t tomcat.5 tomcat:9.0.24-jdk11-openjdk w0 Wird ausgeführt Vorbereitung vor 5 Sekunden       
w0dcii8f79os \_ tomcat.5 tomcat:7.0.96-jdk8-openjdk w0 Herunterfahren Herunterfahren vor 3 Sekunden

Nachdem das Upgrade abgeschlossen ist, greifen Sie über den Browser auf den Dienst zu. Sie können sehen, dass die Tomcat-Version aktualisiert wurde:

Löschen eines Dienstes

Führen Sie den Befehl „docker service rm tomcat“ aus, um den Dienst zu löschen:

[root@m0 ~]# Docker-Dienst rm Tomcat
Kater
[root@m0 ~]# Docker-Dienst ls
ID NAME MODUS REPLIKATE BILD

Bisher haben Sie Docker Swarm von der Bereitstellung bis zum grundlegenden Betrieb kennengelernt. Ich hoffe, dieser Artikel kann Ihnen beim Erstellen der Umgebung einige Referenzen geben.

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • So installieren Sie Docker und verwenden es im Docker Swarm-Modus
  • Detaillierte Erläuterung der Prinzipien der Diensterkennung und des Lastenausgleichs von Docker Swarm
  • Detaillierte Erklärung von Docker-Swarm-Clusterfehlern und Ausnahmen
  • Detaillierte Erläuterung zur Verwendung von Docker 1.12 zum Erstellen eines Docker-Schwarmclusters mit mehreren Hosts
  • Tutorial zum schnellen Bereitstellen eines Nebula Graph-Clusters mit Docker Swarm

<<:  Analyse des Prinzips der Verwendung von PDO zur Verhinderung von SQL-Injection

>>:  Mehrere Möglichkeiten, Axios in Vue zu kapseln

Artikel empfehlen

Detaillierte Erklärung des Initialisierungsmechanismus in Bash

Bash-Initialisierungsdateien Interaktive Login-Sh...

Einführung in die grundlegenden TypeScript-Typen

Inhaltsverzeichnis 1. Grundtypen 2. Objekttyp 2.1...

Detaillierte Erläuterung der Verwendung des DockerHub-Image-Repository

Bisher wurden die von uns verwendeten Images alle...

Lösung für das Problem von var in einer for-Schleife

Vorwort var ist eine Möglichkeit, Variablen in ES...

js, um einen Ein- und Ausblendeffekt des Bildes zu erzielen

In diesem Artikel wird der spezifische Code von j...

Detailliertes Tutorial zum Bereitstellen von Jenkins basierend auf Docker

0. Als ich dieses Dokument erstellte, war es unge...

Verwenden des radialen Farbverlaufs in CSS zum Erzielen eines Karteneffekts

Vor einigen Tagen erhielt eine Kollegin ein Punkt...

Beispiel für Auslassungspunkte bei Überlauf von mehrzeiligem CSS-Text

Auslassungspunkte werden angezeigt, wenn mehrzeil...

Konvertieren von XHTML-CSS-Seiten in Druckerseiten

In der Vergangenheit bedeutete das Erstellen eine...