Un tutoriel de base existe chez Raspbian France, nous allons le reprendre en partie forcément puisque nous effectuons les mêmes installations qu'eux. Cependant, nous allons apporter un complément d'information et surtout notre retour d'expérience.
Ce tutoriel est destiné à une architecture ARM (Raspberry), mais il est aussi valable pour une architecture plus classique. Cependant, il peut y avoir des différences que nous essayerons de noter.
Vous venez de commander vos 3 Raspberry pi 3 B et vous avez très envie de créer un cluster Swarm. On vous rassure ça marche aussi avec 2 Raspberry mais c'est moins fun !
Installation de Raspbian (Debian pour raspberry)
Tout d'abord, il vous faudra faire l'initialisation de vos Raspberry. Personnellement, nous utilisons NOOB en version Network. C'est-à-dire que les fichiers seront directement téléchargés d'internet pour faire l'installation. Une fois le zip de NOOB téléchargé, dézipper le fichier reçu, copier coller les fichiers sur votre carte mémoire.
Attendez avant de mettre en route votre Raspberry ! --> Niveau matériel pour vous connecter à internet sur votre Raspberry, vous avez deux possibilités :
- Soit vous utilisez un câble Ethernet avec un accès direct à Internet
- Soit vous pouvez utiliser le WIFI avec un accès direct à internet. NOOB est compatible avec ces deux moyens de connexion.
Maintenant, mettez la carte mémoire dans votre Raspberry, branchez le câble Ethernet, clavier, souris, et écran, si vous souhaitez passer par le wifi rien de particulier à faire, branchez votre raspberry à l'électricité et c'est parti !
En suite suivez l'interface graphique, si jamais vous avez des difficultés pour faire votre installation suivez ce tutoriel de Framboise314.fr
Installation de Docker
Notre architecture :
Hote | Ip |
RaspiManager | 192.168.0.1 / 24 |
RaspiWorker1 | 192.168.0.2 / 24 |
RaspiWorker2 | 192.168.0.3 / 24 |
Les ports à utiliser si jamais vous avez un Firewall sont :
- TCP port 2377 Management du cluster et la communication des nodes
- TCP and UDP port 7946 Découverte des communications
- UDP port 4789 trafic des ports des containers entre les nodes.
Répéter cette opération numéro 1 sur vos trois Raspberry :
----- Opération numéro 1 Début :
Pour installer de docker il n'y a qu'un script à utiliser fourni par Docker :
curl -sSL https://get.docker.com | sh
Une fois que le script s'est bien déroulé, il vous invite à passer une commande pour ajouter les droits Docker à votre utilisateur :
sudo usermod -aG docker pi
Déconnectez-vous de votre user "CTRL + D", puis reconnectez-vous. Vérifiez que vous avez les droits :
id pi
Le groupe qui devrait être ajouté s'appelle simplement :
Docker
Maintenant vous pouvez taper :
docker version
Vous devriez obtenir :
Client:
Version: 17.11.0-ce
API version: 1.34
Go version: go1.8.3
Git commit: 1caf76c
Built: Mon Nov 20 19:01:07 2017
OS/Arch: linux/arm
Server:
Version: 17.11.0-ce
API version: 1.34 (minimum version 1.12)
Go version: go1.8.3
Git commit: 1caf76c
Built: Mon Nov 20 18:54:12 2017
OS/Arch: linux/arm
Experimental: false
Si ça n'est pas le cas, vous pouvez nous contacter.
----- Opération numéro 1 FIN:
Docker est maintenant installé, vous trouverez sur le hub.docker.com toutes les images officielles permettant de monter vos premiers micro-services. Pensez à bien utiliser des images en architecture ARM sinon vous allez avoir des surprises :)
Installation de swarm
Là vous allez me dire "Enfin on y vient". Je vais vous répondre que swarm est déjà parmi nous ... Bien oui, vous venez de réaliser le tutoriel qui permet d'installer swarm car il est embarqué dans Docker.
Mais il reste une étape très très compliquée ... l'initialisation de swarm en une commande. Allez sur votre raspberry Manager, celui qui sera le chef d'orchestre de votre cluster de Raspberry. Tapez cette commande :
docker swarm init
S'affiche alors :
Swarm initialized: current node (8m5cmwoujfbq9apwlvnr) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token
SWMTKN-1-1taxwfdawf58vyvaafzyyaxasfm5s4tydfrxsjgijtc-esplpc4bu4txguy5phwdkczb1
192.168.0.1:2377
To add a manager to this swarm, run 'docker swarm join-token manager'
and follow the instructions.
Ensuite comme l'indique le message pour ceux qui parlent anglais, vous avez juste à copier-coller la commande qu'il vous donne (attention ne copiez pas celle que l'on vous donne ici, chacune est unique) :
docker swarm join --token
SWMTKN-1-1taxwfdawf58vyvaafzyyaxasfm5s4tydfrxsjgijtc-esplpc4bu4txguy5phwdkczb1
192.168.0.1:2377
Vous obtiendrez :
This node joined a swarm as a worker.
Répétez l'opération sur tous vos workers, puis tapez la commande suivante :
sudo docker node ls
Vous verrez apparaitre vos machines dans le cluster.
Maintenant essayer d'installer l'interface graphique Vizualiser, pour voir vos containers.
docker service create \
--name=viz \
--publish=8080:8080/tcp \
--constraint=node.role==manager \
--mount=type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock \
alexellis2/visualizer-arm
Attention le constraint est primordial ici car ce service doit être exécuté sur le manager.
Maintenant allez dans un navigateur et insérez l'adresse ip de votre "manager:8080" ici donc "192.168.0.1:8080". Vous verrez l'ensemble de votre cluster avec une interface graphique simple et minimaliste.
Maintenant chaque fois que vous démarrerez un container, il ira se placer sur un de vos worker ou du manager en fonction de sa disponibilité. Si jamais un des membres tombe, le service exécuté dessus remontera sur votre nouvelle machine. Dans les prochains tutoriels, nous allons vous montrer les difficultés rencontrées et les bonnes pratiques que nous avons identifiées. Nous ferons aussi un article sur Docker-Compose 3.2.
### Attention bug identifié sous Raspberry avec DOCKER dans sa version 17.11.0-ce ###
Lors de l'instanciation de service vous pouvez avoir le message suivant :
starting container failed: cgroups: memory cgroup not supported on this system: unknown
Tout d'abord mettre à jour le firmware de toutes vos raspberry :sudo apt update && sudo apt dist-upgrade && rpi-update
Redémarrez votre raspberry, si cela n'a pas résolu le problème, faites la manipulation suivante :
Editer ce fichier :sudo vi /boot/cmdline.txt
Ajouter avant "elevator=deadline" cette commande :cgroup_enable=memory
Ne laisser qu'un espace avant et après.
Faites un Sudo reboot
Tout devrait fonctionner.
Merci de votre lecture, à très bientôt.