RousselTMLEARNING

Automatisation

Vagrant multi-machines : déployer un cluster Docker Swarm prêt à l'emploi

Construire avec un seul Vagrantfile un cluster Docker Swarm de trois nœuds (un manager, deux workers) dont la jointure est automatisée, puis déployer et mettre à l'échelle un service.

1. Le principe #

Plusieurs machines, un seul fichier.

Pourquoi automatiser la jointure #

Docker Swarm a besoin qu'un nœud initialise le cluster (docker swarm init) puis que les autres le rejoignent avec un jeton. Fait à la main, c'est fastidieux et source d'erreurs. Avec Vagrant, le manager écrit son jeton dans le dossier partagé /vagrant, que les workers lisent au démarrage.

Cluster Docker Swarm avec Vagrant
Le dossier synchronisé sert de canal entre les machines au moment du provisioning.
Ordre de création : Les machines sont créées dans l'ordre du Vagrantfile : le manager doit être déclaré en premier pour que le jeton existe quand les workers démarrent.

2. Le Vagrantfile #

Une boucle et deux scripts.

Vagrantfile #

NODES = { "manager1" => "192.168.56.10", "worker1" => "192.168.56.11", "worker2" => "192.168.56.12" }

Vagrant.configure("2") do |config|
  config.vm.box = "bento/ubuntu-24.04"
  config.vm.provision "shell", path: "scripts/docker.sh"          # commun : installer Docker

  NODES.each do |name, ip|
    config.vm.define name do |node|
      node.vm.hostname = name
      node.vm.network "private_network", ip: ip
      node.vm.provider "virtualbox" do |vb|
        vb.memory = 1536
        vb.cpus = 2
      end
      role = name.start_with?("manager") ? "manager" : "worker"
      node.vm.provision "shell", path: "scripts/#{role}.sh", args: [ip, NODES["manager1"]]
    end
  end
end

scripts/docker.sh #

#!/usr/bin/env bash
set -euo pipefail
curl -fsSL https://get.docker.com | sh
usermod -aG docker vagrant

scripts/manager.sh et scripts/worker.sh #

# manager.sh
set -euo pipefail
docker swarm init --advertise-addr "$1"
docker swarm join-token -q worker > /vagrant/worker.token

# worker.sh
set -euo pipefail
docker swarm join --token "$(cat /vagrant/worker.token)" "$2:2377"

3. Démarrer et utiliser le cluster #

Vérifier, déployer, mettre à l'échelle.

Commandes #

vagrant up                                   # crée les trois nœuds dans l'ordre
vagrant ssh manager1 -c "docker node ls"      # trois nœuds Ready, un Leader
vagrant ssh manager1 -c "docker service create --name web --replicas 3 -p 8080:80 nginx"
vagrant ssh manager1 -c "docker service ps web"
vagrant ssh manager1 -c "docker service scale web=6"
curl http://192.168.56.11:8080               # le maillage de routage répond sur chaque nœud
vagrant destroy -f && rm -f worker.token

Pièges #

  • Interface d'annonce : sans --advertise-addr, Swarm choisit l'interface NAT de VirtualBox (10.0.2.15), identique sur toutes les machines, et la jointure échoue.
  • Jeton périmé : supprimez worker.token après un vagrant destroy.
  • Ports : 2377 (gestion), 7946 (communication) et 4789/udp (réseau overlay) doivent être ouverts entre les nœuds.
Bonne Pratique : Pour un cluster plus résilient, déclarez trois managers : Swarm tolère alors la perte d'un manager (quorum Raft).

Articles liés

Vagrant : vue d'ensemble et vocabulaire (box, provider, provisioner, Vagrantfile)

Les notions indispensables pour suivre la formation Vagrant : à quoi sert Vagrant, le cycle de vie d'un envir…

Les plugins Vagrant : étendre providers, provisioners et commandes

Comprendre le système de plugins de Vagrant : ce qu'un plugin peut ajouter (provider, provisioner, commande, …

Partager un environnement Vagrant : ngrok et le plugin vagrant-share

Rendre une application qui tourne dans une machine Vagrant accessible à un collègue ou un client : redirectio…

Pour aller plus loin

Soutenir

♥ SOUTENIR

Soutenez RousselTM Learning

Les formations, articles, TP et attestations restent gratuits et sans publicité intrusive. Une contribution libre, du montant de votre choix, finance l’hébergement, les environnements de TP et l’écriture de nouveaux contenus.

Contribuer avec PayPal Montant libre · carte bancaire ou compte PayPalEn savoir plus
QR code PayPal
Ou scannez ce QR code avec votre téléphone

Merci, chaque contribution compte !