The challenge
What the system needed to solve
Turn a collection of home servers into a dependable platform that could survive routine maintenance and a single-node outage without becoming a fragile science project.
The build
Engineering decisions
Designed a three-node k3s topology in which every node participates in the control plane, etcd, and workload scheduling.
Separated public ingress, private service VIPs, stateful storage, and rollback administration so failures stay bounded.
Applied anti-affinity, PodDisruptionBudgets, readiness gates, resource limits, and restricted pod-security defaults across critical workloads.
Kept the original Docker host outside the cluster as a deliberate rollback and administration boundary during migration.
Architecture
How the pieces connect
- 1Git repository
- 2Argo CD reconciliation
- 3Three-node k3s cluster
- 4Replicated services and Longhorn volumes
- 5Caddy public/private edge
Results
What changed
- Routine application updates roll through the cluster without taking public services offline.
- Node-specific dependencies and recovery procedures are documented and tested instead of living as tribal knowledge.
- The platform supports public websites, private applications, observability, AI services, mail, and data services on one consistent operating model.
