I ran Kubernetes in my homelab. RKE2, Flux, GitOps, the whole thing — I even wrote about the setup here and here. It worked. I learned a lot.

Then I tore it all down and went back to plain Docker.

What I actually run

Let’s be honest about the scale first: three hosts at home and a VPS. Game servers, a monitoring stack, some self-hosted tools, backups. That’s it. No team, no hundred microservices, no traffic spikes that need autoscaling.

Kubernetes doesn’t care how small you are, it brings the same complexity either way. And at my scale, I was paying that complexity tax without collecting anything for it.

Where Kubernetes started to annoy me

The overhead never sleeps. etcd, control plane, kubelets, CNI — the cluster burns CPU and RAM just existing. On big iron nobody notices. On homelab hardware, it’s resources my actual services don’t get.

Everything has more layers. A container doesn’t start? In Docker that’s docker logs and 30 seconds. In Kubernetes it’s pod events, then the deployment, then maybe the PVC, then maybe the CNI. The answer is always findable, but the path is longer and at home, I’m the only one walking it.

Upgrades are a project. RKE2 made cluster upgrades about as painless as they get, but “as painless as they get” still means reading release notes, checking API deprecations, and planning an evening. docker compose pull && docker compose up -d is not a project.

The cluster itself became the hobby. At some point I noticed I was spending more time maintaining Kubernetes than building things on it. That’s fine if cluster operations is what you want to learn. It was, for a while. Then it wasn’t.

What I miss (honestly)

GitOps. Flux watching a repo and reconciling the cluster to it is genuinely great, and plain Docker has nothing that elegant built in.

But most of the value survives the migration: my compose files live in Git, deployment is a pull away, and the discipline of “the repo is the truth” stuck with me. I lost the automatic reconciliation, not the workflow.

Declarative everything, health checks, clean rollbacks — Kubernetes does all of it better. I just don’t do any of it often enough to keep a control plane running for it.

What three hosts and a VPS actually need

Docker Compose, one directory per stack, everything in