Einführung
In diesem Lab erfahren Sie, wie Sie Knoten in einem Docker Swarm mit dem Befehl docker swarm leave verwalten können. Sie beginnen damit, einen Docker Swarm zu initialisieren und einen Worker-Knoten (Arbeitsknoten) hinzuzufügen. Anschließend üben Sie das Entfernen des Worker-Knotens aus dem Swarm. Abschließend erkunden Sie den Prozess des Entfernens eines Manager-Knotens (Verwaltungsknotens), einschließlich der Notwendigkeit, die Force-Option (Zwangsmethode) zu verwenden.
Einen Docker Swarm initialisieren
In diesem Schritt erfahren Sie, wie Sie einen Docker Swarm initialisieren können. Ein Docker Swarm ist ein Cluster von Docker-Hosts, die im Swarm-Modus (Schwarmmodus) ausgeführt werden. Der Swarm-Modus ermöglicht es Ihnen, ein Cluster von Docker-Knoten als ein einzelnes virtuelles System zu verwalten.
Bevor Sie den Swarm initialisieren, überprüfen wir zunächst die aktuelle Docker-Version, die auf der LabEx VM installiert ist.
docker version
Sie sollten eine Ausgabe ähnlich der folgenden sehen, die darauf hinweist, dass die Docker-Version 20.10.21 ist:
Client: Docker Engine - Community
Version: 20.10.21
API version: 1.41
Go version: go1.18.9
Git commit: baedd2a
Built: Tue Oct 25 17:58:10 2022
OS/Arch: linux/amd64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 20.10.21
API version: 1.41 (minimum version 1.12)
Go version: go1.18.9
Git commit: 305620d
Built: Tue Oct 25 17:56:51 2022
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.6.10
GitCommit: b4bd567ea6c98e7b5d78a23676a0a79559d930d5
runc:
Version: 1.1.4
GitCommit: v1.1.4-0-g5fd4c4d
docker-init:
Version: 0.19.0
GitCommit: de40ad0
Um einen Docker Swarm zu initialisieren, verwenden Sie den Befehl docker swarm init. Dieser Befehl verwandelt den aktuellen Docker-Host in einen Swarm-Manager (Schwarmverwalter).
docker swarm init
Nachdem Sie den Befehl ausgeführt haben, sehen Sie eine Ausgabe, die darauf hinweist, dass der Swarm initialisiert wurde und einen Befehl bereitstellt, um andere Knoten als Worker (Arbeitsknoten) hinzuzufügen. Die Ausgabe sieht in etwa so aus:
Swarm initialized: current node (xxxxxxxxxxxx) is now a manager.
To add a worker to this swarm, run the following command on the worker node:
docker swarm join --token SWMTKN-1-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 172.17.0.2:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
Die Ausgabe zeigt, dass der aktuelle Knoten jetzt ein Swarm-Manager ist. Sie enthält auch den Befehl, um einen Worker-Knoten zu diesem Swarm hinzuzufügen. Wir werden diesen Befehl im nächsten Schritt verwenden.
Sie können den Status des Swarms mit dem Befehl docker info überprüfen.
docker info
Suchen Sie im Output nach der "Swarm"-Sektion. Sie sollte anzeigen, dass der Swarm "aktiv" ist.
...
Swarm: active
NodeID: xxxxxxxxxxxx
Is Manager: true
ClusterID: xxxxxxxxxxxx
Managers: 1
Nodes: 1
Orchestration:
TaskHistoryRetentionLimit: 5
Raft:
HeartbeatInterval: 100ms
ElectionTimeout: 3s
SnapshotInterval: 500ms
Dispatcher:
HeartbeatPeriod: 5s
CA configuration:
Expiry duration: 3 months
Force rotate at: 7 weeks
Root Rotation: false
Local Node State: active
Error: none
Remote Manager:
ID: xxxxxxxxxxxx
Addr: 172.17.0.2:2377
Addr: 172.17.0.2:2377
Node Address: 172.17.0.2
Manager Status:
Cluster Address: 172.17.0.2:2377
Leader: Yes
Reachability: Reachable
...
Dies bestätigt, dass der Docker Swarm auf diesem Knoten erfolgreich initialisiert wurde.
Einen Worker-Knoten dem Swarm hinzufügen
Im vorherigen Schritt haben wir einen Docker Swarm initialisiert, und die Ausgabe hat uns einen Befehl zum Hinzufügen eines Worker-Knotens gegeben. In einer realen Umgebung würden Sie diesen Befehl auf einem separaten Rechner ausführen, den Sie als Worker zu Ihrem Swarm hinzufügen möchten. Da wir jedoch eine einzelne LabEx VM verwenden, werden wir das Hinzufügen eines Worker-Knotens simulieren, indem wir den Join-Befehl auf demselben Rechner ausführen.
Zunächst holen wir uns den Join-Befehl für einen Worker-Knoten. Sie können das Join-Token und den Befehl erhalten, indem Sie docker swarm join-token worker auf dem Manager-Knoten (unser aktuelle VM) ausführen.
docker swarm join-token worker
Die Ausgabe sieht in etwa so aus:
To add a worker to this swarm, run the following command on the worker node:
docker swarm join --token SWMTKN-1-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 172.17.0.2:2377
Kopieren Sie den gesamten docker swarm join --token ...-Befehl aus der Ausgabe. Dieser Befehl enthält das eindeutige Token sowie die IP-Adresse und den Port des Swarm-Managers.
Führen Sie nun den kopierten Befehl aus, um den aktuellen Knoten als Worker zum Swarm hinzuzufügen.
docker swarm join --token SWMTKN-1-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 172.17.0.2:2377
Ersetzen Sie das Token und die IP-Adresse durch die Werte, die Sie mit dem Befehl docker swarm join-token worker erhalten haben.
Sie sollten eine Ausgabe sehen, die darauf hinweist, dass der Knoten als Worker dem Swarm beigetreten ist:
This node joined a swarm as a worker.
Um zu überprüfen, ob der Knoten dem Swarm beigetreten ist, können Sie die Knoten im Swarm aus Sicht des Managers auflisten. Da unsere einzelne VM sowohl als Manager als auch als Worker fungiert, können wir den Befehl docker node ls verwenden.
docker node ls
Die Ausgabe zeigt die Knoten im Swarm an. Sie sollten zwei Einträge für dieselbe Knoten-ID sehen, einen mit dem Status "Ready" und der Rolle "Manager" und einen anderen mit dem Status "Ready" und der Rolle "Worker".
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
xxxxxxxxxxxx * labex-vm Ready Active Leader 20.10.21
xxxxxxxxxxxx labex-vm Ready Active 20.10.21
Dies bestätigt, dass der Knoten erfolgreich als Worker dem Swarm beigetreten ist.
Einen Worker-Knoten aus dem Swarm entfernen
Im vorherigen Schritt haben wir den Knoten erfolgreich als Worker dem Swarm beigetreten. Jetzt lernen wir, wie man einen Knoten aus dem Swarm entfernt. Um einen Swarm von einem Worker-Knoten aus zu verlassen, verwenden Sie den Befehl docker swarm leave.
Führen Sie den folgenden Befehl aus, um den aktuellen Knoten als Worker aus dem Swarm zu entfernen:
docker swarm leave
Sie sollten eine Ausgabe sehen, die darauf hinweist, dass der Knoten den Swarm verlassen hat:
Node left the swarm.
Jetzt überprüfen wir, ob der Knoten den Swarm verlassen hat. Wir können erneut den Befehl docker node ls verwenden. Da der Knoten den Swarm verlassen hat, führt das Ausführen von docker node ls auf diesem Knoten zu einem Fehler, da er nicht mehr Teil des Swarms ist.
docker node ls
Sie werden eine Fehlermeldung ähnlich der folgenden sehen:
Error: This node is not a swarm manager. Use "docker swarm join" to join the swarm and try again.
Dieser Fehler bestätigt, dass der Knoten nicht mehr Teil des Swarms ist.
Um dies weiter zu verifizieren, überprüfen wir den Swarm-Status mit docker info.
docker info
Der "Swarm"-Abschnitt in der Ausgabe sollte nun anzeigen, dass der Swarm "inaktiv" ist.
...
Swarm: inactive
...
Dies bestätigt, dass der Knoten den Docker Swarm erfolgreich verlassen hat.
Versuch, einen Manager-Knoten ohne Erzwingen aus dem Swarm zu entfernen
Im vorherigen Schritt haben wir erfolgreich einen Worker-Knoten aus dem Swarm entfernt. Jetzt schauen wir uns an, was passiert, wenn wir versuchen, einen Manager-Knoten mit demselben Befehl docker swarm leave ohne zusätzliche Optionen zu entfernen.
Führen Sie den folgenden Befehl aus, um zu versuchen, den Swarm von dem Manager-Knoten aus zu verlassen:
docker swarm leave
Sie werden eine Fehlermeldung ähnlich der folgenden erhalten:
Error response from daemon: You are attempting to leave the swarm on a node that is participating as a manager. Use the --force flag to force the node to leave the swarm. Note that this may disrupt the swarm, so use this option with caution.
Diese Fehlermeldung zeigt an, dass Sie nicht einfach einen Swarm von einem Manager-Knoten aus verlassen können, ohne dies explizit zu erzwingen. Dies ist ein Sicherheitsmechanismus, um versehentliche Störungen des Swarms zu vermeiden, insbesondere in einer Multi-Manager-Konfiguration.
Um zu bestätigen, dass der Knoten immer noch ein Manager und Teil des Swarms ist, können Sie den Befehl docker info verwenden.
docker info
Der "Swarm"-Abschnitt sollte immer noch "active" und "Is Manager: true" anzeigen.
...
Swarm: active
NodeID: xxxxxxxxxxxx
Is Manager: true
...
Dies bestätigt, dass der Versuch, den Swarm ohne die --force-Option zu verlassen, fehlgeschlagen ist und der Knoten weiterhin ein Swarm-Manager bleibt.
Einen Manager-Knoten zwangsweise aus dem Swarm entfernen
Im vorherigen Schritt haben wir gelernt, dass ein Manager-Knoten den Swarm nicht verlassen kann, ohne die --force-Option zu verwenden. Dies dient dazu, versehentliche Störungen des Swarms zu vermeiden. In diesem Schritt verwenden wir die --force-Option, um zu bewirken, dass der Manager-Knoten den Swarm verlässt.
Wichtiger Hinweis: Das Erzwingen, dass ein Manager-Knoten den Swarm verlässt, kann den Swarm stören, insbesondere wenn es sich um den letzten Manager handelt. Verwenden Sie diesen Befehl in einer Produktionsumgebung mit Vorsicht.
Führen Sie den folgenden Befehl aus, um zu erzwingen, dass der Manager-Knoten den Swarm verlässt:
docker swarm leave --force
Sie sollten eine Ausgabe sehen, die darauf hinweist, dass der Knoten den Swarm verlassen hat:
Node left the swarm.
Jetzt überprüfen wir, ob der Knoten den Swarm erfolgreich verlassen hat. Wir können den Befehl docker info verwenden.
docker info
Der "Swarm"-Abschnitt in der Ausgabe sollte nun anzeigen, dass der Swarm "inaktiv" ist.
...
Swarm: inactive
...
Dies bestätigt, dass der Manager-Knoten den Docker Swarm erfolgreich verlassen hat, indem die --force-Option verwendet wurde. Der Swarm existiert auf diesem Knoten nicht mehr.
Zusammenfassung
In diesem Lab haben wir gelernt, wie man einen Docker Swarm mit dem Befehl docker swarm init initialisiert. Dieser Befehl macht den aktuellen Knoten zum Manager und gibt den Befehl für andere Knoten, dem Swarm beizutreten. Anschließend haben wir geübt, einen Worker-Knoten dem neu erstellten Swarm beizutreten.
Danach haben wir untersucht, wie man Knoten aus dem Swarm entfernt, indem man den Befehl docker swarm leave verwendet. Zunächst haben wir gezeigt, wie ein Worker-Knoten den Swarm verlassen kann. Dann haben wir versucht, den gleichen Befehl auf einem Manager-Knoten ohne die Zwangsoption zu verwenden und beobachtet, dass dies standardmäßig nicht erlaubt ist. Schließlich haben wir erfolgreich einen Manager-Knoten dazu gezwungen, den Swarm zu verlassen, indem wir die --force-Option verwendet haben.



