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



