Création d’un cluster Docker Swarm via Vagrant

Création d’un cluster Docker Swarm via Vagrant

Installation et création d’un premier cluster Docker Swarm via deux machines virtuelles Vagrant

Docker Swarm est un orchestrateur de conteneurs proposé par Docker himself, il est bien plus simple à appréhender que Kubernetes et autre mais ne propose pas nativement certaines options comme le monitoring ou la récolte de metrics. Il utilise donc un modèle maître/esclave et permet de réaliser du load-balancing d’applications.

Pour ce lab j’utiliserai le logiciel Vagrant, qui est une surcouche aux logiciels de virtualisation classique et permet de créer/configurer des machines virtuelles très rapidement et très simplement. Bon, cela dit, niveau rapidité, on est loin de Docker… mais ça devrait aller !

I) Installation de Vagrant et création des VMs

Ici nous allons donc utiliser Vagrant en accord avec l’hyperviseur Virtualbox, mais il est tout à fait fonctionnel avec VMware Workstation ou encore Hyper-V.

Pour installer virtualbox, vérifiez dans les dépôts de votre distribution, et pour l’installation de Vagrant :

  • Téléchargez l’archive contenant le binaire sur le site officiel de Vagrant ;
  • Dézippez l’archive ;
  • Déplacez le binaire dans le dossier Bin (sudo chmod +x vagrant && sudo mv /tmp/vagrant /usr/local/bin/) ;
  • Effectuez un vagrant pour vérifier si tout est ok ;

Bien, à partir de là vous pouvez créer un dossier dans lequel nous créerons ensuite deux sous-dossiers, un pour chaque VM. Si vous êtes flemmard, tout est déjà disponible sur mon Github à cette addresse.

Il convient maintenant de comprendre quelques notions de base pour Vagrant, à savoir :

  • Vagrantfile : fichier de configuration écrit en langage Ruby et permettant de définir la racine de notre dossier ainsi que la configuration de notre VM (notre Box). Par exemple, pour le nom de la VM, son adresse IP, ou encore le lien vers un script de démarrage seront déclarés ici ;
  • Box : Le principe est assez semblable à Docker, une box est donc ni plus ni moins qu’une “image de machine virtuelle”, par exemple la box nommée generic/debian9 propose une version de Debian 9 classique. Libre à vous de télécharger celle qui vous plaît sur le site de Vagrant, ou bien même de créer la vôtre.

Commençons donc par exécuter la commande vagrant init generic/debian9 dans chacun de nos deux sous-dossiers. Une fois fait, on peut librement éditer le fichier Vagrantfile généré pour arriver à ceci :

  • config.vm.box : le nom de la box en question ;
  • config.vm.provision : indique que nous souhaitons provisionner (configurer, alimenter si l’on veut) notre box via un script shell nommé bootstrap.sh et se trouvant dans le même dossier que le vagrantfile ;
  • config.vm.network : indique que l’on utilise le réseau public_network et que l’on attribue une adresse IP fixe à notre vm (au démarrage de celle-ci, vagrant nous demander sur quelle interface physique le bridge se fait) ;
  • config.vm.define : indique le nom attribué à la box, bien pratique pour s’y retrouver plus tard ;

Une fois fait, on peut s’atteler à la création de notre fichier bootstrap.sh :

Ici rien d’incroyable, ce script bash va donc mettre à jour les dépôts et paquets mais il va surtout installer docker swarm.

Une fois fait, un petit coup de vagrant up dans chaque dossier puis on choisi pour chacune des box l’interface qui va servir de bridge (en général eth0) et nous pouvons nous connecter via la commande vagrant ssh (bien veiller à être dans le bon dossier, par exemple un vagrant ssh dans le dossier 01 va se connecter à la VM 01, pas la 02 ou la 03 !).

A partir de là, nous allons pouvoir commencer la création de notre cluster Swarm.

II) Création du cluster Swarm

La plupart des commandes sont assez faciles. Ici nous nous rendons sur notre serveur Maître et nous spécifions son adresse IP via le flag –advertise-addr :

sudo docker swarm init --advertise-addr 192.168.1.50

Pour rejoindre le cluster, il nous suffira donc de copier/coller cette ligne de commande contenant le token ainsi que l’adresse IP et le port du master :

sudo docker swarm join --token SWMTKN-1-3s9mqe45lpxhqtt0fpjf83y46iweeiix2vyyj39ps6ovm9ykyj-df0r3bvwgrkbebr65do1xmi8p 192.168.1.50:2377

A partir de là, notre cluster est fonctionnel ! On peut lister les nodes le composant via la commande docker node ls :

Ensuite nous pouvons démarrer une stack, c’est-à-dire un ensemble de services, comme pour un fichier docker-compose classique (d’ailleurs je vais prendre un docker-compose basique permettant d’installer une suite wordpress) :

sudo docker stack deploy -c docker-compose.yml website-01

Une fois fait, nous pouvons démarrer un conteneur visualizer qui permet via une interface web de voir sur quelle node tourne quel service :

sudo docker run -it -d -p 1000:8080 -v /var/run/docker.sock:/var/run/docker.sock dockersamples/visualizer

Attention, le visualizer ne doit être installé que sur une node master, sinon cela ne fonctionnera pas.

Comme on peut le voir, la stack s’est naturellement load-balancée ; d’un côté la database MySQL, et de l’autre côté le CMS WordPress.

Et bien voilà, cet article touche déjà à sa fin. Nous aurons donc appris les notions de base de Vagrant ainsi que la création d’un cluster Swarm de base. Bonne journée/soirée à vous !

Laisser un commentaire

You May Have Missed