This article is available in French.
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.
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
endscripts/docker.sh #
#!/usr/bin/env bash
set -euo pipefail
curl -fsSL https://get.docker.com | sh
usermod -aG docker vagrantscripts/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.tokenPiè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.tokenaprès unvagrant 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).
My progress
Sign in to track your progress and take notes. Sign in
Recommended Articles
Grafana Provisioning : Automatisez la gestion de vos tableaux de bord et sources de données
Découvrez comment utiliser le provisioning de Grafana pour gérer vos configurations (dashboards, ...
Traefik : les providers (Docker, Kubernetes, Nomad, Consul, fichiers, clés-valeurs)
Les providers alimentent la configuration dynamique de Traefik : découverte des services Docker, ...
Cross-cluster search et cross-cluster replication : architectures multi-clusters Elasticsearch
Concevoir des architectures multi-clusters Elasticsearch : clusters distants, cross-cluster searc...
VictoriaMetrics en cluster : vminsert, vmselect, vmstorage et multi-tenant
L'architecture cluster de VictoriaMetrics : rôle de vminsert, vmselect et vmstorage, répartition ...
Grafana Alerting et gestion des astreintes
Créer des alertes dans Grafana (règles, points de contact, politiques de notification), les provi...
Grafana Alloy: Syntax and Configuration (Alloy Language: River)
As part of a Grafana training or observability training, master the declarative syntax of Grafana...
Dynatrace Credential Vault : Sécuriser et gérer vos secrets
Découvrez comment l'application Credential Vault de Dynatrace permet de gérer de manière sécurisé...
Bonnes pratiques Docker : images, exécution, sécurité et exploitation
Les bonnes pratiques Docker : Dockerfile et builds multi-étapes, images minimales et reproductibl...
Docker : vue d'ensemble, architecture et premiers pas
Découvrir Docker : conteneurs vs machines virtuelles, architecture client/daemon/registre, images...