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>