6.1 Concepts de base de Docker Swarm
Docker Swarm
— c'est un système d'orchestration de conteneurs intégré fourni par Docker. Ça permet de créer, gérer et scaler un cluster d'hôtes Docker, en les transformant en un hôte logique unique où on peut lancer des conteneurs. Swarm distribue automatiquement les tâches entre les nœuds, offrant une grande simplicité et une tolérance aux pannes. Dans cette conférence, on va jeter un œil aux composants clés et aux commandes de base pour la gestion de Docker Swarm
.
Les concepts de base de Docker Swarm
:
- Cluster (Swarm): un groupe d'hôtes Docker regroupés en un cluster logique unique.
- Managers: les nœuds qui gèrent le cluster et distribuent les tâches entre les nœuds de travail.
- Nœuds de travail (Workers): les nœuds qui exécutent les tâches et lancent les conteneurs.
- Services: une représentation logique des applications qui décrit quelles tâches doivent être exécutées et combien d'instances des conteneurs doivent être lancées.
- Tâches (Tasks): des conteneurs individuels qui sont les instances des services.
L'architecture de Docker Swarm
:
Docker Swarm est basé sur une architecture avec des managers et des nœuds de travail. Les managers gèrent l'état du cluster, et les nœuds de travail exécutent les tâches.
Managers:
- Ils gèrent l'état et la configuration du cluster.
- Ils distribuent les tâches aux nœuds de travail.
- Ils assurent une tolérance aux pannes et une haute disponibilité (avec plusieurs managers).
Nœuds de travail:
- Ils exécutent les tâches assignées par les managers.
- Ils lancent des conteneurs conformément aux tâches.
Commandes de base de Docker Swarm
:
-
docker swarm init
: initialisation d'un nouveau cluster Swarm. -
docker swarm join
: ajouter un nœud à un cluster existant. -
docker node ls
: voir la liste des nœuds du cluster. -
docker service create
: création d'un nouveau service. -
docker service ls
: voir les services en cours d'exécution. -
docker service scale
: scaler un service à un certain nombre d'instances. -
docker service rm
: supprimer un service du cluster.
Utiliser Docker Swarm
permet de simplifier la gestion des applications dans des systèmes distribués, offrant tolérance aux pannes, scalabilité et simplicité de déploiement.
6.2 Création d'un cluster Docker Swarm
Création et gestion d’un cluster Docker Swarm
Étape 1 : Initialisation du cluster
Sur le premier hôte (Manager), exécutez la commande :
docker swarm init --advertise-addr <MANAGER_IPl>
Cette commande initialise un nouveau cluster Swarm, rend le nœud actuel manager et affiche une commande pour joindre les nœuds workers.
Étape 2 : Joindre des nœuds workers
Sur les autres hôtes, exécutez la commande affichée lors de l'exécution de docker swarm init
, pour les joindre au cluster :
docker swarm join --token <SWARM_TOKEN> <MANAGER_IP>:2377
Où :
<SWARM_TOKEN>
: le token pour rejoindre le cluster (fourni par la commandedocker swarm init
).<MANAGER_IP>
: l'adresse IP du nœud manager.
Étape 3 : Afficher les nœuds
Pour voir tous les nœuds dans le cluster, utilisez la commande :
docker node ls
Cette commande affiche une liste de tous les nœuds, y compris leurs rôles, états et disponibilités.
Exemple de sortie de la commande docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
qwertyuiop12345 manager-node Ready Active Leader
asdfghjkl67890 worker-node1 Ready Active
zxcvbnm09876 worker-node2 Ready Active
Explication des colonnes :
- ID : Identifiant unique du nœud.
- HOSTNAME : Le nom de l'hôte sur lequel le nœud est exécuté.
- STATUS : L'état actuel du nœud (par exemple, Ready).
- AVAILABILITY : La disponibilité du nœud (par exemple, Active).
- MANAGER STATUS : Indique si le nœud est un manager (par exemple, Leader, Reachable) ou un worker (vide).
Maintenant, le cluster Docker Swarm est configuré, et vous pouvez créer et mettre à l’échelle vos applications.
6.3 Gestion de Docker Swarm
Gestion des services dans Docker Swarm
1. Création d'un service
Crée un service qui sera lancé avec un nombre défini de répliques :
docker service create --name my_web --replicas 3 -p 8080:80 nginx
Dans cet exemple, un service my_web
est créé et lance 3 instances de Nginx. Les conteneurs publient le port 80 sur le port 8080 de l'hôte.
2. Voir les services
Pour voir tous les services en cours d'exécution dans le cluster, utilise la commande :
docker service ls
Exemple de sortie de la commande docker service ls
ID NAME MODE REPLICAS IMAGE
ab12345 my_web replicated 3/3 nginx:latest
3. Mise à l'échelle d'un service
Pour modifier le nombre d'instances (répliques) d'un service, utilise la commande docker service scale
:
docker service scale my_web=5
Maintenant, le service my_web
aura 5 instances.
4. Mise à jour d'un service
Pour mettre à jour l'image d'un service vers une nouvelle version, utilise la commande docker service update
:
docker service update --image nginx:latest my_web
Garantir une haute disponibilité
Docker Swarm prend en charge la haute disponibilité grâce à :
- La distribution des tâches entre les nœuds du cluster pour une récupération automatique des conteneurs en cas de panne.
- Le support de plusieurs managers : Il est recommandé d'avoir un nombre impair de managers (par exemple, 3 ou 5) pour éviter les problèmes de quorum.
- L'utilisation de répliques : Configure plusieurs répliques pour chaque service pour augmenter la tolérance aux pannes.
Concept de quorum
Le quorum représente la majorité des nœuds qui doivent être d'accord avec une certaine action (par exemple, l'écriture de données ou l'élection d'un leader) pour qu'elle soit considérée comme valide. Par exemple, dans un cluster de 5 nœuds, le quorum sera de 3 nœuds.
Astuce utile !
Assure-toi que les managers sont situés sur différents serveurs physiques ou dans le cloud pour minimiser le risque de pannes simultanées.
6.4 Exemple de configuration Docker Compose
pour Docker Swarm
Docker Compose
peut être utilisé avec Docker Swarm
pour simplifier la gestion des applications multi-conteneurs.
Exemple de fichier docker-compose.yml
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "8080-8090:80"
deploy:
replicas: 3
restart_policy:
condition: on-failure
networks:
- my_overlay_network
db:
image: postgres:latest
environment:
POSTGRES_PASSWORD: exemple
deploy:
replicas: 1
restart_policy:
condition: on-failure
networks:
- my_overlay_network
networks:
my_overlay_network:
driver: overlay
Lancement du stack Docker Compose
dans Swarm
Pour déployer un stack dans Docker Swarm
, utilisez la commande :
docker stack deploy -c docker-compose.yml mystack
Visualisation du stack
Visualisation des stacks déployés :
docker stack ls
Visualisation des services dans le stack
docker stack services mystack
GO TO FULL VERSION