homelab
Comment est construit mon homelab Kubernetes
Dix machines, un cluster Kubernetes (k3s) et une trentaine d’applications self-hosted, gérés comme je gérerais de la production. Tout, de l’installation de l’OS au déploiement de chaque application, est déclaré dans git.
Des applications jusqu’au matériel
Applications & AIOps
Une trentaine d’applications, chacune déployée depuis git et protégée par une authentification unique. L’IA tourne sur du matériel local.
AIOps
- Requête au LLM
- Proxy de réveil dans le cluster
- Wake-on-LAN
- Ollama répond
Au repos, la station se met en veille d’elle-même : de la puissance GPU pour une consommation au repos quasi nulle.
- Alertmanager
- Le LLM regroupe et résume
- chat
Les alertes liées sont regroupées et résumées avant d’arriver sur mon téléphone : un incident, un message.
- Alerte ou sync Argo CD en échec
- Logs Loki correspondants
- Le LLM rédige un premier diagnostic
Alertes, syncs en échec et applications dégradées arrivent avec une première lecture de ce qui ne va pas, rédigée à partir des logs qui les entourent.
- Erreurs Loki du jour
- Comparées à celles de la veille
- Seuls les nouveaux motifs sont publiés
Les erreurs déjà présentes la veille restent silencieuses ; seuls les nouveaux motifs arrivent dans le chat.
- Une semaine d’historique d’alertes
- Le LLM l’analyse
- Règles à ajuster ou supprimer
Le modèle lit l’historique des alertes de la semaine dans VictoriaMetrics et propose les règles à ajuster ou à supprimer.
Un modèle local relit les PR de dépendances ouvertes par Renovate et les commente.
Un espace de travail pour agents IA dans le cluster, avec son propre accès à Vault.
Applications self-hosted
- Immich
- Nextcloud
- Paperless-ngx
- Vaultwarden
- Home Assistant
- Homepage
- Servarr
- Stirling-PDF
- IT-Tools
- draw.io
Mon operator Kubernetes pour les bots de trading freqtrade : bots, stratégies et backtests sont des ressources personnalisées. Paper trading uniquement.
Livraison & cycle de vie
Chaque couche est déclarée dans git : modifier le cluster, c’est faire un commit.
Déclaré dans git, couche par couche
- Installation de l’OSFedora CoreOS · Butane / Ignition
Un OS immuable, installé à partir d’un fichier de configuration.
- Configuration des hôtesAnsible
Rôles réseau et stockage, appliqués à chaque machine.
- Version de KubernetesSystem Upgrade Controller
Des plans de mise à jour : la version est écrite dans un fichier.
- Plateforme & applicationsArgo CD · app-of-apps
Une trentaine d’applications, réparties en projets infrastructure et applications.
- SecretsVault
Seulement des références dans git ; les valeurs sont synchronisées depuis Vault.
Des mises à jour à chaque niveau
- Nouvelle version de CoreOS
- Le nœud se met à jour
- Attend son tour : un nœud à la fois
- Vidé, redémarré, remis en service
- Version modifiée dans un plan
- Commit
- Les nœuds se mettent à jour
- Renovate ouvre une PR
- Un LLM local la relit
- Merge
- Argo CD la déploie
Deux pipelines
- Push
- Gitea Actions construit l’image
- Argo CD déploie depuis git
Gitea et ses runners CI, amd64 et arm64, tournent dans le cluster lui-même.
- dev : lint, vérification des types, build
- staging : servi par Apache, smoke tests
- main : déployé, smoke tests à nouveau
La page que vous lisez est passée par ce pipeline, sur les runners du cluster.
Edge & sécurité
Chaque application a un seul nom. Depuis internet, il passe par Cloudflare et un pare-feu applicatif ; à la maison, le même nom mène directement à une passerelle privée. Aucun port entrant n’est ouvert.
Un nom, deux chemins
- Cloudflare DNS
Enregistrements publics, créés depuis le manifeste de chaque application. Seules les applications publiques en ont un.
- Cloudflare Tunnel
Sortant uniquement : aucun port ouvert, aucune IP domestique exposée.
- BunkerWeb
Pare-feu applicatif et passerelle publique, avec des règles et des limites de débit par application.
- Technitium
Répond pour la même zone à la maison, avec trois réplicas.
- MetalLB
Donne à la passerelle privée son adresse sur le réseau domestique.
- NGINX Gateway Fabric
La passerelle privée : le trafic de la maison ne sort jamais de la maison.
Les deux chemins arrivent au même endroit
- Authentik
Connexion sur les deux chemins : OIDC quand l’application le permet, un proxy sinon. MFA obligatoire.
- Application
Les applications uniquement privées n’ont aucun enregistrement public.
Deux instances d’external-dns écrivent les deux vues à partir des mêmes manifestes : aucun enregistrement DNS n’est modifié à la main.
Autour des chemins
Default-deny sur tout le cluster ; chaque application n’ouvre que les flux dont elle a besoin. Depuis le réseau domestique, les nœuds ne répondent qu’au SSH, à l’API Kubernetes et au ping.
Le trafic entre les nœuds est chiffré, même à l’intérieur du réseau domestique.
Cluster raft de trois nœuds avec auto-unseal. Les secrets sont synchronisés vers les applications, jamais stockés dans git.
Certificats TLS émis et renouvelés automatiquement, wildcards compris.
Chaque namespace a un niveau de sécurité : baseline, privileged seulement là où l’accès à l’hôte est nécessaire.
Le compte admin intégré est désactivé : l’accès passe par le SSO avec MFA.
Matériel, alimentation & données
Dix machines servent le cluster : sept font tourner k3s, trois le soutiennent.
Les machines
Garde le stockage, le control plane et le réseau en marche pendant les coupures. Alerte via SNMP quand il passe sur batterie.
Aucune redirection de port entrant.
Fedora CoreOS. Trois forment un control plane hautement disponible ; un est worker.
Fedora CoreOS aussi. De la capacité en plus à petit prix ; les charges lourdes tournent ailleurs.
Garde les sauvegardes en dehors du cluster qu’elles protègent.
Sert des LLM locaux. Se met en veille au repos, réveillée à la demande.
Provisionné et protégé par pare-feu en tant que code, relié en WireGuard.
Une seconde copie des sauvegardes du NAS, hors de la maison.
Sur l’onduleur : le NAS, 1 nœud du control plane, le routeur et le switch.
Où vont les données
- Volumes Longhorn
Répliqués sur plusieurs nœuds, avec un snapshot toutes les heures.
- Dumps de bases de données
Quotidiens, cohérents au niveau applicatif. Les snapshots etcd sont aussi copiés hors des nœuds.
- NAS
Sauvegardes nocturnes de chaque volume.
- Sauvegarde hors site
Le dernier recours si c’est la maison elle-même qui pose problème.
Les restaurations sont répétées sur une base de test, pas seulement planifiées.
Tout surveiller
- Métriques
- VictoriaMetrics, Prometheus
- Logs
- Loki, Promtail
- Traces
- Tempo
- Sondes
- Blackbox exporter
- Matériel
- SNMP
- Tableaux de bord
- Grafana
- Alertes
- Alertmanager → chat
SNMP couvre l’onduleur et le NAS : une coupure de courant déclenche une alerte comme n’importe quelle autre panne.