GERBELOTBARILLON.COM

Parce qu'il faut toujours un commencement...

Le Raspberry PI

0. Introduction


Il y a beaucoup de sites paralant du Raspberry PI et de ses utilisations diverses dans l'IoT notamment. Ce dont nous allons discuter ici est l'utilisation de plusieurs Raspberry Pi pour la mise en cluster. C'est un exercice intéressant qui ve permettre de mutualiser les performances des différents Pi pour aboutir à du calcul réparti. Petit avertissement tout de même : malgré tout ce que l'on peut entendre, les Pi ne sont pas les ordinateurs les plus performants mais, pour la beauté du geste...

Pour mettre en place un cluster il est plus simple de disposer des éléments suivants :

Avec nos 3 RPi, nous aurons au final un manager et deux workers, le tout orchestré par docker swarm. Tout un programme pour vous permettre d'adopter ces petites bêtes que sont les Raspberry Pi et leur potentiel relativement impressionnant pour leur dimension.

Sur chaque Pi, nous allons installer Raspberry Pi OS (anciennement Raspbian) qui sera installé sur les cartes micro-SD qui serviront à démarrer les Pi. Pour flasher les images téléchargées, nous utiliserons Balena Etcher à télécharger depuis le site idoine. Pour se connecter au Pi, nous utiliserons SSH pour établir une connexion sécurisée. Comme nous n'aurons pas d'écran, il faut que SSH soit activé lors de l'installation. Pour cela, il suffit de créer un fichier vide dans la racine de la carte micro-SD et lui donner le nom ssh sans extension.

Une fois les 3 cartes flashées les 3 RPi peuvent être mis sous tension par l'alimentation du hub USB sur lequel sont branchés les câbles USB qui relient chaque Pi. Maintenant que chaque Pi est en route, nous utiliserons putty ou un équivalent selon votre système. Le plus compliqué va être de retrouver les différents Raspberry. Utilisez un analyseur de réseau du type nmap pour retrouver vos équipements. Une fois installé, utilisez nmap -sn <cidr> pour afficher les éléments en ligne sur votre classe de réseau IP. Par exemple, si votre réseau est de la forme 192.168.1.0, alors la commande à saisir sera nmap -sn 192.168.1.0/24.

Utilisez donc putty pour accéder au premier Raspberry détecté et nous considèrerons que cela sera le master. Par défaut, la connexion s'effectue par le login pi et le mot de passe raspberry. Une fois la connexon établie, renommez le nom du RPi en modifiant le fichier /etc/hostname ainsi que le fichier /etc/hosts en remplaçant à chaque fois le mot raspberry par celui que vous voulez affecter au boîtier Pi. Les commandes seront
$ sudo nano /etc/hostname
et
$ sudo nano /etc/hosts
. Si l'on veut respecter le fait qu'il y aura un master et deux workers, alors renommons le Pi en tant que piManager. Il faudra répéter les opérations sur les deux autres Pi et leur donner les noms piWorker1 et piWorker2. Rebootez et reconnectez-vous aux 3 Pi avec 3 commandes putty.

Pour installer docker, sur chaque Pi, faire
$ sudo curl -sSL https://get.docker.com | sh
. A la suite de la mise en place de docker, uniquement sur le manager, utilisez la commande recommandée par docker à savoir
$ sudo usernmod -aG docker pi
qui va permettre de rajouter l'utilisateur pi au groupe docker et ainsi lui donner des droits privilégiés pour manipuler les futurs conteneurs docker.

En premier, sur le manager, lancez le conteneur suivant :
$ sudo docker run -it -d -p 8080:8080 -v /var/run/docker.sock:/var/run/docker.sock alexellis2/visualizer-arm
Cela va installer un visualiseur qui nous donnera l'état du cluster Pi en nous connectant, via un navigateur Web, à l'adresse du Pi manager avec le port 8080. Si ce port est déjà occupé, changez simplement la commande en remplaçant 8080:8080 par un autre port disponible.

Le cluster n'étant pas en route, le visualiseur n'affichera rien. Pour l'initialiser, allez sur le manager Pi et faites
$ sudo docker swarm init.
Maintenant, il faut ajouter les workers au manager en faisant
$ sudo docker swarm join-token worker.
Cette commande vous génère un token qu'il va falloir copier/coller sur les deux workers en ajoutant un sudo devant la commande. Si tout se passe bien, docker devrait vous afficher l'information de bonne jonction au swarm.

Depuis le manager, il est possible de voir quels sont les noeuds rattachés au cluster en faisant
sudo docker node ls

Maintenant que le cluster est en place, il est possible d'ajouter des conteneurs et explorer le fonctionnement des Pi en folie... Par exemple, sur le manager, nous pouvons ajouter le conteneur pour le visualiseur précédemment configuré


// creation du service/container visualizer
sudo 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:latest