⚠️ Traduction non officielle - Cette documentation est une traduction communautaire non officielle de Docker.

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.

Important

Définir un nœud sur Drain ne supprime pas les conteneurs autonomes de ce nœud, comme ceux créés avec docker run, docker compose up, ou l'API Docker Engine. Le statut d'un nœud, y compris Drain, affecte seulement la capacité du nœud à planifier les charges de travail des services swarm.

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

  2. 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
    
  3. 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
    
  4. 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.

  5. 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
    
  6. 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 pour Availability.

  7. Exécutez docker service ps redis pour voir comment le gestionnaire swarm a mis à jour les assignations de tâches pour le service redis :

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

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