← All posts
Jan Pruszynski
Running production on a single k3s node
Notes on moving the xentropy stack off managed Kubernetes and onto a lean, self-hosted k3s cluster — and what we'd do differently.
We moved the production stack off managed Kubernetes onto a single self-hosted k3s node. This is a short field report on why, and the sharp edges worth knowing before you try the same.
Why
Managed control planes are convenient until the bill arrives. For a workload that comfortably fits one well-specced box, the economics flip hard. k3s gives you a real, conformant Kubernetes API with a fraction of the overhead.
The sharp edges
A few things that cost us time:
- Storage. No cloud volume provisioner out of the box — you own the
local-pathlifecycle and your own backups. - NetworkPolicy defaults. A default-deny policy will silently break in-cluster service calls until you allow-list them explicitly.
- Ingress + certs. Wire up cert-manager early so Let's Encrypt renewals aren't a manual chore.
# One-liner to see everything that's actually running
kubectl get pods -A --field-selector=status.phase!=Running
Would we do it again
Yes — with eyes open. The savings are real, but "single node" means the node is your blast radius. Snapshots and a tested restore path are not optional.