Decision
k3s
over full kubeadm Kubernetes
k3s gives me the real Kubernetes API in a single lightweight binary that fits one node — the concepts transfer, the overhead doesn’t.
One k3s node under my desk, run like production — GitOps, full observability, and a bot that tells me before my users do.
Reading about Kubernetes and GitOps only gets you so far. I wanted a system with real users — friends on a Minecraft server — where an outage is embarrassing, so the incentives to monitor, automate, and recover are real.
The catch: it all runs on one machine at home. Every choice had to earn its keep on a single node, stay free to host, and be reproducible if I ever wiped it.
Traffic enters through Cloudflare and an Istio gateway; workloads run on k3s with mTLS; everything is observed, declared in Git, and alerts route out through a Discord bot and a serverless watchdog.
Decision
over full kubeadm Kubernetes
k3s gives me the real Kubernetes API in a single lightweight binary that fits one node — the concepts transfer, the overhead doesn’t.
Decision
over kubectl apply by hand
Every object lives in Git and reconciles automatically, so the cluster is reproducible and I can’t forget what I changed at 2am.
Decision
over a paid pager service
Alerts land where I already am, for free, and double as a control surface — status, restart, and lag checks over slash commands.