Docker swarm

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Type Orchestrateur multi-hôtes natif à Docker
Rôles Manager (contrôle) · Worker (exécution)
Objets pilotés Service · Stack · Node
Alternative Kubernetes (orchestration plus riche, plus complexe)
Voir aussi Docker node · Docker service · Docker stack · Docker compose

Docker Swarm est le mode d'orchestration multi-hôtes intégré nativement au moteur Docker : il permet de fédérer plusieurs machines exécutant Docker en un cluster unique et d'y répartir des conteneurs sous forme de services et de stacks. Il ne nécessite aucun composant externe — Docker suffit — ce qui en fait une alternative plus légère à Kubernetes pour des besoins d'orchestration simples.

Cette page présente la vue d'ensemble du cluster (init, adhésion, sauvegarde, sécurisation, haute disponibilité). Le détail des objets manipulés au quotidien est traité sur des pages dédiées : gestion des nœuds sur Docker node, définition et cycle de vie des services sur Docker service, déploiement de piles multi-services sur Docker stack et Docker compose.

Architecture

Un cluster Swarm est composé de deux rôles de nœuds :

  • Manager — maintient l'état du cluster (via un consensus Raft entre managers), planifie les services sur les workers et expose l'API de contrôle.
  • Worker — exécute les tâches (conteneurs) qui lui sont assignées par les managers.

<mermaid> flowchart LR

   subgraph Managers
       M1[Manager 1
leader] M2[Manager 2] M3[Manager 3] end subgraph Workers W1[Worker 1] W2[Worker 2] end M1 <-->|Raft| M2 M1 <-->|Raft| M3 M1 -->|planification| W1 M1 -->|planification| W2

</mermaid>

Un nœud manager peut aussi exécuter des tâches (comportement par défaut), mais en production on réserve généralement les managers au contrôle du cluster.

Initialisation du cluster

Prérequis : Docker doit être installé sur chaque machine appelée à rejoindre le cluster.

Sur le futur manager :

docker swarm init --advertise-addr <IP_PRIVEE_MANAGER>

docker info
docker node ls

Quitter le cluster (sur un nœud, manager ou worker) :

docker swarm leave --force

Faire rejoindre un worker

Sur le manager, récupérer le jeton d'adhésion :

docker swarm join-token worker

Sur le futur worker, avec le jeton et l'adresse du manager renvoyés par la commande précédente :

docker swarm join --token <TOKEN_JOIN> <IP_MANAGER>:2377

Sur le manager, vérifier l'adhésion :

docker node ls

Un jeton distinct existe pour joindre en tant que manager (docker swarm join-token manager) ; il est à réserver aux nœuds réellement destinés au rôle de contrôle.

Administration

  • Gestion des nœuds (étiquetage, contraintes de placement) : voir Docker node.
  • Création et cycle de vie des services (répliques, mode global, mise à jour) : voir Docker service.
  • Déploiement d'une pile multi-services à partir d'un fichier compose : voir Docker stack et Docker compose.

Sauvegarde et restauration

L'état du cluster (Raft, certificats) est stocké dans /var/lib/docker/swarm. La sauvegarde se fait démon arrêté, sur un manager :

# Sauvegarde (sur un manager)
sudo systemctl stop docker
sudo tar -zcvf backup-swarm.tar.gz -C /var/lib/docker/swarm .
sudo systemctl start docker
# Restauration (sur un manager)
sudo systemctl stop docker
sudo rm -rf /var/lib/docker/swarm/*
sudo tar -zxvf backup-swarm.tar.gz -C /var/lib/docker/swarm/
sudo systemctl start docker
docker node ls

Si le cluster ne comptait qu'un seul manager, la restauration recrée ce même manager ; pour un cluster multi-managers, se référer à la procédure officielle de récupération de quorum (--force-new-cluster), plus nuancée qu'une simple restauration de fichiers (à vérifier selon version).

Sécurisation

Le chiffrement au repos des clés de communication inter-nœuds (autolock) peut être activé :

docker swarm update --autolock=true

La commande renvoie une clé de déverrouillage à conserver impérativement dans un gestionnaire de secrets : sans elle, un manager redémarré reste bloqué et ne rejoint plus le cluster.

sudo systemctl restart docker
docker node ls          # le manager reste verrouillé tant qu'il n'est pas déverrouillé
docker swarm unlock     # demande la clé

Gestion de la clé :

docker swarm unlock-key            # ré-afficher la clé actuelle
docker swarm unlock-key --rotate   # générer une nouvelle clé

Désactivation :

docker swarm update --autolock=false

Haute disponibilité

Le nombre de managers doit être impair : le consensus Raft tolère la perte de (N-1)/2 managers sans perte de quorum. Au-delà de 7, le surcoût de consensus dépasse généralement le gain de résilience (à vérifier selon la charge du cluster).

Managers Tolérance de panne
3 1 manager perdu
5 2 managers perdus
7 3 managers perdus

Il est recommandé de répartir les managers sur des zones de disponibilité distinctes pour éviter qu'une panne de zone n'emporte la majorité du quorum.

Voir aussi