Déploiement d’un cluster Docker Swarm




Déployer un cluster Docker Swarm avec GlusterFS et Keepalived : guide rapide étape par étape

Dans cet article, je vous guide dans le déploiement d’un cluster Docker Swarm haute disponibilité, avec un stockage partagé via GlusterFS et une IP virtuelle avec Keepalived. Chaque étape est détaillée pour que vous puissiez reproduire cette architecture chez vous.




Prérequis

3 machines ou plus (physiques ou virtuelles)

OS : Debian 11/12 ou Ubuntu 22.04 recommandé

Un accès sudo sur tous les nœuds

Une interface réseau commune (ex: eth0) sur tous les nœuds

Des noms d’hôtes configurés proprement





Étape 1 – Configuration réseau de base

Modifier /etc/hosts

Sur chaque nœud, éditez le fichier /etc/hosts pour inclure tous les nœuds :

sudo nano /etc/hosts

Ajoutez (adapter les IP/Noms) :

192.168.1.11 ds1
192.168.1.12 ds2
192.168.1.13 ds3




Étape 2 – Keepalived : IP virtuelle flottante

Nous allons créer une IP virtuelle (VIP) partagée entre deux nœuds (ds1 et ds2).

Installer Keepalived

Sur les deux nœuds concernés :

sudo apt install keepalived

Configuration sur le nœud principal (ds1)

sudo nano /etc/keepalived/keepalived.conf

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass secret
    }
    virtual_ipaddress {
        192.168.1.100
    }
}

Configuration sur le nœud secondaire (ds2)

Changer state en BACKUP et priority à 90.

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass secret
    }
    virtual_ipaddress {
        192.168.1.100
    }
}

Démarrer Keepalived :

sudo systemctl enable –now keepalived




Étape 3 – Installation de GlusterFS

Nous allons créer un volume partagé et répliqué.

Installer GlusterFS

Sur chaque nœud :

sudo apt install glusterfs-server -y
sudo systemctl enable –now glusterd

Préparer les briques de stockage

Sur chaque nœud :

sudo mkdir -p /mnt/brick/volume1

(Si possible, utiliser un disque dédié monté ici)

Former le cluster

Depuis ds1 :

gluster peer probe ds2
gluster peer probe ds3

Vérifier :

gluster peer status

Créer le volume GlusterFS

Toujours sur ds1 :

gluster volume create docker-volume replica 3 \
  ds1:/mnt/brick/volume1 \
  ds2:/mnt/brick/volume1 \
  ds3:/mnt/brick/volume1
gluster volume start docker-volume

Monter le volume

Sur chaque nœud :

sudo mkdir -p /mnt/docker
sudo mount -t glusterfs ds1:/docker-volume /mnt/docker

Pour rendre cela persistant :

echo « ds1:/docker-volume /mnt/docker glusterfs defaults,_netdev 0 0 » | sudo tee -a /etc/fstab




Étape 4 – Installation de Docker

Sur chaque nœud :

sudo apt update
sudo apt install -y \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

Ajouter le dépôt officiel Docker :

curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg –dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

echo \
  « deb [arch=$(dpkg –print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] \
  https://download.docker.com/linux/debian \
  $(lsb_release -cs) stable » | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Installer Docker :

sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io -y
sudo systemctl enable docker –now




Étape 5 – Initialisation de Docker Swarm

Initialiser le cluster (sur ds1)

docker swarm init –advertise-addr 192.168.1.11

Note le token donné pour l’ajouter sur les autres nœuds.

Joindre les autres nœuds (ds2, ds3)

docker swarm join –token SWMTKN-… 192.168.1.11:2377

Promouvoir en manager (si besoin) :

docker node promote ds2
docker node promote ds3




Étape 6 – Installation de Portainer

Portainer permet de gérer ton cluster via une interface web.

Créer un volume pour Portainer

docker volume create portainer_data

Déployer Portainer dans Swarm

docker service create \
  –name portainer \
  –publish 9000:9000 \
  –constraint ‘node.role == manager’ \
  –mount type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock \
  –mount type=volume,src=portainer_data,dst=/data \
  –replicas=1 \
  portainer/portainer-ce:latest

Accessible via : http://<IP-VIRTUELLE>:9000




Et après ?

Déploie tes stacks dans /mnt/docker

Utilise docker stack deploy pour les lancer

Ajoute des nœuds ou services à volonté

Pense à superviser ton cluster et tes volumes

Commentaires

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *