Drainer un nœud sur le swarm
Dans les étapes précédentes du tutoriel, tous les nœuds ont fonctionné avec une disponibilité Active
.
Le gestionnaire swarm peut assigner des tâches à n'importe quel nœud Active
, donc jusqu'à
maintenant tous les nœuds ont été disponibles pour recevoir des tâches.
Parfois, comme pendant les temps de maintenance planifiés, vous devez définir un nœud sur une disponibilité Drain
. La disponibilité Drain
empêche un nœud de recevoir de nouvelles tâches
du gestionnaire swarm. Cela signifie également que le gestionnaire arrête les tâches en cours d'exécution sur le
nœud et lance des tâches de réplique sur un nœud avec une disponibilité Active
.
ImportantDéfinir un nœud sur
Drain
ne supprime pas les conteneurs autonomes de ce nœud, comme ceux créés avecdocker run
,docker compose up
, ou l'API Docker Engine. Le statut d'un nœud, y comprisDrain
, affecte seulement la capacité du nœud à planifier les charges de travail des services swarm.
-
Si vous ne l'avez pas déjà fait, ouvrez un terminal et connectez-vous en ssh à la machine où vous exécutez votre nœud gestionnaire. Par exemple, le tutoriel utilise une machine nommée
manager1
. -
Vérifiez que tous vos nœuds sont activement disponibles.
$ docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS 1bcef6utixb0l0ca7gxuivsj0 worker2 Ready Active 38ciaotwjuritcdtn9npbnkuz worker1 Ready Active e216jshn25ckzbvmwlnh5jr3g * manager1 Ready Active Leader
-
Si vous n'exécutez toujours pas le service
redis
du tutoriel mise à jour progressive, démarrez-le maintenant :$ docker service create --replicas 3 --name redis --update-delay 10s redis:7.4.0 c5uo6kdmzpon37mgj9mwglcfw
-
Exécutez
docker service ps redis
pour voir comment le gestionnaire swarm a assigné les tâches aux différents nœuds :$ docker service ps redis NAME IMAGE NODE DESIRED STATE CURRENT STATE redis.1.7q92v0nr1hcgts2amcjyqg3pq redis:7.4.0 manager1 Running Running 26 seconds redis.2.7h2l8h3q3wqy5f66hlv9ddmi6 redis:7.4.0 worker1 Running Running 26 seconds redis.3.9bg7cezvedmkgg6c8yzvbhwsd redis:7.4.0 worker2 Running Running 26 seconds
Dans ce cas, le gestionnaire swarm a distribué une tâche à chaque nœud. Vous pourriez voir les tâches distribuées différemment parmi les nœuds dans votre environnement.
-
Exécutez
docker node update --availability drain <NODE-ID>
pour drainer un nœud qui avait une tâche assignée :$ docker node update --availability drain worker1 worker1
-
Inspectez le nœud pour vérifier sa disponibilité :
$ docker node inspect --pretty worker1 ID: 38ciaotwjuritcdtn9npbnkuz Hostname: worker1 Status: State: Ready Availability: Drain ...snip...
Le nœud drainé montre
Drain
pourAvailability
. -
Exécutez
docker service ps redis
pour voir comment le gestionnaire swarm a mis à jour les assignations de tâches pour le serviceredis
:$ docker service ps redis NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR redis.1.7q92v0nr1hcgts2amcjyqg3pq redis:7.4.0 manager1 Running Running 4 minutes redis.2.b4hovzed7id8irg1to42egue8 redis:7.4.0 worker2 Running Running About a minute \_ redis.2.7h2l8h3q3wqy5f66hlv9ddmi6 redis:7.4.0 worker1 Shutdown Shutdown 2 minutes ago redis.3.9bg7cezvedmkgg6c8yzvbhwsd redis:7.4.0 worker2 Running Running 4 minutes
Le gestionnaire swarm maintient l'état désiré en terminant la tâche sur un nœud avec une disponibilité
Drain
et en créant une nouvelle tâche sur un nœud avec une disponibilitéActive
. -
Exécutez
docker node update --availability active <NODE-ID>
pour remettre le nœud drainé dans un état actif :$ docker node update --availability active worker1 worker1
-
Inspectez le nœud pour voir l'état mis à jour :
$ docker node inspect --pretty worker1 ID: 38ciaotwjuritcdtn9npbnkuz Hostname: worker1 Status: State: Ready Availability: Active ...snip...
Lorsque vous remettez le nœud sur une disponibilité
Active
, il peut recevoir de nouvelles tâches :- pendant une mise à jour de service pour augmenter l'échelle
- pendant une mise à jour progressive
- lorsque vous définissez un autre nœud sur une disponibilité
Drain
- lorsqu'une tâche échoue sur un autre nœud actif
Prochaines étapes
Ensuite, vous apprendrez comment utiliser un maillage de routage en mode Swarm