Wie man den docker swarm leave-Befehl verwendet, um Knoten zu entfernen

DockerDockerBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

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.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/SystemManagementGroup(["System Management"]) docker/ContainerOperationsGroup -.-> docker/ls("List Containers") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/SystemManagementGroup -.-> docker/info("Display System-Wide Information") docker/SystemManagementGroup -.-> docker/version("Show Docker Version") subgraph Lab Skills docker/ls -.-> lab-555243{{"Wie man den docker swarm leave-Befehl verwendet, um Knoten zu entfernen"}} docker/ps -.-> lab-555243{{"Wie man den docker swarm leave-Befehl verwendet, um Knoten zu entfernen"}} docker/info -.-> lab-555243{{"Wie man den docker swarm leave-Befehl verwendet, um Knoten zu entfernen"}} docker/version -.-> lab-555243{{"Wie man den docker swarm leave-Befehl verwendet, um Knoten zu entfernen"}} end

Initialisieren eines Docker Swarm

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.

Hinzufügen eines Worker-Knotens (Arbeitsknotens) zum Swarm

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.

Verlassen des Swarms von einem Worker-Knoten (Arbeitsknoten) aus

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, den Swarm von einem Manager-Knoten ohne Zwang zu verlassen

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.

Erzwingen, dass ein Manager-Knoten den Swarm verlässt

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.