
Nous allons explorer, dans cette série d’articles, comment créer un cluster kubernetes “comme des grands”, et à partir de rien, en tant que homelab. Nous y incluerons le monitoring et les outils de déploiement automatisés, car ce n’est pas parce que c’est à la maison que ce doit être du bricolage !
Cet article fait partie d’une série d’articles :
- Forger un cluster kubernetes dans son garage
- Préparation du déploiement des applications
- Déploiement Prometheus grafana dans Kubernetes
- Déploiement de notre première application
1. Le matériel
Le but de cette démonstration est de ne pas dépenser une fortune en investissements dans son homelab.
Vous pouvez utiliser du Matériel que vous avez déjà (ce que je fais en partie) ou du matériel de récupération. j’ai décidé d’investir un peu d’argent pour pouvoir déployer un certain nombre de projets que j’ai en tête, à un prix moindre que si je louais des ressources dans le cloud.
Nous allons donc nous tourner sur un bon rapport qualité/prix en terme de nombre de vcpus/threads processeur et de ram.

Aliexpress propose des kits cartes mères + cpu + ram pas trop chers, et qui permettent de faire tourner pas mal de choses.
Un petit tour sur leboncoin me permet de trouver un PC au format SFF à 70€ (8Go de ram, 4 vcpus) et un kit carte mère venant lui aussi d’aliexpress, mais un peu plus vieux avec un cpu 8 cores/16 threads et 16Go de ram à 30€
Une carte graphique de récup nvidia GTX 1650 ti avec 4Go de RAM et une autre basique (<20€ sur aliexpress) viennent gérer la vidéo de nos serveurs
Donc si je résume :
- un kit CM + CPU + RAM avec 18 cores/36 threads et 32Go de ram (126€)
- un kit CM + CPU + RAM avec 8 cores/16 threads et 16Go de ram (30€)
- une carte graphique basique (20€)
- une carte nvidia GTX 1650 ti pour les besoins IA (40€)
- un disque ssd NVMe de 256Go (23€)
- un disque ssd SATA de récupération
- un PC de bureau basique (70€)
- 2 alims 600W sur amazon (2 x 24€)
- 2 boitiers de récup donnés gracieusement par emmaüs près de chez moi (si si, merci à eux !)
donc, sans compter le pc de bureau qui sera là pour avoir un quorum de 3 machines, nous avons :
- 52 vcpus
- 48Go de RAM
- 4Go de RAM graphique pour de l’IA
Pour un total d’environ 360€, ce qui reste ma foi raisonnable.
2. Préparation de l’environnement
a. Installation de linux

Rien de bien spécifique ici, nous allons installer ubuntu 24.04 (dernière version LTS à ce jour) via une clé usb
Nous prendrons l’installation serveur sans affichage graphique
Ubuntu reste la distribution la plus facile à installer et à opérer.
je ne vous détaille pas ici l’installation d’Ubuntu, ni même comment créer une clé usb bootable, car si vous lisez ceci, vous êtes capables de trouver comment le faire.
b. Pilotes NVIDIA

Nous allons également installer les drivers NVIDIA cuda sur notre serveur avec la carte GTX pour nos applis nécessitant du GPU.
Sur ce même serveur, il faudra installer les drivers graphique NVIDIA , ainsi que le NVIDIA Container Runtime qui servira à kubernetes pour lancer les conteneur ayant accès à aux coeurs cuda de la carte graphique.
Petite remarque : Veillez à choisir la même méthode d’installation pour les différents paquets, et à défaut, essayez de trouver des versions compatibles.
Je me suis un peu arraché les cheveux pour faire fonctionner tout ca, ayant eu le cas où les modules du kernel installés différaient de la version du driver, ainsi que de celle du paquet nvidia-utils.
Mais bon, ça se gère.
c. Deploiement de kubernetes et Configuration du cluster

Le but est de ne pas s’embêter outre-mesure avec la gestion de notre cluster. Nous donc allons partir sur une distribution simple, microk8s.
Kubernetes s’installe à partir des paquets via snap. un simple snap install microk8s --classic suffit à installer kubernetes.
On peut l’utiliser à la fois comme un Minikube en local sur une seule machine, ou comme node d’un cluster kubernetes de plusieurs machines.
C’est cette seconde option qui nous intéresse.
Nous allons donc sur chacun des 3 serveurs et lançons la commande
sudo snap install microk8s --classic
Ensuite, sur une (et une seule) des machines, nous allons lancer la commande suivante :
$ microk8s add-node
qui nous répond :
From the node you wish to join to this cluster, run the following:
microk8s join 192.168.1.xx:25000/<redacted>/xxxxxxxxxxxxx
Use the '--worker' flag to join a node as a worker not running the control plane, eg:
microk8s join 192.168.1.xx:25000/<redacted>/xxxxxxxxxxxxx --worker
If the node you are adding is not reachable through the default interface you can use one of the following:
microk8s join 192.168.1.xx:25000/<redacted>/xxxxxxxxxxxxx
microk8s join 192.168.xx.1:25000/<redacted>/xxxxxxxxxxxxx
microk8s join 172.17.0.1:25000/<redacted>/xxxxxxxxxxxxx
microk8s join 2a0x:e0a:a50:fxc0:bacx:xxxx:xxxx:xxxx:25000/<redacted>/xxxxxxxxxxxxx
Nous allons donc nous rendre sur une des deux autres machines pour lancer
microk8s join 192.168.1.xx:25000/<redacted>/xxxxxxxxxxxxx
(Je précise que nous voulons que tous les noeuds supportent le control plane kubernetes)
La deuxième machine va ensuite apparaître dans le même cluster que la première.
Il faut ensuite relancer $ microk8s add-node sur la première machine et associer de la même façon la troisième machine avec la commande microk8s join .... générée
Si tout va bien, les trois machines apparaîtront dans le cluster :

Notez que j’ai désactivé la petite machine, nommée “minikube”, laissant les app tourner sur les deux autres machines seulement
J’utilise Lens desktop qui est gratuit dans sa version de base, et largement suffisant pour gérer un cluster kubernetes.
Pour récupérer la configuration du cluster kube pour l’utiliser dans Lens ou dans les déploiement de l’étape suivante, exécutez cette commande sur la première machine : microk8s kubectl config view --raw
Copiez le retour de la commande dans une fichier kubeconfig
Une dernière commande à lancer :
microk8s enable gpu
Ce qui va activer l’accès au GPU sur notre machine possèdant la carte nvidia