How We Keep Kubernetes Costs Under ₹50K/Month for Early-Stage SaaS
Kubernetes is famous for being expensive. It doesn't have to be. With sensible choices, an early-stage SaaS can run production K8s under ₹50,000 per month while still getting all the operational benefits. Here's how.
Key takeaways
- Use a managed control plane (EKS, GKE, AKS), your control plane should be ~$70/mo, not $700.
- Node pool: 2-4 small (4 vCPU) Spot instances + 1 small on-demand for stateful workloads.
- Cluster autoscaler + HPA configured properly.
- Aggressive cost monitoring from day one.
- Don't over-architect, most early-stage SaaS doesn't need service mesh, custom ingress, or complex multi-region.
Why this matters
A poorly-sized K8s cluster easily costs ₹3-5 lakh/month. A well-sized one costs ₹30-50K. The difference isn't expertise level, it's a few specific choices.
The stack
Managed control plane
EKS, GKE, or AKS, pick whichever matches your cloud. They cost about $70-80/month for the control plane itself. Don't self-host the control plane in early-stage.
Node pool
For most early-stage SaaS:
- 3 × Spot instances (4 vCPU, 16GB RAM each), main workloads
- 1 × on-demand instance (4 vCPU, 16GB RAM), stateful workloads that can't tolerate Spot interruption
This is enough to run a typical mid-complexity SaaS. Total node cost on AWS Spot in Mumbai region: ~₹18-25K/month.
Storage
EBS volumes for stateful pods. Provision storage thoughtfully, under-provisioned storage kills you with IOPS bills.
Networking
Stick with the cloud's default load balancer + NodePort/Ingress patterns. Skip service mesh until you have a reason.
Autoscaling
- Cluster Autoscaler to add/remove nodes based on pod scheduling pressure
- HPA to scale pod replicas based on CPU/memory
- VPA in recommend-only mode (so you size correctly)
Configure thoughtfully, bad HPA = thrashing replicas = bad UX.
Spot strategy
Spot instances can disappear with 2-minute notice. Mitigate via:
- Multiple instance types in the pool (better availability)
- Graceful pod termination
- StatefulSets stay on on-demand
- Sentinel/observability stays on on-demand
Cost monitoring
- AWS Cost Explorer with tagging (every K8s namespace tagged for cost attribution)
- Kubecost (free tier) for per-namespace cost visibility
- Weekly review of biggest line items
What we recommend
Don't pre-build for scale you don't have. Start with this stack; resize when load forces you. Many SaaS at 50K-500K monthly visitors fit comfortably in this footprint.
Common pitfalls
Over-provisioning "to be safe." Costs 2-3× actual need.
Skipping observability. When something breaks, you'll wish you had it.
Service mesh too early. Istio/Linkerd are great but add complexity.
Multi-region too early. Single-region with good backups serves most early-stage just fine.
FAQs
What about Cloud Run / Fargate? Lower ops burden, sometimes more expensive at scale, sometimes less. Worth considering if you don't need K8s-specific features.
Karpenter vs Cluster Autoscaler? Karpenter is faster and more flexible, worth the switch once familiar.
ARM nodes? Yes, Graviton2/3 saves ~20% at near-equivalent performance.
