Aller au contenu

Déploiement Docker Swarm

Docker Swarm est la plateforme de production actuelle. Le hub déploie chaque workspace comme une stack remizo-<slug> à partir de sa description WorkspaceSpec.

Chaque workspace a une description unique (workspaces.spec) :

{
"driver": "swarm",
"slot": 3,
"engines": { "replicas": 3, "cpu": "1.0", "memory": "512Mi" },
"postgres": { "instances": 2, "storage": "20Gi", "version": "17", "ha": "patroni" },
"valkey": { "enabled": true, "memory": "256Mi" },
"network": { "publicHost": "acme.engine.remizo.dev" }
}

Le pilote swarm la rend en fichier de stack (modèles dans deploy/swarm/) puis exécute docker stack deploy remizo-<slug>. Les mêmes images et les mêmes écrans d’administration servent pour les pilotes compose et k8s.

  1. Initialiser le manager : docker swarm init --advertise-addr <ip> ; joindre les autres nœuds avec le jeton affiché.
  2. Poser des labels de placement : docker node update --label-add remizo.role=db --label-add remizo.zone=a <nœud>. Les services PostgreSQL sont contraints par ces labels pour que primaire et réplica soient sur des machines différentes.
  3. Déclarer les serveurs dans la console (Serveurs → Ajouter), avec leurs identifiants stockés dans OpenBao (mo/servers/<id>).
  4. Déployer la pile hub (deploy/swarm/hub.stack.yml).
Service Réplicas Remarques
engine n (3 en production) stateless, derrière Traefik (<slug>.engine.<domaine>), arrêt précédé d’un drainage
pg (Spilo/Patroni) 2 ou 3 un primaire, des réplicas, bascule automatique
etcd 1 ou 3 consensus Patroni
pgha (HAProxy) 1 ou 2 pg-rw (5000) vers le primaire, pg-ro (5001) vers les réplicas
valkey 1 cache, verrous, limites ; perte tolérée
  • Redémarrer une base ou un moteur ;
  • Basculer (switchover Patroni) le primaire ;
  • Ajouter / retirer un réplica ;
  • Scaler les moteurs ; recharger leurs offres ;
  • Déplacer un composant sur un autre serveur (placements).

Chaque action est une opération asynchrone suivie dans la console (état, journal). Le hub ne stoppe jamais un moteur sans POST /mgmt/v1/drain préalable : la sonde /readyz passe à 503, Traefik retire l’instance, l’arrêt intervient après 10 s.

Les modèles de stack sont validés en intégration continue (docker stack config). Le pilote est testé sur son rendu (mode plan).