Infra k3s GitOps

La plateforme qui sert la page que vous lisez — Kubernetes en production sur un VPS de 1,8 Go de RAM.

k3sFlux CDSOPS / age cert-managerTraefikGitHub Actions

Le problème

Un seul VPS, plusieurs applications à héberger (ce site, Coach Adaptatif, d'autres à venir), et l'envie d'un vrai pipeline : déploiement automatique, staging, rollback en une commande. Contrainte assumée : 1,8 Go de RAM — là où la plupart des guides Kubernetes en recommandent 4 au minimum.

Architecture

Architecture de la plateforme k3s Un nœud k3s de 1,8 Go de RAM. Traefik termine le TLS et route vers le site, Coach Adaptatif et Frigo Adaptatif. Chaque base n'est joignable que par son application. Flux CD tire l'état du dépôt Git d'infrastructure. cluster k3s · 1 nœud · 1,8 Go de RAM 443 NetPol PVC pull applique l'état de Git Internet visiteurs jjoly-infra manifests secrets SOPS Traefik ingress · TLS cert-manager Let's Encrypt Flux CD 2 contrôleurs réconcilie jjoly.eu nginx non-root coach.jjoly.eu coach-app · Go fridge.jjoly.eu fridge-app · Go staging.* 0 réplique hors usage MariaDB dédiée SQLite 1 base / foyer
Un seul nœud, trois services exposés, chaque base isolée derrière une NetworkPolicy.
Version texte
Internet → Traefik (ingress) + cert-manager (Let's Encrypt)
  ├── jjoly.eu          → site statique (nginx, ce site)
  ├── coach.jjoly.eu    → coach-app + MariaDB dédiée
  ├── fridge.jjoly.eu   → fridge-app + SQLite (une base par foyer)
  └── staging.*         → namespace staging (0 réplique hors usage)

Flux CD observe le repo Git d'infra → applique tout changement
CI (GitHub Actions) : tests → build → scan Trivy → GHCR → commit du tag
Chaîne de livraison GitOps GitHub Actions teste, construit, scanne l'image avec Trivy, la publie sur GHCR puis écrit le nouveau tag dans le dépôt d'infrastructure. Le cluster tire ce changement avec Flux : la CI n'a aucun accès au cluster. GitHub Actions — un tiers cluster k3s pull applique git push main → staging vX.Y.Z → prod tests go test build image distroless scan Trivy bloquant si CVE critique GHCR image épinglée par digest commit du tag dans jjoly-infra Flux CD tire depuis Git production rollback : git revert
La CI n'écrit que dans Git ; c'est le cluster qui vient chercher le changement. Aucun identifiant du cluster ne sort du cluster.

Les choix qui comptent

Résilience

Résultat

Un push sur main met à jour le staging en ~1 minute ; un tag vX.Y.Z déploie en production. Ajouter une application = dupliquer un dossier de manifests. Ce site en est la démonstration vivante.

L'état du cluster

Mesuré le 29/07/2026 avec outils/mesurer-infra.sh. Ces valeurs ne sont pas collectées par la CI : donner un accès au cluster au runner créerait un chemin vers la production depuis un tiers.

Ce qui tourne dessus

Versions réellement déployées, lues dans le dépôt d'infrastructure ; réponse HTTP, temps de réponse et certificat TLS constatés par la CI au moment de la construction de cette page — le . Ce n'est pas une supervision temps réel : c'est un constat daté, sans aucun appel depuis votre navigateur.
ServiceVersion en productionAu dernier buildTemps de réponseCertificat TLS
Frigo Adaptatif v4.2.1 a répondu 200 789 ms valide jusqu'au 13/12/2026
Coach Adaptatif v0.2.5 a répondu 200 906 ms valide jusqu'au 11/12/2026
jjoly.eu sha-bd8fa59 a répondu 200 859 ms valide jusqu'au 11/12/2026