Portainer Encore !

Et pourtant ça marche !

Il y a quelques semaines le logiciel Logitech Media Server (LMS) a été installé dans un container Docker. Il s'agissait de tester le serveur audio dans ce mode de fonctionnement. En utilisant une petite carte Orange Pi Zero 2 à 30€, avec un processeur ARM gravé en 28 nanomètres, et son maigre Go de mémoire, ce n'était pas certain de voir le système fonctionner de manière fluide.

En effectuant quelques recherches est apparu le projet pi-hosted qui propose une liste de containers déjà configurés pour la Raspberry Pi. Ce projet propose en plus deux points très intéressants : utiliser portainer pour gérer les containers facilement via une interface web ;.

Bien entendu il est possible d'installer d'autres containers que ceux de la liste qui en compte déjà 200 en novembre 2022. Par exemple le Logitech Media Server et squeezelite (le lecteur audio logiciel) ne figurent pas dans les templates, ni Octoprint (le logiciel de contrôle d'imprimantes 3D). De l'autre côté dans la liste des templates, se trouve une "stack" qui permet d'avoir le monitoring de la machine, la consommation processeur, mémoire etc...

Avec le monitoring, on peut connaître les paramètres principaux du fonctionnement de la machine sur un historique de temps (15 jours avec les paramètres par défaut) . Cet ensemble d'informations permet de confirmer que "tout va bien".

Si cela va bien pour la Orange Pi Zero 2, est-ce que l'on peut installer tout le bazar sur une toute petite Raspberry Pi Zero 2 ?

La réponse est oui : on peut installer un système 64 bits, docker + portainer, la stack de monitoring et enfin le logiciel squeezelite pour avoir un player audio "dans un container".

Pour que ça soit un peu plus fluide, on peut faire trois choses : overclocker la carte à 1.3GHz (+30%), limiter la mémoire vidéo à 32Mo, modifier la taille de la SWAP. Le dernier point semble obligatoire, les deux autres sont facultatifs mais très faciles à mettre en oeuvre.

Portainer Agent

En installant Docker sur les différentes machines à disposition, le serveur audio, deux lecteurs audio, une Raspberry Pi Octoprint, une Orange Pi 800 + Manjaro, alors on finir par se retrouver avec de nombreux portainers sur toutes les machines. Procédons autrement : on laisse Portainer installé sur une machine, on le supprime sur les autres, pour le remplacer par le Portainer Agent.

La machine Portainer peut se connecter à chaque Agent : une seule machine Portainer pour gérer toutes les machines qui ont l'agent portainer installé.

Installation de l'Agent Portainer

L'installation de l'agent portainer est effectuée via une seule ligne de commande (documentation ici), mais il faut d'abord arrêter portainer sur la machine, avant de le remplacer par l'agent.

Sur la ligne de commande, pour connaître la liste des containers on tape la ligne suivante :

sudo docker container ls

et pour arréter un container

sudo docker stop portainer

Et enfin, si l'on souhaite supprimer "portainer" :

sudo docker rm portainer

Une fois que portainer n'est plus là, on peut lancer l'agent portainer avec la commande suivante :

docker run -d -p 9051:9001 --name portainer_agent --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/docker/volumes:/var/lib/docker/volumes portainer/agent:latest

L'option p 9051:9001 permet d'indiquer que l'on veut "maper" le container sur le port 9051 (Pastis 51).

Une fois que le container à démarré, on peut aller sur la machine qui contient Portainer pour se connecter à l'agent.

Connexion à l'agent portainer


Dans le menu à gauche, dans les Settings, il faut aller dans Environments pour ajouter un environnement (en se connectant aux agents).

En haut à gauche se trouve un bouton "add Environment" sur lequel on clique.

Un choix de différents environnements est affiché.

On va sélectionner le premier, celui avec la baleine, c'est "Docker".

Et ensuite on clique sur "Start Wizard".

Ensuite on va se connecter via "l'agent" (c'est ce que l'on vient d'installer !) à la carte qui se trouve en 192.168.1.166.

Il y a un script proposé par l'application qui ne nous est pas utile.

Il y a seulement deux champs à remplir :

  • le premier est le nom que l'on souhaite donner, qui est libre

  • le second correspond à l'adresse ip de la machine ainsi que le port, ici 9051 (celui que l'on a indiqué sur la ligne de commande pour l'installation).

Ensuite on peut cliquer sur Connect.

Voilà, c'est fait, l'environnement a été créé : avec une carte Portainer on peut gérer une autre carte sur laquelle on a installé l'agent.

Dans le menu Environments, on peut le voir :

Il reste une petite opération à effectuer pour plus de confort.

Cliquez sur l'environnement et indiquer l'adresse ip publique. Ensuite on clique sur le bouton "Update".

Cela permettra ensuite de cliquer sur le port afin d'aller sur la page web exposée par le container, on verra cela ci-dessous.

Comment utiliser la liste des environnements ?

Dans Portainer, en cliquant sur Home, on obtient la liste des environnements disponibles.

Il suffit de cliquer sur un des environnements pour prendre la main dessus.

Ensuite, c'est comme d'habitude, on gère les containers comme one faisait précédemment.

La différence c'est que (dans notre exemple) on a une interface gérée par une Orange Pi Zero 2 qui communique avec l'agent installé sur une Raspberry Pi Zero 2.

Pourquoi installer portainer partout alors que l'on peut se contenter d'installer l'agent sur toutes les cartes moins une ?

Et quand on gère les containers, si l'on a un container qui expose un port et que l'on a renseigné l'adresse IP publique (voir ci-dessus), alors en cliquant sur le port exposé (3000 ici) alors :

Portainer ouvre un onglet sur l'adresse IP publique et sur le port. Ici on va directement sur grafana pour le monitoring. De quoi mesurer que le lecteur audio se comporte correctement.