A self-hosted Kubernetes lab built for clean GitOps workflows, shared platform services, and a small but intentional app layer.
⚙️ The repository is the source of truth for the cluster resources managed by Flux.
| Layer | Tooling |
|---|---|
| Kubernetes | Talos Linux |
| GitOps | FluxCD |
| Packaging | Helm + Kustomize |
| Networking | MetalLB + Traefik |
| Secrets | Vault + External Secrets Operator |
| Public access | Cloudflare Tunnel |
| Hardware | NVIDIA GPU Operator |
| Apps | Homepage + Linkding + Postiz |
| Documentation | Zensical in docs/ |
.
├── gitops/ # Flux-managed Kubernetes manifests
│ ├── apps/ # User-facing workloads
│ ├── infrastructure/ # Shared platform capabilities
│ ├── monitoring/ # Observability layer
│ └── clusters/ # Flux entrypoints for the lab cluster
├── iac/ # Terraform configuration for Vault
└── docs/ # Documentation site
✅
base/holds reusable service definitions.🧪
lab/holds homelab-specific overlays.🎛️
gitops/clusters/decides what Flux actually reconciles.🏗️
iac/vault/manages configuration inside Vault that Kubernetes manifests do not own.
| Layer | Active services |
|---|---|
| Apps | homepage, linkding, postiz |
| Infrastructure | metallb, traefik, vault, external-secrets, cloudflared, local-path-provisioner, gpu-operator, cnpg |
| Monitoring | Prometheus, Alertmanager, Grafana, Metrics Server, node-exporter, kube-state-metrics |
Grafana and Prometheus are available on the local network at
http://grafana.homelab.internal and http://prometheus.homelab.internal.
Alertmanager remains internal to the cluster.
- Manifests live in
gitops/apps/,gitops/infrastructure/, andgitops/monitoring/. base/defines the reusable service shape.lab/adds homelab-specific values, ingress, storage, and overlays.gitops/clusters/lab/*.yamltells Flux what to reconcile and in what order.
docs/index.mdshows the current architecturedocs/architecture/explains relationships that span multiple servicesdocs/gitops/explains repository structure, reconciliation, and service wiringdocs/apps/documents user-facing applicationsdocs/services/documents individual services and dependenciesdocs/runbooks/contains repeatable setup, operations, and recovery procedures
- Keep the cluster declarative.
- Separate apps from shared infrastructure.
- Activate services explicitly through the cluster entrypoints.
- Keep monitoring as its own concern.
- Make the repo easier to understand before making it more powerful.