Passer au contenu principal

Swarm (Docker)

Swarm en production

Opérer un cluster Swarm en production, c'est gérer les mises à jour de nœuds sans interruption de service, surveiller la santé du cluster, protéger le consensus Raft, et savoir quand Swarm est le bon outil — et quand il ne l'est pas.

Drain et maintenance de nœud

# Évacuer les tasks d'un nœud avant maintenance
docker node update --availability drain worker-01

# Les tasks sont redistribuées automatiquement sur les autres nœuds
docker service ps web  # vérifier la redistribution

# Maintenance (mise à jour OS, etc.)
ssh worker-01
apt upgrade -y && reboot

# Remettre en service
docker node update --availability active worker-01

Contraintes de placement

services:
  db:
    deploy:
      placement:
        constraints:
          - node.labels.role == db      # seulement sur les nœuds DB
          - node.role == worker         # pas sur les managers
          - engine.labels.storage == ssd
# Ajouter des labels de nœud
docker node update --label-add role=db --label-add storage=ssd worker-02

Backup du state Raft

# L'état Swarm (services, secrets, configs, networks) est dans /var/lib/docker/swarm/
# Backup depuis un manager (service Docker arrêté)
systemctl stop docker
tar czf swarm-backup-$(date +%Y%m%d).tar.gz /var/lib/docker/swarm/
systemctl start docker

# Automatiser avec script cron
0 2 * * * /usr/local/bin/swarm-backup.sh

Monitoring du cluster

# État global du cluster
docker node ls
docker service ls
docker stack ls

# Tasks en erreur
docker service ps --filter "desired-state=shutdown" web

# Événements du cluster
docker events --filter scope=swarm

Swarmpit et Portainer offrent une interface web pour gérer un cluster Swarm sans CLI.

Mise à jour de Docker Engine

# Mettre à jour les workers un par un
for node in worker-01 worker-02 worker-03; do
  docker node update --availability drain $node
  ssh $node "apt-get install -y docker-ce docker-ce-cli && systemctl restart docker"
  docker node update --availability active $node
  sleep 30  # laisser les tasks se redistribuer
done

# Mettre à jour les managers (un par un, jamais tous en même temps)
docker node update --availability drain manager-02
ssh manager-02 "apt-get install -y docker-ce && systemctl restart docker"
docker node update --availability active manager-02

Swarm vs Kubernetes : quand choisir quoi

  • Swarm : equipe petite, infra <50 nœuds, setup rapide, budget limité, déjà sur Docker Compose
  • Kubernetes : large scale, multi-tenant, écosystème d'outils riche nécessaire, équipe dédiée ops

Swarm ne couvre pas : autoscaling horizontal automatique basé sur métriques, déploiements canary avancés, GitOps natif (ArgoCD/Flux), service mesh (Istio/Linkerd). Pour ces besoins, Kubernetes s'impose.