Home Lab
My home lab is a single-node, bare-metal Kubernetes cluster running every service I use day to day. It's intentionally simple at the OS layer (minimal Ubuntu Server, just enough to run k0s) and intentionally rigorous above it (GitOps, typed storage classes, observability, backups).
The whole cluster is declared in a single Git repo: homelab-k8s-fluxcd. If it isn't in Git, it isn't in the cluster.
What's in this Section
Network Architecture
Home network topology: OpnSense router, managed switch, UniFi WiFi, VLAN segmentation, and the 2.5 GbE link to the homelab.
Setup Details
The hardware and platform layer: CPU, RAM, ZFS pools, Ubuntu Server, k0s, OpenEBS ZFS-LocalPV, Cilium, Traefik, CloudNativePG.
Services
Everything I self-host — GitLab, Matrix, Immich, Jellyfin + *arr, Authentik, Headscale, Paperless-ngx, and more.
Philosophy
The lab exists to:
- Own my data and the services I depend on
- Force me to actually understand the technologies I care about
- Give me a realistic, non-toy environment to try new things
- Run the infrastructure I actually want, not the infrastructure a vendor wants me to rent
Every switch I've made over the years — Proxmox → bare metal, kubeadm → k0s, LVM → ZFS, OpenTofu → FluxCD, Plex → Jellyfin, WireGuard-Easy → Headscale — has been driven by a specific problem with the previous setup. I'm not chasing shiny; I'm trimming friction.
Evolution
The lab started as a TrueNAS SCALE box on a Dell OptiPlex with a 4-core i5. Today it's a Ryzen 5 9600X with 64 GB of DDR5 and ~15 TB of ZFS-backed storage, running k0s reconciled from a Git repo. The hardware, the OS, and the orchestration layer have all been replaced — the documentation here is the current state, not the history.