Tutoriel | Installer et utiliser DockerSwarm
Article publié le 15 Août 2018
Docker Swarm est un outil conçu par Docker permettant de gérer un cluster de Container très facilement. En plus d'être simple à implémenter, Docker Swarm est extrêmement performant. Il peut supporter mille noeuds et cinquante mille container sans aucune dégradation de performance.
Ci-dessous un tutoriel complet sur comment installer et utiliser DockerSwarm.
1) Prérequis
Pour ce tutoriel, je vais utiliser 3 machines (la distribution importe peu)
Docker 1.13 ou supérieur doit-être installé sur chaque machine. Pour rappel, un tutoriel sur l'installation de Docker est disponible ici.
2) Schéma
Ci-dessous un petit schéma qui résume très simplement le concept de Swarm et de ce que l'on va mettre en place avec ce tuto:
3) Création du Cluster Swarm
Un cluster swarm est composé de Managers chargés de l'orchestration du cluster et des Workers qui exécutent vos containers.
- Initialisation du cluster Swarm (la machine ou le cluster swarm sera initialisé deviendra Manager):
docker swarm init --advertise-addr <ip du host>
La commande devrait vous renvoyer quelque chose comme ci-dessous:
- Suivez les instructions en faisant un copier-coller de la commande sur chaque node (host) qui servira de worker:
- Vous pouvez vérifier l'état de votre cluster Swarm grâce à cette commande (à exécuter depuis le manager):
docker node ls
4) Création d'un service
Avec swarm nous allons beaucoup parler de service. Un service est, pour ainsi dire, le point d'entré de votre application. Un service est composé de 1-N container et apporte une dimension de clustering, de fault tolérance et de haute disponibilité à votre environnement docker.
- Dans l'exemple ci-dessous, nous allons créer un service httpd (apache) nommé "monserveurweb":
docker service create --name monserveurweb --publish 80:80 httpd
- Vérifiez ensuite l'état de votre service:
docker service ls
Au final, vous devriez avoir un truc comme ceci:
Vous pourrez constater que si vous tapez http://<ip de votre manager ou d'un node> depuis votre navigateur que le serveur apache hébergé dans le container répond bien!
4.2) Scalabilité
En faisant un docker service ls, vous pouvez voir que le nombre de replica est à 1. Cela signifie qu'un seul container a été provisionné et déployé dans votre cluster. Il est possible d'augmenter le nombre de replica via cette commande:
docker service update --replicas <nombre de replica> <nom de votre service>
ou
docker service scale <nom de votre service>=<nombre de replicas> (l'avantage avec cette commande est que vous pouvez modifier plusieurs service d'un seul coup)
Si l'on refait un "docker service ls" on pourra voir que le nombre de replicas a augmenté:
Pour rappel, votre manager fera lui même le loadbalancing entre chacun de vos replicas.
Vous pouvez avoir une vue détaillé de l’endroit où sont hébergés chacun de vos replicas grâce à cette commande
docker service ps <id de votre service>
Exemple:
4.3) Ajouter un manager
Vous l'aurez compris, le manager est un élément critique de votre cluster Swarm. Il est très fortement conseillé d'en avoir plusieurs afin de limiter au maximum le risque d'incidents critiques.
Pour créer un nouveau manager (qui sera un manager en standby):
- Récupérez le token:
docker swarm join-token manager
- Copiez-collez la commande qui vous est indiquée sur le host qui vous servira de manager
- En faisant un "docker node ls" vous pouvez voir votre nouveau node avec le statut "reachable". Ce qui voudra dire qu'il prendra le relais en cas de perte du manager.
Attention toutefois: afin que l'algorithme raft fonctionne bien (ce qui permet l’élection d'un nouveau manager en cas de perte de celui-ci), il est préconisé que le nombre de manager désigné soit impair !
5) Autres fonctionnalités
Ci-dessous quelques fonctionnalités qui pourront vous être fort utile:
- Exemple de commande pour fixer des quota de ressources:
docker service update --limit-cpu=.5 --reserve-cpu=.75 --limit-memory=128m --reserve-memory=256 monserveurweb
- Les labels:
Cette fonctionnalité vous permettra de "tagger" vos nodes et vos services. Cela vous sera très utile; par exemple, si vous voulez que certains services se déploient sur certain nodes:
- Affecter un label à un node
docker node update --label-add nodelabel=<nom du label> <id de votre node>
- Créer un service qui sera déployé sur un node en fonction de son label:
docker service create --name <nom du service> --constraints 'node.labels.nodelabel=='<nom du label>' <nom de l'image>
- Supprimer un node:
- Sur votre node tapez la commande suivante:
docker swarm leave
- Depuis le manager tapez la commande suivante:
docker node rm <id de votre node>
- Swarm et docker-compose
- Il est possible de créer un service depuis un yaml docker-compose grâce à cette commande:
docker stack deploy --compose-file <fichiercompose.yml> <nom service>
Super Tutoriel ! Mais surtout une superbe explication des chaque actions et fonctions, ce qui permet de bien comprendre l’utilité et les avantages du swarm.
Connaissant le fonctionnement je redirigerai les gens ici, car c’est bien plus clair que quand j’explique!
Good Job
Merci!
Salut,
Tout d’abord merci pour ta présentation, elle est à la fois claire et concise.
Je débute quelque peu sous Linux, je m’y suis remis grâce à l’obtention de 2 raspberry, et à ce jour j’ai simplement monté un serveur NAS, et déployé plusieurs OS comme Raspbian, recalbox et Kali.
Je vais pour mon plaisir monter un cluster de 4-8 pi et donc il me paraît indispensable de s’orienter vers Docker.
Tu nous dis : « Attention toutefois: afin que l’algorithme raft fonctionne bien (ce qui permet l’élection d’un nouveau manager en cas de perte de celui-ci), il est préconisé que le nombre de manager désigné soit impair ! »
Si je comprends bien pour que l’algorythme raft fonctionne, il faut que mon manager principal n’ait qu’un réplicant.
Ou alors il faut un total de managers switchables impairs, ce qui reviendrait à faire 2 réplicants manager ?
Merci de ta réponse et de ton tuto.
Bonjour à vous,
Je voulais vous remercier pour la qualité du tutoriel.
J’aurais aimé savoir comment faire si je voulais modifier la page d’acceuil du serveur apache et modifier le it works par autre chose.
Merci d’avance
Bonjour,
Joli tuto mais j’ai un peu de mal à suivre le nombre de machines et leur rôle.
Au départ, il est fait mention de 3 machines.
Une serait à la fois manager et worker ?
l’ajout du nouveau manager se fait bien sur une 4eme machine ?
Peut on imaginer 3 machines pouvant être à la fois worker et manager ?
merci.
denis