Mon réseau domestique compte six machines, principalement des Raspberry Pi. J’y fais tourner, aujourd’hui, Matomo, Dolibarr, Pi-hole, l’environnement de qualification de countdowns.fr et WALL-E. Par le passé, il a pu héberger Nextcloud, Roundcube, FreshRSS, Prometheus, Grafana, Unifi et Wallabag.

Le dépôt qui les gère s’appelle rpi-cluster . Il contient les playbooks Ansible, les rôles de déploiement et la configuration de quelques services Docker. Le code est public depuis longtemps, mais le README n’avait pas suivi les changements du cluster : le diagramme montrait encore d’anciennes machines et d’anciens services. Je l’ai remis à jour.

Topologie du cluster Raspberry Pi : un Swarm à trois nœuds et trois hôtes gérés hors Swarm

Le Swarm, puis le reste

Trois machines forment le Swarm :

  • jupiter est le manager. Il porte Traefik, le point d’entrée HTTPS, et le registre Docker ;
  • ganymede est un worker pour Matomo ;
  • callisto est un worker et le constructeur d’images ARM. Il héberge Dolibarr.

Les trois autres sont gérées par le même dépôt Ansible, mais restent hors du Swarm :

  • mars porte Pi-hole ;
  • io héberge l’environnement de qualification de countdowns.fr ;
  • saturn fait tourner WALL-E.

Traefik tourne sur Jupiter. Il reçoit le trafic HTTPS et route aussi certains services vers Io et Saturn.

Pourquoi Ansible et Docker Swarm

Ansible me sert à préparer les machines et à déployer les services. Utilisateurs, sécurité, Docker, fichiers de configuration : je préfère les décrire dans le dépôt que les refaire à la main sur chaque Pi.

Docker Swarm vient ensuite pour les services conteneurisés. Il gère les stacks, les réseaux et les labels Traefik sur les trois nœuds, sans avoir besoin de monter Kubernetes pour six machines à la maison.

Le système a ses limites. Jupiter est l’unique manager et plusieurs services sont volontairement attachés à un nœud précis. Si la machine tombe, le service tombe avec elle. Le Swarm m’aide à déployer et à organiser, pas à fabriquer de la haute disponibilité. Je l’ai testée par le passé, mais je me suis heurté aux limites des Raspberry Pi : partager un volume de stockage entre plusieurs nœuds demande plus de RAM que ce que ces cartes embarquent.

Pourquoi je garde ce système

J’y garde des services dont je me sers vraiment. Mais j’y apprends aussi comment les déployer, les mettre à jour et les réparer sans dépendre d’une suite de manipulations oubliées.

Un nouvel hôte, une règle de routage à corriger ou un service à déployer passent par le même dépôt. La topologie, les rôles Ansible et les fichiers de déploiement restent au même endroit. Le README aurait dû suivre plus tôt.

Ce n’est pas un modèle à reproduire tel quel. Il y a des choix hérités, des compromis et sûrement des angles morts. Le diagramme remis à jour rend au moins une chose plus claire : où tourne quoi, et comment les pièces sont reliées.

Le code

Le dépôt est disponible sur GitLab : nicodel/rpi-cluster .

Il contient les playbooks Ansible, les rôles de déploiement et le diagramme de topologie. Si vous êtes curieux de voir un homelab personnel avec ses compromis visibles, vous pouvez y jeter un oeil.