Homelab platform on k3s
A production-shaped Kubernetes platform on three second-hand mini PCs, run entirely through GitOps, and a hands-on blog series that teaches others to build it.
Problem
Robot software lives or dies on its infrastructure: deployments, secrets, monitoring and updates. I wanted to run that whole stack myself, end to end, on hardware I own, and to explain it well enough that someone who has only touched Docker once could build it too.
What I did
I built a three-node k3s cluster on second-hand HP mini PCs (one control plane, two workers) and run it the way I would run production.
Traffic. Requests come in through Cloudflare, so the home IP stays hidden, then hit a Cilium load-balancer VIP on the LAN and Traefik, which routes by hostname. cert-manager issues Let’s Encrypt certificates through a DNS challenge, so TLS works even with port 80 blocked.
Git runs the cluster. Flux reconciles everything from a git repo. Secrets are committed encrypted with SOPS and age, never in plaintext. Renovate opens update PRs, Reloader rolls pods when config changes, and CrowdSec adds a basic security layer.
State and access. Longhorn replicates volumes across nodes so storage survives a node dying. Headscale, a self-hosted Tailscale, gives remote access without opening ports.
Monitoring that pages. Prometheus and Grafana watch the cluster and alert through a self-hosted ntfy server to my phone. When Prometheus itself ran out of disk, I wrote the incident up.
Result
The cluster runs my own services, including the blog itself, and a hands-on build series walks readers from bare hardware to a real app deployed end to end, finishing with a hardening checklist.
system
scroll sideways on small screens