Conception et mise en service d’un cluster Raspberry Pi 5
Introduction
Dans le cadre de mes projets personnels et professionnels, j’ai entrepris la conception et le déploiement d’un cluster de Raspberry Pi 5. L’objectif était de créer une infrastructure modulable capable d’héberger plusieurs services, tels que des serveurs de jeux, des bases de données, des services web, ainsi que des outils d’orchestration et d’administration. Ce projet m’a permis de mettre en pratique des compétences en administration système, réseaux, et orchestration de conteneurs.
Conception du cluster
Le cluster est composé de plusieurs Raspberry Pi 5 reliés via un switch réseau. J’ai choisi cette architecture pour assurer :
- La scalabilité, permettant d’ajouter de nouveaux nœuds selon les besoins.
- La redondance et la résilience, grâce à un nœud maître capable de gérer la configuration globale et les nœuds workers exécutant les services.
- Une gestion centralisée, avec des outils d’orchestration comme K3s et le dashboard Kubernetes.
L’infrastructure est divisée en deux types de nœuds :
- Master : fournit la gestion du cluster, la synchronisation de l’horloge via Chrony, le DHCP et le DNS, le NAT et la sécurité via iptables/UFW.
- Workers : exécutent les applications et services (serveurs Minecraft, bases de données, Node-RED, etc.), synchronisés avec le master et sécurisés de la même manière.

Évolution prévue
Je prévois de faire évoluer le cluster en ajoutant :
- Un worker Raspberry Pi 5 supplémentaire pour augmenter la capacité de calcul et la résilience.
- Un VPS externe, qui servira de porte d’entrée au client, permettant un accès sécurisé aux services exposés, tout en isolant le cluster interne du trafic public.
- Un Stockage supplémentaire dédier au backup du stockage principal.

Mise en œuvre
Configuration réseau et sécurité
Chaque nœud dispose d’une IP fixe configurée via DHCP. Le master assure la distribution du réseau et des services essentiels :
- DNS et DHCP avec Dnsmasq
- NAT et firewall avec iptables
- Synchronisation de l’horloge avec Chrony pour garantir la cohérence des logs et des services.
Les communications entre nœuds se font via SSH sans mot de passe, ce qui facilite la gestion automatisée des tâches et le déploiement de scripts.
Orchestration et gestion des services
Pour l’orchestration, j’ai installé K3s, une distribution légère de Kubernetes adaptée aux environnements embarqués. Les services déployés incluent :
- Serveurs de jeux (Minecraft, autres)
- Bases de données SQL (MariaDB)
- Services web (WordPress, applications Node.js)
- Gestion centralisée via le dashboard Kubernetes
Le déploiement se fait via des manifests YAML, ce qui permet de reproduire l’infrastructure sur de nouveaux nœuds facilement.
Défis rencontrés et solutions
- Synchronisation des nœuds : résolue grâce à Chrony et à une configuration NTP robuste.
- Disponibilité des services : utilisation de volumes persistants et de PVC pour les applications critiques.
- Sécurité : configuration fine des règles iptables/UFW et limitation des accès SSH.
Résultats
Le cluster est maintenant pleinement fonctionnel, stable et capable d’héberger plusieurs services simultanément. Il offre une infrastructure flexible, modulaire et évolutive, pouvant être utilisée à des fins de test, de développement, ou même de production légère. Grâce à l’évolution prévue, le cluster gagnera en capacité, résilience et accessibilité sécurisée pour les utilisateurs finaux.
