If your AWS, GCP, or Azure bill is growing faster than your engineering team is comfortable with, you’re not alone. For most Singapore companies running containerized workloads on Kubernetes, cloud overspend isn’t a sign of waste — it’s a structural consequence of how Kubernetes clusters are built and operated by default.
The good news is that the overspend is predictable, well-understood, and highly fixable. The bad news is that fixing it competes with your product roadmap for engineering attention — which is why most companies never actually do it.
This article breaks down the five root causes of Kubernetes cost growth, and what a practical remediation looks like for each.
Cause 1: Clusters are provisioned for peak, not average
Your node pool was sized for the worst case and never adjusted
When you first set up your Kubernetes cluster, you made a call on node size. That call was almost certainly conservative — because the cost of being under-resourced (downtime, slow performance) is more visible than the cost of being over-resourced (a slightly higher cloud bill).
The result is that most clusters run at 10–25% average CPU utilisation across the day, with periodic spikes that justify the provisioned capacity. You’re paying for 100% of the nodes 100% of the time, but actually using a fraction of that capacity on average.
This isn’t an engineering mistake — it’s a rational response to uncertainty at setup time. The problem is that it never gets revisited. The cluster that was sized 18 months ago for anticipated growth is often still running the same node configuration today, even if usage patterns have become much clearer.
Continuous node right-sizing based on actual workload data — automatically scaling down during low-utilisation periods and selecting the most cost-efficient instance types for your actual CPU/memory profile. This is what AI-driven platforms like CAST AI automate at the infrastructure layer.
Industry benchmarks — Kubernetes resource utilisation
Cause 2: Pod resource requests are set too high and never tuned
Kubernetes is reserving more CPU and memory per pod than your application actually uses
Kubernetes schedules pods based on their resource requests — the amount of CPU and memory the pod declares it needs. If those requests are set too high (which they almost always are), Kubernetes can’t pack as many pods onto each node as it theoretically could, forcing you to run more nodes than necessary.
Setting conservative resource requests is a common best practice during development — you’d rather have headroom than deal with OOM kills. But those conservative values, set during early development, rarely get revisited as your application matures and its actual resource consumption becomes predictable.
The effect compounds across every deployment in your cluster. If each of your 50 services has requests set at 2x their actual usage, you effectively need twice as many nodes as your real workload requires.
Workload-level resource profiling — analysing actual CPU and memory consumption per pod over time and automatically adjusting requests and limits to match real usage. This is the “right-sizing” function in FinOps, applied at the pod level rather than the node level.
Cause 3: You’re not using spot or preemptible instances
On-demand instances are running workloads that could run on spot at 60–80% lower cost
AWS Spot Instances, GCP Preemptible VMs, and Azure Spot VMs offer significantly reduced pricing in exchange for the possibility of interruption. For many Kubernetes workloads — particularly stateless services, batch jobs, and non-critical background processing — this interruption risk is entirely manageable.
Most teams avoid spot instances because managing interruptions manually is complex and risky. The concern is valid for production stateful workloads. But with intelligent orchestration that handles fallback to on-demand instances automatically when spot capacity is unavailable, a substantial portion of your cluster can safely run on spot pricing.
For Singapore-based teams running on AWS ap-southeast-1, spot discounts frequently reach 60–80% off on-demand pricing for common instance families.
Automated spot instance orchestration that intelligently mixes spot and on-demand capacity, handles interruptions gracefully, and falls back without downtime. This is one of the highest-ROI optimizations available and requires no application code changes.
Cause 4: No cost visibility means no accountability
Nobody knows the cost of each service, team, or environment
Cloud billing dashboards show you total spend, and maybe a breakdown by service type (EC2, RDS, S3). But they don’t show you which engineering team is responsible for which costs, or which of your product features is the most expensive to run per user.
Without cost visibility at the namespace, service, or team level, there’s no feedback loop that drives efficiency. Engineers make architectural decisions without knowing their cost implications. The FinOps discipline of “showback” — making costs visible to the people who create them — is a prerequisite for sustainable cloud cost management.
Namespace-level and workload-level cost allocation, surfaced in a dashboard that engineering leads and finance can both read. This turns cloud spend from an opaque line item into a manageable, attributable cost.
Cause 5: Cost optimization competes with the product roadmap
Your team knows the problem exists — it just never makes the sprint
This is the most honest cause of all. Cloud cost optimization is unglamorous work. It doesn’t ship features. It doesn’t directly generate revenue. And in a fast-moving engineering team, it consistently loses the prioritisation battle against the next product milestone.
The result is that many Singapore companies have a backlog of known cloud inefficiencies — overprovisioned nodes, unused resources, suboptimal instance types — that sit unaddressed for quarters at a time while the bill quietly compounds.
Automate the optimization so it doesn’t require ongoing engineering effort. The right infrastructure-layer tooling should handle node right-sizing, spot instance management, and bin packing continuously — without touching your application code or requiring sprint capacity.
Want to understand your cloud cost optimization potential?
Book a discovery call with FYNC. We’ll review your current cloud setup and give you an honest view of what’s achievable — and what it means for your P&L.
