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-01Contraintes 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-02Backup 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.shMonitoring 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=swarmSwarmpit 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-02Swarm 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.