Comment utiliser la commande docker swarm leave pour supprimer des nœuds

DockerDockerBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire, vous apprendrez à gérer les nœuds (nodes) au sein d'un Docker Swarm en utilisant la commande docker swarm leave. Vous commencerez par initialiser un Docker Swarm et joindre un nœud worker à celui-ci. Ensuite, vous pratiquerez la suppression du nœud worker du swarm. Enfin, vous explorerez le processus de suppression d'un nœud manager, y compris la nécessité d'utiliser l'option force.


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{{"Comment utiliser la commande docker swarm leave pour supprimer des nœuds"}} docker/ps -.-> lab-555243{{"Comment utiliser la commande docker swarm leave pour supprimer des nœuds"}} docker/info -.-> lab-555243{{"Comment utiliser la commande docker swarm leave pour supprimer des nœuds"}} docker/version -.-> lab-555243{{"Comment utiliser la commande docker swarm leave pour supprimer des nœuds"}} end

Initialiser un Docker Swarm

Dans cette étape, vous apprendrez à initialiser un Docker Swarm. Un Docker Swarm est un cluster d'hôtes Docker qui fonctionnent en mode swarm. Le mode swarm vous permet de gérer un cluster de nœuds Docker (nodes) comme un seul système virtuel.

Avant d'initialiser le swarm, vérifions la version actuelle de Docker installée sur la machine virtuelle LabEx.

docker version

Vous devriez voir une sortie similaire à celle-ci, indiquant que la version de Docker est 20.10.21 :

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

Pour initialiser un Docker Swarm, vous utilisez la commande docker swarm init. Cette commande transforme l'hôte Docker actuel en un gestionnaire de swarm (swarm manager).

docker swarm init

Après avoir exécuté la commande, vous verrez une sortie indiquant que le swarm a été initialisé et fournissant une commande pour joindre d'autres nœuds en tant que travailleurs (workers). La sortie ressemblera à ceci :

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.

La sortie montre que le nœud actuel est maintenant un gestionnaire de swarm. Elle fournit également la commande pour joindre un nœud travailleur à ce swarm. Nous utiliserons cette commande à l'étape suivante.

Vous pouvez vérifier l'état du swarm en utilisant la commande docker info.

docker info

Recherchez la section "Swarm" dans la sortie. Elle devrait indiquer que le swarm est "actif".

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

Cela confirme que le Docker Swarm a été initialisé avec succès sur ce nœud.

Joindre un nœud travailleur (worker node) au swarm

Dans l'étape précédente, nous avons initialisé un Docker Swarm et la sortie a fourni une commande pour joindre un nœud travailleur. Dans un scénario réel, vous exécuteriez cette commande sur une machine distincte que vous souhaitez ajouter en tant que travailleur à votre swarm. Cependant, comme nous utilisons une seule machine virtuelle LabEx, nous allons simuler l'ajout d'un nœud travailleur en utilisant la commande de jointure sur la même machine.

Tout d'abord, récupérons la commande de jointure pour un nœud travailleur. Vous pouvez obtenir le jeton (token) de jointure et la commande en exécutant docker swarm join-token worker sur le nœud gestionnaire (qui est notre machine virtuelle actuelle).

docker swarm join-token worker

La sortie sera similaire à ceci :

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

Copiez la commande complète docker swarm join --token ... de la sortie. Cette commande contient le jeton unique ainsi que l'adresse IP et le port du gestionnaire de swarm.

Maintenant, exécutez la commande copiée pour joindre le nœud actuel au swarm en tant que travailleur.

docker swarm join --token SWMTKN-1-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 172.17.0.2:2377

Remplacez le jeton et l'adresse IP par les valeurs que vous avez obtenues à partir de la commande docker swarm join-token worker.

Vous devriez voir une sortie indiquant que le nœud a rejoint le swarm en tant que travailleur :

This node joined a swarm as a worker.

Pour vérifier que le nœud a rejoint le swarm, vous pouvez lister les nœuds du swarm du point de vue du gestionnaire. Comme notre machine virtuelle unique agit à la fois en tant que gestionnaire et que travailleur, nous pouvons utiliser la commande docker node ls.

docker node ls

La sortie affichera les nœuds du swarm. Vous devriez voir deux entrées pour le même identifiant de nœud (node ID), l'une avec le statut "Ready" et le rôle "Manager", et l'autre avec le statut "Ready" et le rôle "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

Cela confirme que le nœud a rejoint le swarm avec succès en tant que travailleur.

Quitter le swarm depuis un nœud travailleur (worker node)

Dans l'étape précédente, nous avons rejoint avec succès le nœud au swarm en tant que travailleur. Maintenant, nous allons apprendre à supprimer un nœud du swarm. Pour quitter un swarm depuis un nœud travailleur, vous utilisez la commande docker swarm leave.

Exécutez la commande suivante pour faire quitter le nœud actuel le swarm en tant que travailleur :

docker swarm leave

Vous devriez voir une sortie indiquant que le nœud a quitté le swarm :

Node left the swarm.

Maintenant, vérifions que le nœud a quitté le swarm. Nous pouvons à nouveau utiliser la commande docker node ls. Cependant, comme le nœud a quitté le swarm, l'exécution de docker node ls sur ce nœud entraînera une erreur car il ne fait plus partie du swarm.

docker node ls

Vous verrez un message d'erreur similaire à celui-ci :

Error: This node is not a swarm manager. Use "docker swarm join" to join the swarm and try again.

Cette erreur confirme que le nœud ne fait plus partie du swarm.

Pour vérifier davantage, vérifions l'état du swarm en utilisant docker info.

docker info

La section "Swarm" dans la sortie devrait maintenant indiquer que le swarm est "inactif".

...
 Swarm: inactive
...

Cela confirme que le nœud a quitté avec succès le Docker Swarm.

Tenter de quitter le swarm depuis un nœud gestionnaire (manager node) sans forcer

Dans l'étape précédente, nous avons supprimé avec succès un nœud travailleur (worker node) du swarm. Maintenant, voyons ce qui se passe lorsque nous essayons de supprimer un nœud gestionnaire en utilisant la même commande docker swarm leave sans aucune option supplémentaire.

Exécutez la commande suivante pour tenter de quitter le swarm depuis le nœud gestionnaire :

docker swarm leave

Vous recevrez un message d'erreur similaire à celui-ci :

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.

Ce message d'erreur indique que vous ne pouvez pas simplement quitter un swarm depuis un nœud gestionnaire sans le forcer explicitement. Il s'agit d'un mécanisme de sécurité pour éviter une perturbation accidentelle du swarm, en particulier dans une configuration multi-gestionnaire.

Pour confirmer que le nœud est toujours un gestionnaire et fait toujours partie du swarm, vous pouvez utiliser la commande docker info.

docker info

La section "Swarm" devrait toujours afficher "active" et "Is Manager: true".

...
 Swarm: active
  NodeID: xxxxxxxxxxxx
  Is Manager: true
...

Cela confirme que la tentative de quitter le swarm sans l'option de force a échoué et que le nœud reste un gestionnaire de swarm.

Forcer un nœud gestionnaire (manager node) à quitter le swarm

Dans l'étape précédente, nous avons appris qu'un nœud gestionnaire ne peut pas quitter le swarm sans utiliser le drapeau --force. Cela permet d'éviter une perturbation accidentelle du swarm. Dans cette étape, nous allons utiliser le drapeau --force pour faire quitter le nœud gestionnaire le swarm.

Note importante : Forcer un nœud gestionnaire à quitter le swarm peut perturber le swarm, en particulier s'il s'agit du dernier gestionnaire. Utilisez cette commande avec prudence dans un environnement de production.

Exécutez la commande suivante pour forcer le nœud gestionnaire à quitter le swarm :

docker swarm leave --force

Vous devriez voir une sortie indiquant que le nœud a quitté le swarm :

Node left the swarm.

Maintenant, vérifions que le nœud a quitté avec succès le swarm. Nous pouvons utiliser la commande docker info.

docker info

La section "Swarm" dans la sortie devrait maintenant indiquer que le swarm est "inactif".

...
 Swarm: inactive
...

Cela confirme que le nœud gestionnaire a quitté avec succès le Docker Swarm en utilisant le drapeau --force. Le swarm n'existe plus sur ce nœud.

Résumé

Dans ce laboratoire (lab), nous avons appris à initialiser un Docker Swarm en utilisant la commande docker swarm init, qui désigne le nœud actuel comme gestionnaire (manager) et fournit la commande pour que d'autres nœuds puissent rejoindre. Ensuite, nous avons pratiqué l'ajout d'un nœud travailleur (worker node) au swarm nouvellement créé.

Par la suite, nous avons exploré comment supprimer des nœuds du swarm en utilisant la commande docker swarm leave, en montrant d'abord comment un nœud travailleur peut quitter le swarm. Nous avons ensuite tenté d'utiliser la même commande sur un nœud gestionnaire sans l'option de force, constatant qu'elle n'est pas autorisée par défaut. Enfin, nous avons réussi à forcer un nœud gestionnaire à quitter le swarm en utilisant le drapeau --force.