Kubernetes buys declarative scaling, automatic rescheduling, rolling deploys with health gates, and portable workload definitions. Teams with large fleets or spiky multi-tenant load benefit. Outside those, you operate a distributed platform to run three containers.
The cost beyond the compute bill
A learning curve measured in months. YAML sprawl. An annual upgrade treadmill on managed control planes. Debugging shifts from logs to distributed system state. Salary premiums for fluent engineers. None of these appear in the cloud pricing calculator.
Alternatives by stage
- PaaS (Render, Railway, Fly.io): carries small products far with git-push deploys
- ECS Fargate: fits AWS shops wanting containers without cluster surgery
- Cloud Run: serves stateless HTTP with scale-to-zero very well
- One VM with Docker Compose: still runs entire profitable businesses
Migration triggers
More than roughly ten services needing coordinated deploys. Autoscaling beyond simple CPU rules. Multi-region active-active ambitions. Batch and serving workloads sharing infrastructure. Compliance demanding namespace isolation. One trigger alone rarely justifies. Two or three together start to.
Managed, never self-hosted
EKS, GKE, and AKS remove control plane babysitting while node pools, networking, and upgrades remain yours. True self-hosted Kubernetes stays a specialist pursuit most companies should refuse.
Taming complexity
Helm charts from maintained libraries instead of handcrafted YAML. GitOps through ArgoCD or Flux as the only door into the cluster. Namespace-per-team convention. Opinionated internal templates hiding boilerplate from anyone who just wants to ship a service.
Honesty about leaving
Teams migrating back to simpler platforms report relief and cost drops. Workloads hold permanent residency nowhere. Architecture decisions deserve reversal clauses the same way contracts have them.
Enjoyed this content?
I build web products and AI solutions the right way — solid architecture, maintainable code, and real delivery.
Let's talk