Aller au contenu principal

Introduction à Docker Swarm


Objectifs du chapitre

  • Comprendre l'orchestration de conteneurs
  • Découvrir Docker Swarm et ses concepts
  • Comparer Swarm avec d'autres orchestrateurs
  • Comprendre l'architecture Swarm

1 - Qu'est-ce que l'orchestration ?

Le problème

En production, gérer des conteneurs manuellement devient rapidement impossible :

                    Défis de la production
┌────────────────────────────────────────────────────────────┐
│ │
│ ❓ Comment déployer sur plusieurs serveurs ? │
│ ❓ Comment gérer les pannes de serveurs ? │
│ ❓ Comment mettre à l'échelle automatiquement ? │
│ ❓ Comment router le trafic vers les conteneurs ? │
│ ❓ Comment mettre à jour sans interruption ? │
│ │
└────────────────────────────────────────────────────────────┘

La solution : l'orchestration

Un orchestrateur automatise :

FonctionDescription
SchedulingPlacement des conteneurs sur les nœuds
ScalingAjustement du nombre de réplicas
NetworkingCommunication entre conteneurs
Load BalancingDistribution du trafic
Health ChecksSurveillance et redémarrage
Rolling UpdatesMises à jour sans interruption

2 - Qu'est-ce que Docker Swarm ?

Définition

Docker Swarm est le mode d'orchestration natif de Docker. Il transforme un groupe de Docker hosts en un seul "hôte virtuel".

┌─────────────────────────────────────────────────────────────────┐
│ Docker Swarm Cluster │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Manager │ │ Manager │ │ Manager │ │
│ │ (Leader) │───│ (Reachable)│───│ (Reachable)│ │
│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │
│ │ │ │ │
│ ┌──────┴─────────────────┴─────────────────┴──────┐ │
│ │ Raft Consensus │ │
│ └──────┬─────────────────┬─────────────────┬──────┘ │
│ │ │ │ │
│ ┌──────▼──────┐ ┌──────▼──────┐ ┌──────▼──────┐ │
│ │ Worker │ │ Worker │ │ Worker │ │
│ │ Node │ │ Node │ │ Node │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘

Caractéristiques principales

CaractéristiqueDescription
NatifIntégré à Docker Engine
SimplePas d'installation supplémentaire
DéclaratifDéfinir l'état désiré
SécuriséTLS par défaut
ScalableDe 1 à milliers de nœuds

3 - Concepts fondamentaux

Nœuds (Nodes)

Un nœud est une instance Docker Engine dans le cluster.

Manager Nodes :

  • Gèrent l'état du cluster
  • Planifient les tâches
  • Servent l'API Swarm
  • Utilisent le consensus Raft

Worker Nodes :

  • Exécutent les conteneurs
  • Reçoivent les tâches des managers
  • Rapportent l'état des tâches
┌─────────────────────────────────────────────────────────────┐
│ Manager Node │
├─────────────────────────────────────────────────────────────┤
│ ┌─────────────┐ ┌─────────────┐ ┌──────────────────┐ │
│ │ API Server │ │ Scheduler │ │ Orchestrator │ │
│ └─────────────┘ └─────────────┘ └──────────────────┘ │
│ ┌─────────────┐ ┌─────────────┐ ┌──────────────────┐ │
│ │ Raft │ │ Dispatcher │ │ Worker (opt.) │ │
│ └─────────────┘ └─────────────┘ └──────────────────┘ │
└─────────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────────┐
│ Worker Node │
├─────────────────────────────────────────────────────────────┤
│ ┌─────────────┐ ┌─────────────────────────────────────┐ │
│ │ Agent │ │ Container Runtime │ │
│ └─────────────┘ └─────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘

Services

Un service est la définition d'une application à exécuter sur le Swarm.

# Créer un service
docker service create --name web --replicas 3 -p 80:80 nginx

Types de services :

TypeDescriptionExemple
ReplicatedN réplicas distribuésWeb servers
Global1 instance par nœudMonitoring agents

Tasks

Une task est l'unité de travail dans Swarm = 1 conteneur.

Service "web" (3 replicas)

├── Task 1 → Conteneur (Node 1)
├── Task 2 → Conteneur (Node 2)
└── Task 3 → Conteneur (Node 3)

Stacks

Une stack est un groupe de services liés (équivalent Docker Compose pour Swarm).

# stack.yml
version: "3.9"
services:
web:
image: nginx
deploy:
replicas: 3
db:
image: postgres

4 - Swarm vs Kubernetes

Comparaison

AspectDocker SwarmKubernetes
InstallationIntégréComplexe
Courbe d'apprentissageDouceRaide
ScalabilitéMilliers de nœudsTrès grande échelle
ÉcosystèmeLimitéTrès riche
Auto-healingBasiqueAvancé
ConfigurationDocker ComposeYAML spécifique
CommunityPetiteTrès large

Quand utiliser Swarm ?

Utilisez Swarm si :

  • Vous connaissez déjà Docker
  • Vous avez besoin d'une solution simple
  • Votre infrastructure est de taille moyenne
  • Vous utilisez déjà Docker Compose

Préférez Kubernetes si :

  • Vous avez besoin de fonctionnalités avancées
  • Vous gérez de très grandes infrastructures
  • Vous avez besoin d'un écosystème riche
  • Vous êtes dans un environnement multi-cloud

5 - Architecture détaillée

Composants internes

┌─────────────────────────────────────────────────────────────┐
│ Swarm Manager │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Cluster Store │ │
│ │ (Distributed State - Raft) │ │
│ └─────────────────────────────────────────────────────┘ │
│ │ │
│ ┌──────────────────┼──────────────────┐ │
│ │ │ │ │
│ ┌──────▼──────┐ ┌──────▼──────┐ ┌───────▼─────┐ │
│ │ Orchestrator│ │ Allocator │ │ Scheduler │ │
│ │ (état désiré│ │ (IP, ports) │ │ (placement) │ │
│ │ vs actuel) │ │ │ │ │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │ │
│ ┌───────▼───────┐ │
│ │ Dispatcher │ │
│ │ (assign tasks)│ │
│ └───────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘

Raft Consensus

Le consensus Raft assure que tous les managers partagent le même état :

        ┌─────────┐
│ Leader │ ◄── Reçoit les commandes
└────┬────┘
│ Réplique
┌────────┼────────┐
▼ ▼ ▼
┌───────┐ ┌───────┐ ┌───────┐
│Follower│ │Follower│ │Follower│
└───────┘ └───────┘ └───────┘

Quorum = (N/2) + 1 managers
3 managers → quorum = 2
5 managers → quorum = 3

Recommandations pour les managers

Nombre de managersTolérance aux pannesRecommandation
10Développement uniquement
31Production minimale
52Production standard
73Grande production
Important

Plus de 7 managers n'est pas recommandé car cela ralentit le consensus.


6 - Ports et communication

Ports requis

PortProtocoleUsage
2377/tcpTCPCommunication cluster management
7946/tcp+udpTCP/UDPCommunication entre nœuds
4789/udpUDPTrafic réseau overlay

Configuration firewall

# Sur tous les nœuds
sudo ufw allow 2377/tcp
sudo ufw allow 7946/tcp
sudo ufw allow 7946/udp
sudo ufw allow 4789/udp

7 - Avantages de Docker Swarm

Simplicité

# Initialiser un cluster : 1 commande
docker swarm init

# Rejoindre le cluster : 1 commande
docker swarm join --token <token> <ip>:2377

# Déployer un service : 1 commande
docker service create --name web nginx

Intégration native

  • Utilise les mêmes images Docker
  • Compatible Docker Compose (avec adaptations)
  • Même CLI (docker avec sous-commandes)
  • Mêmes concepts (images, conteneurs, réseaux, volumes)

Sécurité par défaut

  • TLS mutuel automatique
  • Rotation automatique des certificats
  • Chiffrement du trafic control plane
  • Gestion native des secrets

Résumé

ConceptDescription
SwarmMode orchestration natif de Docker
NodeMachine dans le cluster (Manager ou Worker)
ServiceDéfinition d'une application à déployer
TaskInstance de conteneur d'un service
StackGroupe de services (multi-services)
Points clés
  • Docker Swarm est simple et intégré à Docker
  • Les managers gèrent l'état, les workers exécutent les tâches
  • Le consensus Raft assure la cohérence entre managers
  • Recommandé : 3 ou 5 managers pour la production

Exercices pratiques

  1. Expliquez la différence entre un manager et un worker
  2. Pourquoi avoir un nombre impair de managers ?
  3. Qu'est-ce qu'un service répliqué vs global ?
  4. Quels ports doivent être ouverts pour Swarm ?

← Table des matières | Installation et cluster →