Diaporama de notions

Docker Swarm

Acte 3 · L'essaim : faire jouer la partition par plusieurs machines à la fois. L'orchestration.

420-5A4-MT · Serveurs évolutifs · Swarm
Où en est l'histoire

Et si une machine ne suffisait plus ?

Le site de Cornucopia (la ferme maraîchère de Flora et Hazel) tient sur une machine, et la partition Compose sait le lever d'une seule commande. Mais une question trotte dans la tête de la fondatrice : le jour où une machine ne suffira plus, on fera quoi ? Avant même d'en avoir besoin, l'entreprise apprend à faire jouer sa partition par un orchestre de plusieurs machines : un essaim.

Notion 1

L'essaim et l'état désiré

Un essaim (swarm) est un cluster : plusieurs machines qui exécutent Docker et agissent comme une seule grande machine. On ne pilote plus des conteneurs un à un : on déclare un état désiré, et l'essaim travaille en permanence à le maintenir.

Vous déclarez

« Je veux 3 copies du service web, un port 80 ouvert, et la base sur un noeud travailleur. »

L'essaim réconcilie

Un conteneur meurt ? Il le relance. Un noeud tombe ? Ses tâches renaissent ailleurs. Sans que personne ne clique. C'est la réconciliation.

Notion 2

Gestionnaires et travailleurs

Le gestionnaire (manager)
  • Garde l'état du cluster et prend les décisions.
  • Distribue les tâches aux noeuds.
  • Plusieurs gestionnaires possibles : ils élisent un chef (leader), et le cluster survit à la perte d'un gestionnaire.
Le travailleur (worker)
  • Reçoit des tâches et les exécute : c'est lui qui fait tourner les conteneurs.
  • Rend compte de son état au gestionnaire.
  • Un noeud peut être les deux à la fois.

On rejoint un essaim avec un jeton (token) : un jeton de travailleur ou un jeton de gestionnaire, générés à la création de l'essaim.

Notion 3

Services, tâches, répliques

Votre travail de la semaine 3 n'est pas perdu : Swarm parle le même langage.

Notion 4 · Le piège

Tout ne se réplique pas pareil

Le web : sans état
  • Chaque requête est indépendante : n'importe quelle copie peut répondre.
  • Se réplique à volonté : 3, 10, 100 copies.
La base : avec état
  • Ses données vivent dans UN volume, ancré sur UN noeud.
  • Deux copies écrivant les mêmes fichiers = catastrophe.
  • On l'ancre avec une contrainte de placement (placement constraint), en une seule réplique.

C'est LA leçon conceptuelle de la semaine : l'état et le sans-état n'évoluent pas pareil. Elle vous suivra jusqu'au projet final, et dans toute votre carrière.

Notion 5

Le maillage magique (Routing Mesh)

Une requête arrive...
  • Vous avez 3 nœuds, mais seulement 2 copies de WordPress.
  • Un client tape l'adresse IP du nœud 3 (qui n'a pas de WordPress).
  • Erreur 404 ? Non !
Le filet de sauvetage
  • Swarm intercepte le trafic sur le port publié.
  • Il redirige instantanément la requête vers le nœud 1 ou 2.
  • Tous les nœuds répondent au même port de la même façon.

Le Routing Mesh rend votre cluster robuste : vous pouvez utiliser l'IP de n'importe quel membre de l'essaim pour accéder au service.

Notion 6

Sans coupure (Rolling Updates)

Mettre à jour une image de v1 à v2 causait autrefois une panne (le temps d'éteindre et rallumer). L'essaim sait le faire en douceur.

Étape par étape

Si vous avez 3 répliques, Swarm met à jour la première, attend qu'elle soit en santé, puis passe à la suivante. L'application ne tombe jamais.

Retour en arrière

Si la nouvelle version plante, Swarm s'arrête. On peut configurer un rollback automatique pour revenir à la version précédente.

Notion 7

Cacher les clés : Docker Secrets

Dans un cluster, envoyer un mot de passe en texte clair est dangereux. L'essaim propose un coffre-fort distribué.

C'est la différence entre laisser la clé sous le paillasson et confier un laissez-passer chiffré.

Notion 8

Les commandes du capitaine

À taper uniquement sur le gestionnaire (manager), car les travailleurs n'ont pas la vue d'ensemble :

docker node ls
# Voir l'état de tous les nœuds (prêts, inactifs, etc.)
docker stack deploy -c partition.yml ma_pile
# Déployer ou mettre à jour toute l'application (le 'up' de Swarm)
docker service ls
# Voir l'état désiré vs l'état réel (ex: 3/3 répliques)
docker service logs ma_pile_web
# Récupérer les journaux de toutes les copies réparties
docker stack rm ma_pile
# Retirer l'application complète
Notion 9

Trois façons de monter son essaim

Au laboratoire, chacun monte SON essaim de trois noeuds, avec l'infrastructure de son choix. Le tableau de comparaison :

Critère VPS Linode VM VirtualBox Conteneurs DinD
Coût Environ 1 $ le laboratoire, facturé à l'heure Gratuit Gratuit
Connexion Internet obligatoire Hors ligne Hors ligne
Poste de travail Presque rien à installer 6 Go de mémoire et plus, pour 3 VM Une seule VM légère
Réseau Vrai réseau public, pare-feu à configurer (2377, 7946, 4789) Réseau local simulé, plan d'adressage du cours Réseau interne Docker, tout automatique
Tout recommencer Détruire et recréer : 2 minutes Recloner : une quinzaine de minutes docker rm : 30 secondes
Réalisme Le métier, pour vrai Le modèle mental le plus clair Le plus abstrait des trois

Les techniques (init, join, deploy, scale, drain) et l'évaluation sont identiques dans les trois cas. C'est la leçon : l'orchestrateur se moque de l'infra.