For about eighteen months I ran a proper Kubernetes cluster at home. Three mini PCs, k3s, MetalLB handing out load-balancer IPs, Traefik in front, Longhorn for storage, the lot. It worked. It also ate more of my evenings than every service running on it combined, and I want to be honest about why.
The seductive argument is that this is the stuff I touch at work, so running it at home keeps me sharp. There is something to that. But a homelab is not production, and the failure modes you hit at home are almost entirely the operational tax of Kubernetes itself, not the interesting distributed-systems problems you were hoping to learn.
Where the time actually went
It was never the apps. Deploying Jellyfin or a Postgres or a little Go service is a few lines of YAML and you are done. The time went into the cluster maintaining itself.
- Longhorn replica rebuilds saturating my modest network whenever a node rebooted.
- cert-manager renewals failing quietly because a webhook pod was wedged.
- A k3s upgrade that drained a node and then could not reschedule a pod because of a storage-class mismatch I'd long forgotten configuring.
- etcd being etcd at three in the afternoon for no reason I ever fully diagnosed.
None of that taught me anything I'll use. It taught me how to nurse a specific version of a specific storage driver through a specific bug, which is knowledge with the shelf life of milk.
What it did get right
Two things genuinely earned their place. Declarative config meant my whole setup lived in a git repo, and rebuilding a node was a known quantity rather than an archaeology project. And rolling deployments with health checks meant I could update a service and have it actually verify itself before taking traffic, which is nicer than docker compose up -d and a hopeful refresh.
So the lesson is not "Kubernetes is bad". It is that the good parts, declarative state and sane rollouts, are available far more cheaply.
What I run now
I collapsed it down to a single beefier box running Docker Compose, with the compose files in git and a small script that pulls, validates, and redeploys. Backups are restic to a remote, on a timer. Storage is just a ZFS pool, snapshotted, no replication ballet. It is less impressive and enormously less work, and when something breaks at home now it is usually something I changed, not the platform having a mood.
If you want to learn Kubernetes, run it. Just be clear with yourself that you are doing it to learn Kubernetes, not because it is the right way to host Jellyfin. For that, it mostly wasn't.