Passer au contenu principal

Swarm (Docker)

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-02

Labels 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-01

Maintenance 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