Construire son homelab avec des Raspberry Pis
On est en juin 2024. Avec mon acolyte / frère / cofondateur de @antipodestudios, on décroche une prestation assez stylée : le développement d’une app complète de gestion d’un événement Nike Football en plein centre de Paris.
L’événement consistait en la disposition de plusieurs ateliers de Football, selon plusieurs thèmes, et d’un tournoi en 1v1. Pour rendre la gestion des ateliers et des joueurs, il fallait développer une application web permettant aux intervenants Nike de gérer les ateliers via plusieurs iPads, et développer en parallèle des interfaces sur écran géant pour y afficher scores / leaderboard, etc.
On rentre pas dans le détail de ce challenge technique, c’est pas le sujet de l’article. Mais en gros on était parti sur des raspberry pi 5 pour gérer chaque écran et afficher via une webapp les données de l’événement.
Si vous voulez en savoir plus, rendez vous sur @Nike Football x Bureau Pleiades x Antipodestudios. Ou sur notre instagram @antipodestudios.
Passé cet événement (qui fut un succès technique pour nous), il me restait entre les mains plusieurs rpis 5. Posés à côté d’anciens rpis 4 et 3, ils ne servaient plus à rien.
Fallait trouver un moyen de les faire bosser.
5 Raspberry pi 5 (8GB), 1 Raspberry 4 (2 GB), et 1 Raspberry pi 3 (pas assez de GB). Un switch. Des cartes microSD. C’est ce que j’avais en stock.
Qu’en faire ?
Et là, la lumière fut.

Fous-moi ça sur le réseau local (chez moi quoi), ssh-toi dessus et host tes petits projets. C’est cool, mais chiant. Faut un setup un peu plus poussé.
Sur des projets pour des clients, j’installe souvent Coolify sur des VPS pour hoster leurs apps. C’est rapide, efficace, connecté à GitHub. Mais je voulais pouvoir hoster plusieurs projets sans me prendre la tête à me demander quel projet ira sur quelle machine. Il me fallait un niveau d’abstraction plus haut.
T’as compris, on est là pour se faire ch*er à setup une mini infra complète. On partira donc sur une solution kubernetes.
Mais il y a un hic : les rpis ne sont pas faits pour ça. k8s est gourmand, rien que pour le faire tourner seul. Ce serait du gâchis.
Et là, je tombe sur un projet initié par les gens de chez Rancher, j’ai nommé k3s.
k3s est une version légère de kubernetes, permettant de tourner sur des machines peu puissantes, i.e des rpis. Parfait candidat pour nous !
On s’y met.

Avant de me lancer, j’ai quand même demandé à mon ami Claude ce qu’il pensait du projet. Complètement validé ! À une condition près : ne pas se fier aux cartes microSD. En effet sur le long-terme ça risque de cramer. On veut du cluster stable ici.
Voici donc le setup hardware qu’on gardera pour le projet :
Les raspberry pi v5 peuvent accueillir un ssd nvme via une carte d’extension connectée au port PCI, image d’illustration :

Ouais, bon… à la base c’était un projet à base de récup… personne ne me jugera ici. On fait les choses bien.
On a tout le hardware qu’il nous faut pour commencer à setup la partie logicielle. Let’s go.
La partie software se divise en deux :
Pas trop de choix ici. On choisit parmi les OS officiels de Raspberry PI Imager. Le seul candidat pour nous sera Raspberry Pi lite OS (64bits), sans environnement de bureau.
Le setup est assez limpide : flash microSD, création d’un user, ajout de clef ssh (pour accéder au pi en direct, servira au setup et pour debug), etc.
On flash, on alimente le rpi, on le connecte au réseau via le switch, et on lui configure un bail DHCP statique (important !), pour pouvoir garder la même adresse IP locale (prérequis pour assurer une bonne communication sous k3s).
Pour booter sur le nvme, il faut copier tout (dd est ton pote pour ça) sur le nvme, puis choisir le boot NVME avec raspi-config.
On fait cette manipulation pour tous les raspberry pis. C’est chronophage mais simple. D’ailleurs on pourrait scripter ça via Ansible ou Terraform, mais pas besoin de se prendre la tête ici. Ça serait néanmoins intéressant si le homelab doit subir des changements de rpis dans le temps, afin d’éviter d’avoir tout à refaire à la main.
La partie intéressante, et néanmoins la plus simple. On procède comme indiqué sur la doc officielle. En commençant bien entendu par le control plane.
On se ssh dessus.
Je passe les détails (si vous avez besoin d’aide sur cette partie, envoyez-moi un mail hello@ademoverflow.com), mais en gros on installe avec cette belle commande :
curl -sfL https://get.k3s.io | sh -
Tu check que tout se passe bien, et tu lances sudo kubectl get nodes pour voir si ton control plane est visible.
On récupère le token d’authentication k3s, et on fait pareil avec les autres rpis :
curl -sfL https://get.k3s.io |
K3S_URL=https://<control-plane-ip>:6443
K3S_TOKEN=<node-token> sh -
Normalement tout est ok ! On a notre k3s up et prêt. Enfin presque.
On pourrait accéder au cluster depuis le control plane via ssh dessus. Mais c’est chiant et pas propre.
On va donc récupérer la kube config avec les bons certificats, pour l’avoir sur notre machine locale (ton ordi quoi).
De mémoire, c’est dans /etc/rancher/k3s/k3s.yaml. Faut possiblement changer l’adresse ip boucle locale par celle du rpi, pour que ça puisse fonctionner.
À ce stade, on a notre cluster k3s up, prêt à recevoir du workload.

Un petit screenshot k9s, quand même !

Bon, c’est bien beau tout ça, mais ce beau monde ne va pas rester sur mon bureau. Regarde la gueule du bordel :

On va se lancer dans le design d’un mini server vertical style homelab (mais nan !?), le tout en impression 3D.
Je scroll sur makerworld, à la recherche d’un projet similaire, mais rien de bien appétissant. Je trouve quand même une base de type “tour” et je lance l’impression.
Ça donne ça :

Go design les étages maintenant. On a de la place, mais on va quand même optimiser un peu un étage, en y mettant 2 rpis.
Ça donne ça :

Au final, on a 3 étages :

On passe au montage, câblage, blablabla…
On obtient ce magnifique homelab server :

Bon c’est cool, on a tout de prêt ! Maintenant, passons à sa gestion.
Mais… j’en ferai un article dédié.
D’ici là, porte toi bien.
Adem.