Docker Swarm : introduction
Docker Swarm est l'orchestrateur natif de Docker. Moins complexe que Kubernetes, il couvre la majorité des besoins d'orchestration pour les infras petites à moyennes : haute disponibilité, rolling updates, load balancing, gestion des secrets. Un cluster Swarm se configure en minutes, opère en heures, pas en jours.
Swarm vs Compose
- Compose : un seul hôte, déploiement de développement ou de services simples
- Swarm : plusieurs hôtes, HA, rolling updates, scheduling automatique
Un fichier Compose v3 peut être déployé tel quel en Swarm avec docker stack deploy. La migration est progressive.
Architecture
- Manager nodes : maintiennent l'état du cluster (Raft consensus), orchestrent les tasks, exposent l'API Swarm
- Worker nodes : exécutent les containers (tasks)
- Quorum : pour tolérer N pannes, il faut 2N+1 managers. 3 managers = tolérance à 1 panne. 5 managers = tolérance à 2 pannes
Initialiser un cluster
# Sur le premier manager
docker swarm init --advertise-addr 192.168.1.10
# Obtenir le token pour ajouter des workers
docker swarm join-token worker
# Obtenir le token pour ajouter des managers
docker swarm join-token manager# Sur chaque worker (commande donnée par swarm init)
docker swarm join --token SWMTKN-1-xxxx 192.168.1.10:2377# Sur un manager : voir l'état du cluster
docker node ls
# Promouvoir un worker en manager
docker node promote worker-01
# Rétrograder un manager en worker
docker node demote manager-02Labels de nœuds
# Ajouter des labels pour le placement
docker node update --label-add role=web worker-01
docker node update --label-add role=db worker-02
docker node update --label-add region=eu-west-1 worker-01Maintenance d'un nœud
# Passer un nœud en mode maintenance (évacue les tasks)
docker node update --availability drain worker-01
# Remettre en service
docker node update --availability active worker-01