Pour continuer dans la foulée du test d'OpenFaas, voici un petit tuto sur l'utilisation groupée de Docker, de son outil Swarm d'orchéstration des containeurs, et de l'outil Swarprom, qui s'avère être encore plus sympathique que son copain Dockprom dont je me suis déjà servi pour la supervision de mon blog (lire ici).

SWARM c'est quoi au juste ?

Comment ça marche ?

On commence par se connecter à son vps avec ubuntu ou debian d'installé. Ensuite on lance la commande apt-get update, précédée de sudo si vous êtes connecté autrement qu'en root (conseillé). Puis on va installer Docker en version CE 17.09 afin que cela puisse fonctionner correctement, la version 17.11 possèdant encore pas mal de bugs non-corrigés.

Pour ce faire :

sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

sudo apt-key fingerprint 0EBFCD88

sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsbrelease -cs) \
   stable"

apt-cache madison docker-ce

et enfin :

root@vps447310:~# sudo apt-get install docker-ce=17.09.0~ce-0~ubuntu

Puis, une fois docker installé on lance Docker-compose en installation également :

root@vps447310:~# sudo curl -L https://github.com/docker/compose/releases/download/1.18.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

puis :

root@vps447310:~# sudo chmod +x /usr/local/bin/docker-compose

Ok maintenant on possède un VPS avec Docker installé correctement, toutefois pour faire fonctionner Swarm correctement et obtenir un noeud, il nous faut forcèment le pendant de notre actuel VPS qui sera le "manager" de notre grappe. On reproduit donc le schéma à l'identique sur un deuxième VPS avec les mêmes caractéristiques etc...

Et maintenant les choses sérieuses, on lance Swarm depuis son VPS dit "manager", avec la commande suivante :

root@vps447310:~# sudo docker swarm init
Swarm initialized: current node (zykjs41jqh1316wie9c0oxkt0) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-36atj04vj6sq9u4vy3axxckumncenuel4yflj9241ck8sy49vu-2roujq04kfsl2gufzgellteli ipduserveur:2377
    To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

Notre serveur est désormais manager de sa grappe, mais pour l'instant il est seul nous allons donc dire à notre VPS n°2 de rejoindre la grappe en tant que "worker" ou esclave.

root@vps485213:~# docker swarm join --token SWMTKN-1-36atj04vj6sq9u4vy3axxckumncenuel4yflj9241ck8sy49vu-2roujq04kfsl2gufzgellteli ipduserveur1:2377
This node joined a swarm as a worker.

Et voilà, désormais vous pouvez ajouter autant de "workers" que vous le souhaitez ou même modifier l'organisation en promouvant des "workers" en "managers" etc...

Pour vérifier l'organisation actuelle, rendez-vous sur le serveur principal et tapez :

Docker node ps

Ceci permet de visualiser l'état de la grappe en temps réel, un peu comme avec la commande sudo docker ps qui permet de visualiser dans la console l'état de vos containeurs actifs.

Swarmprom

Désormais nous avons une infrastructure composée de deux serveurs distincts mais reliés par le Docker Swarm dans un seule et même grappe leur permettant de communiquer des données, des applications etc...

Nous allons mettre en place Swarmprom sur notre serveur linux maître, et nos deux serveurs communiqueront leurs données à Prometheus, Grafana et Cadvisor.

Pour ce faire on git clone :

$ git clone https://github.com/stefanprodan/swarmprom.git
$ cd swarmprom

ADMIN_USER=admin \
ADMIN_PASSWORD=admin \
SLACK_URL=https://hooks.slack.com/services/TOKEN \
SLACK_CHANNEL=devops-alerts \
SLACK_USER=alertmanager \
docker stack deploy -c docker-compose.yml mon

Pour rappel les pré-requis sont :

  • Docker CE 17.09.0-ce ou Docker EE 17.06.2-ee-3
  • Swarm cluster avec un manager et un worker

Une fois ces commandes lancées, rendez-vous sur l'ipduserveur:3000 pour accèder à l'inferface web de Grafana depuis le navigateur. Vous devez utiliser les identifiants que vous aurez choisi ou par défaut (cf.plus haut), les identifiants admin / admin.

Et voici le résultat pour le cluster :

Capture-d-e-cran-2017-12-28-a--13.44.15

Et les containeurs :

Capture-d-e-cran-2017-12-28-a--13.44.29

Prometheus :

Capture-d-e-cran-2017-12-28-a--14.04.28

Voilà mon site web et mon wiki sont désormais sous supervision et supervisés par une instance Docker que je maintiens moi-même et facilement administrable.

Et sur Raspberry ?

On peut procéder à l'identique, installation de Docker 17.09 sur Raspbian en raison des bugs sur les 17.11 en suivant la documentation suivante :

$ sudo apt-get update

$ sudo apt-get install \
     apt-transport-https \
     ca-certificates \
     curl \
     gnupg2 \
     software-properties-common

$ curl -fsSL https://download.docker.com/linux/$(. /etc/os-release; echo "$ID")/gpg | sudo apt-key add -

$ sudo apt-key fingerprint 0EBFCD88

$ echo "deb [arch=armhf] https://download.docker.com/linux/$(. /etc/os-release; echo "$ID") \
     $(lsb_release -cs) stable" | \
    sudo tee /etc/apt/sources.list.d/docker.list

Installer Docker-ce

$ sudo apt-get update

$ sudo apt-get install docker-ce

$ apt-cache madison docker-ce

docker-ce | 17.09.0~ce-0~debian | https://download.docker.com/linux/debian jessie/stable amd64 Packages

$ sudo apt-get install docker-ce=17.09.0~ce-0~debian

Et pour finir :

$ sudo docker run armhf/hello-world

et enfin :

$ sudo apt-get install docker-compose

On reproduit ensuite la procédure sur notre deuxième, troisième etc... raspberry, et on lance sur le raspberry principal la commande vu précédemment :

Capture-d-e-cran-2017-12-31-a--12.20.14

Et ensuite on lance sur les esclaves, la commande join :

Capture-d-e-cran-2017-12-31-a--12.30.32

Ce qui nous donne l'état suivant de notre cluster :

Capture-d-e-cran-2017-12-31-a--12.19.47