Un cluster Kubernetes production-ready pour 20€/mois

date: Dec 8 2025 5 min de lecture

Trois control planes, haute dispo, GitOps, secrets chiffrés. Le même niveau que les entreprises, sans le budget enterprise.

.kubernetes.hetzner.talos.argocd.terragrunt.gitops

Les boîtes paient des milliers d’euros par mois pour un cluster Kubernetes “production-ready”. Haute dispo, GitOps, secrets management, observabilité. La totale

J’ai monté la même chose pour 20€/mois. Trois control planes, quorum etcd, failover automatique, déploiements GitOps. Le code est public, le cluster tourne en prod

C’est pas un homelab de hobbyiste. C’est un POC qui prouve qu’on peut avoir une infra enterprise-grade sans le budget enterprise

Le problème avec le “production-ready”

La plupart des setups Kubernetes en entreprise sont du théâtre. Un cluster EKS à 500€/mois, des nodes managés, et derrière? Des kubectl apply à la main, des secrets en clair dans des ConfigMaps, zéro reproducibilité

Paye cher, fais n’importe quoi. C’est le modèle dominant

À l’inverse, tu peux avoir une infra propre pour une fraction du prix. Le coût c’est pas l’argent, c’est la compétence. Faut savoir ce qu’on fait

La stack

Talos Linux : l’OS qui t’empêche de tricher

Pas de SSH. Pas de shell. Pas de “je me connecte vite fait pour debug”. Toute la config d’un node passe par une API et un fichier YAML

machine:
  type: controlplane
  network:
    hostname: cp-1
cluster:
  controlPlane:
    endpoint: https://api.etcd.me:6443

Tu appliques cette config, le node est dans cet état. Tu la réappliques dans six mois, même état. Zéro drift, zéro surprise

Les équipes qui font du “GitOps” mais SSH sur les nodes en cas de problème? Talos rend ça impossible. Tu fais les choses proprement ou tu ne les fais pas

Terragrunt : l’infra qui se redéploie en une commande

L’infra entière est découpée en modules. Cluster, DNS, firewall, IPs flottantes. Chaque module a son state Terraform séparé, ses dépendances explicites

terraform/
├── modules/
│   ├── cluster/      # Talos + Hetzner
│   ├── dns/          # Route53
│   └── firewall/     # Rules réseau
└── live/
    └── etcdme/       # L'environnement prod

Un terragrunt run-all apply et le cluster complet se déploie. Dans l’ordre. Automatiquement. J’ai détruit et reconstruit ce cluster une dizaine de fois pendant le dev. Même commande, même résultat

ArgoCD : le cluster qui se répare tout seul

Chaque application est un manifest dans Git. ArgoCD surveille le repo, détecte les changements, applique automatiquement. Pas de kubectl apply manuel, pas de “j’ai oublié de déployer”

syncPolicy:
  automated:
    selfHeal: true
    prune: true

Le selfHeal: true c’est la magie. Quelqu’un modifie un truc à la main sur le cluster? ArgoCD le détecte et le remet comme c’était. Le repo Git est la source de vérité. Point

Cilium + Load Balancer Hetzner : le failover transparent

Cilium gère le réseau en eBPF et expose une Gateway API. Le load balancer Hetzner fait les health checks. Un node tombe? Le trafic bascule sur les autres. Automatiquement. Sans intervention

Le tout pour le prix de trois VMs

Les secrets dans Git (oui, vraiment)

SOPS + age. Les secrets sont chiffrés dans le repo, déchiffrés au runtime sur le cluster

stringData:
  password: ENC[AES256_GCM,data:xxx,tag:xxx]

N’importe qui peut voir le fichier. Personne ne peut lire sans la clé privée. Les secrets suivent le même workflow que le code : versionnés, reviewés, auditables

C’est plus propre qu’un Vault externe pour ce use case. Moins de dépendances, moins de points de failure

Backups et PITR

Un cluster sans backups c’est pas de la prod, c’est de l’espoir. PostgreSQL tourne avec des backups automatiques et du Point-In-Time Recovery

Les WAL sont envoyés en continu vers Backblaze B2. Pourquoi B2? À 6$/TB/mois c’est trois fois moins cher que S3 et l’API est compatible S3. Tu peux restaurer la base à n’importe quel instant dans les dernières 24h. Pas juste “le backup de 3h du mat”, non, l’état exact à 14h37m22s si tu veux

Une corruption de données? Un DELETE sans WHERE? Tu remontes le temps jusqu’à juste avant la connerie. C’est le filet de sécurité que la plupart des “clusters prod” n’ont pas

Le coût réel

RessourceMensuel
3x CX22 Hetzner15€
Floating IP4€
Domaine~1€
Total~20€/mois

Pour comparaison, un cluster EKS avec trois nodes c’est minimum 200€/mois. Et t’as toujours pas le GitOps, les secrets chiffrés, ni l’infra as code

Ce que ça démontre

Que la haute dispo c’est pas un luxe. Trois control planes au lieu d’un, c’est 10€ de plus par mois. En échange t’as un cluster qui survit à la perte d’un node. Le ratio coût/bénéfice est absurde

Que le GitOps c’est pas compliqué. ArgoCD + un repo Git + des manifests YAML. C’est tout. Pas besoin de pipelines CI/CD complexes, pas besoin d’outils propriétaires

Que l’immutabilité ça marche. Talos prouve qu’on peut gérer des nodes sans jamais se connecter dessus. L’OS devient un détail d’implémentation, plus un truc à maintenir

Que le code public force la qualité. Quand ton infra est visible, tu fais les choses proprement. Pas de hacks temporaires qui deviennent permanents, pas de secrets en dur “en attendant”

Le repo

Tout est open source : github.com/sofianedjerbi/homelab

La structure Terraform, les manifests ArgoCD, les configs Talos. Fork, inspire-toi, ou juste regarde comment c’est organisé

Le cluster est en prod. etcd.me tourne dessus. Si le site répond, le POC fonctionne

Vous avez aimé cet article ? Partagez-le !

Sofiane Djerbi
Sofiane Djerbi

Architecte Cloud & Kubernetes, Expert FinOps.

Commentaires