← Projets

Homelab Kubernetes piloté en GitOps

Un cluster k3s auto-hébergé où tout, du DNS aux sauvegardes, est décrit dans un dépôt Git et synchronisé par ArgoCD.

Pourquoi

Je voulais héberger mes services moi-même (git, mots de passe, VPN, domotique, mes applications), mais sans tomber dans le piège du serveur « bricolé à la main » qu’on n’ose plus toucher. D’où une règle simple : rien ne se configure à la main sur le cluster. Tout est décrit dans un dépôt Git, et ArgoCD se charge d’appliquer l’état désiré en permanence.

Ce site lui-même tourne sur ce homelab.

Architecture

Couche Outil Rôle
Orchestration k3s Kubernetes léger, un nœud aujourd’hui, trois demain
Déploiement ArgoCD Synchronise le dépôt gitops avec le cluster (auto-sync, prune, self-heal)
Forge & CI Forgejo + Actions Dépôts, registre d’images OCI, pipelines de build
Entrée Traefik Reverse proxy, TLS, middlewares
Certificats cert-manager Wildcard Let’s Encrypt via challenge DNS-01 chez OVH
Secrets OpenBao + External Secrets Aucun secret en clair dans Git
Authentification Authelia SSO et forward-auth devant les interfaces d’admin
DNS AdGuard Home DNS local, résolution de la zone interne, filtrage
Observabilité VictoriaMetrics, VictoriaLogs, Grafana Métriques, logs, alertes Telegram
Sauvegarde Velero + Kopia Sauvegardes des volumes vers MinIO sur le NAS

Le flux de déploiement

  1. Je pousse du code sur une application (par exemple AquasManager).
  2. Un pipeline Forgejo Actions construit l’image et la pousse dans le registre de Forgejo.
  3. Le pipeline modifie le tag d’image dans le dépôt gitops et commite.
  4. ArgoCD détecte le commit et déploie. Pas de kubectl apply manuel, pas d’accès au cluster depuis la CI.

Chaque application a un environnement de recette (branche develop) et de production (branche master), chacun avec son sous-domaine.

Supervision

La pile de monitoring a été choisie pour sa sobriété : VictoriaMetrics et VictoriaLogs tiennent dans environ 1 Go de RAM, là où une pile Prometheus/Loki classique en demandait bien plus sur un nœud de 16 Go déjà chargé.

  • Chaque Ingress est sondé automatiquement en HTTPS (code, latence, expiration du certificat) : un nouveau service est supervisé sans rien ajouter.
  • Des sondes dédiées vérifient l’infra : DNS, NAS, accès Internet.
  • Les alertes arrivent sur Telegram ; un tableau de bord « Homelab » sert de page d’accueil à Grafana.

Ce que j’en ai appris

Quelques pannes instructives, détaillées sur le blog :

La suite

  • Passer de 1 à 3 nœuds pour avoir un quorum de control-plane, dont un nœud plus costaud pour Immich.
  • Construire un vrai NAS comme stockage partagé avant cela.
  • Recycler un Raspberry Pi en DNS secondaire hors cluster et en sonde de disponibilité externe.