Skip to content

LAB : Setup Docker Swarm Cluster#

Présentation#

Objectifs:#

  • Familiarisation avec Docker-swarm
  • Déploiement d'un cluster Docker Swarm
  • Appropriation des concepts d'orchestration avec Swarm

Architecture#

Dans ce lab, nous allons déployer un cluster composé de 2 noeuds:

  • lcf_manager_node: Manager noeud
  • lcf_worker_node: Worker noeud

NB: vous pouvez nommer vos noeuds comme vous voulez.

Prérequis#

  • Connaissance de Docker
  • Familiarisation avec les concepts de base de Docker Swarm
  • 02 Instance EC2 avec docker installé sur chacune
  • Minimum de connaissance sur Linux

Déroulement du Lab#

Etape 1 : Création du groupe de sécurité lcf-sg#

Pour que les noeuds de Swarm puissent échanger, il faut que les ports suivants soient ouverts:

  • Port 2377 TCP: pour la communication avec et entre les nœuds

  • Port 7946 TCP/UDP: pour la découverte des nœuds du réseau superposé (overlay)

  • Port 4789 UDP (configurable): pour le trafic du réseau superposé (overlay)

Pour les besoins de ce labs, nous allons également ouvrir les ports:

  • Port 22 SSH: pour pouvoir se connecter à la machine via SSH

  • Port 80 HTTP: pour se connecter à l'app qui sera déployé dans la suite

Pour ce faire naviguez dans le menu EC2 > Réseau & Sécurité > Groupe de sécurité et: - Cliquer sur Créer un groupe de sécurité et remplissez le formulaire avec les informations suivantes: - Nom du groupe de sécurité: lcf-sg - Description: - vpc: Laisser l'option par défaut - Cliquer sur ajouter une règle entrante et la remplir comme suit:

Etape 2: Provisionning des instances EC2#

Connectez-vous à la console AWS et démarrer 03 instances EC2 avec seulement les paramètres suivants à changer: - Name: lcf-manager, lcf-worker01, lcf-worker02 (Un pour chaque VM) - AMI: Ubuntu 24.04 LTS - Instance Type: t2.micro - Nom de la paire de clés : Continuer sans paire de clés - Groupe se sécurité: lcf-sg

Avant de lancer la création, dépilez Détails avancés et rajouter dans la section Données utilisateur le code ci-dessous:

#!/bin/bash
# Update the package database
sudo apt update -y

# Install necessary prerequisites
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common

# Add Docker's GPG key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# Add Docker's official APT repository
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu jammy stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# Update the package database with Docker packages
sudo apt update -y

# Install Docker CE (Community Edition)
sudo apt install -y docker-ce docker-ce-cli containerd.io

# Start and enable Docker service
sudo systemctl start docker
sudo systemctl enable docker

# Add 'ubuntu' user to the docker group to run Docker without sudo
sudo usermod -aG docker ubuntu

NB: Au besoin, consultez la partie prérequis sur comment lancer une instance EC2 avec AWS

La figure ci-dessous montre les 03 instances provisionnés sur AWS.

Pour se connecter à l'une des instances par SSH, cliquer sur l'entrée correspondante à l'instance esuite sur le bouton Se connecter. Laissez les options par défaut puis cliquer encore sur Se connecter

Etape 3: Initialiser un cluster Swarm#

La commande suivante devra être executée sur l'instance lcf-manager. Elle permettra d'initialiser le cluster Swarm et de faire de lcf-manager le leader.

docker swarm init

Vous devriez avoir une sortie semblabe à la capture ci-dessous:

NB: Il est possible d'avoir plusieurs master pour des raisons de haute disponibilité.

Etape 4 : Ajout des workers au cluster#

Sur chacun des workers lcf-worker01 et lcf-worke02, la commande suivante devra être executée. Elle est renseignée dans l'output de la commande à l'étape 1.

docker swarm join --token <token> <ip-manager>:2377

NB: si vous ne parvenez pas à trouver le token ou si ce dernier est expiré, vous pouvez retrouver la commande avec l'instructionci-dessous

docker swarm join-token worker

Etape 5 : Afficher les details du cluster#

La commande suivante permet de lister les noeuds du cluster. Elle devra s'executer dans le noeud manager lcf-manager

docker node ls

Etape 6 : Créer un service pour tester le cluster#

Pour l'exemple ci-dessous, on va déployer un service nginx avec 1 replica, une limitation de la mémoire à 100Mo et une exposition sur le port 80 de la machine hôte.

docker service create --name lcf-app \
--replicas 1 \
--publish 80:80 \
--restart-condition=on-failure \
--limit-memory  100M \
nginx

Etape 7 : Afficher le status du service déployé#

docker service ls
docker ps

Etape 6: Accéder à l'interface de votre app#

Lancer votre navigateur et accéder à l'url http://<ip-public-manager>.

Etape 7: Mettre à jour l'image du service#

Il est possible de mettre à jour votre application depuis votre nouvelle image sans interruption de service.

docker service update --image nginx:stable-alpine lcf-app

Etape 8: Mettre à jour le nombre de replicas à 2#

docker service scale lcf-app=2
docker service ls
docker ps

Etape 9: Supprimer le service#

La commande ci-dessous permet de supprimer le service.

docker service rm lcf-app

Conclusion#

Dans la suite, nous allons voir comment déployer un ensemble de services à travers un stack. N'oubliez pas d'éteindre cos instances EC2, si vous ne passez pas directement au prochain lab pour éviter des coûts additionnels