Self-hosted GitOps Kubernetes platform
My permanent testbed: a dedicated Hetzner server running K3s, built and operated by hand since 2022, and rebuilt every time my missions taught me a better way of doing things. Everything is described in Git and deployed by ArgoCD, with encrypted secrets and an up-to-date runbook.
- 30
- Helm releases declared in Helmfile
- 26
- applications synced by ArgoCD
- 3
- architecture generations
- 12 months
- of backups: daily, weekly, monthly
- v5Manifests and HelmK3s, Traefik, Prometheus and Grafana, first self-hosted services.
- v6GitOpsHelmfile, ArgoCD, SOPS + age secrets, pre-commit hooks, Wiki.js runbook.
- v7All-Terraform experimentEvery app in OpenTofu. Lesson learned: Terraform for infrastructure, GitOps for the app lifecycle.
| GROUP | APPLICATIONS | SYNC |
|---|---|---|
| network | cilium, linkerd, ingress-nginx, metallb | Synced |
| security | infisical, external-secrets, cert-manager, crowdsec | Synced |
| storage | longhorn, velero | Synced |
| data | pgvector, qdrant, mongodb | Synced |
| ai | open-webui, ollama, n8n | Synced |
| tools | gitea, wiki.js, hedgedoc, affine, matomo | Synced |
| tuning | vpa, goldilocks | Synced |
| media | media-center | Synced |
Backups and recovery
Longhorn and Velero snapshots to Hetzner Object Storage, files via restic. Daily, weekly and monthly rotation, restore procedures documented in the runbook.
AI on logs
RAG proof of concept on system and ingress logs: logs are embedded, stored in Qdrant and pgvector, then queried through an LLM. Alongside it, an n8n workflow reads the ingress logs, compares them with previous reports and produces a report with an urgency score, committed to Git and flagged on Discord.