Kubernetes Cost Calculator
Derive node count from real pod requests across EKS, GKE and AKS, then add the parts every other calculator omits: control plane, load balancers, per-node disk, egress, and the gap between what pods requested and what they actually use.
| Nodes45 x $0.384/hr | $12,614.40 |
| Control plane3 clusters at $0.1/hr | $219.00 |
| Node disks100 GiB per node — every node carries one, and nobody counts them | $360.00 |
| Load balancers6 Services of type LoadBalancer at $0.0225/hr each | $98.55 |
| Internet egressTiered from $0.09/GB after 100 GB free | $261.00 |
| Cross-AZ pod trafficBoth directions at $0.01/GB — a spread-out service mesh pays this constantly | $80.00 |
| Total | $13,632.95 |
The gap between requested and used
Allocatable capacity per node
What this model assumes
- Node count is derived from pod requests, not entered. Starting from node count hides the only number that matters for optimisation: the gap between what pods request and what they use. Starting from requests surfaces it.
- Allocatable is less than capacity. The kubelet, OS and daemonsets take a share of every node before an application pod is scheduled. The default here is 12.0% plus a daemonset allowance — a planning figure, not a measurement, and real reservations are tiered by node size.
- Node prices are yours, not ours. The EKS default is a verified EC2 rate. GKE and AKS node prices were not verified for this build, so the field is an input rather than a lookup — which also means it works for reserved, committed and negotiated rates.
- Load balancers are charged at the hourly fee only. The capacity-unit component depends on connection rate and bandwidth, which this model does not ask for. Real load balancer cost is therefore somewhat higher than shown.
- Bin-packing is modelled as a simple fit. Real schedulers deal with pod-level constraints, affinities, topology spread and DaemonSets per node, all of which push node count up. This figure is a floor.
Frequently asked questions
How much does a Kubernetes cluster cost?
The control plane is the small, predictable part: $0.10 per cluster-hour on EKS, GKE and AKS Standard, or about $73 a month. Everything else is nodes, load balancers, node disks and network transfer. On a small cluster the non-node charges can exceed the compute, which is why a nodes-times-price estimate is usually well under the real bill.
Is EKS, GKE or AKS cheaper?
The control-plane fee is $0.10 per cluster-hour on all three, so the difference is not there. GKE grants a $74.40 monthly credit that covers roughly one zonal or Autopilot cluster, and AKS has a genuinely free tier with no SLA. Beyond that the cost is node prices, and those are a compute-pricing comparison rather than a Kubernetes one.
Why do I need more nodes than my pod requests suggest?
Because allocatable capacity is less than node capacity. The kubelet, the OS and daemonsets reserve a share of every node before an application pod is scheduled — typically 10-15%, proportionally more on small nodes. Add scheduling headroom for rolling updates and bursts, and a naive division understates node count by a fifth or more.
What is the biggest source of Kubernetes waste?
The gap between what pods request and what they use. Nodes are provisioned against requests, so you pay for the request, not the usage. Typical clusters run at 30-40% actual utilisation of requested capacity, which means over half the compute bill buys nothing. Fixing it means editing resource requests, not buying a tool.
What is EKS extended support and why did my bill jump?
When a Kubernetes version passes the end of its standard support window, EKS moves the cluster to extended support at $0.60 per cluster-hour — six times the standard $0.10. For a three-cluster estate that is roughly $1,314 a month instead of $219. It is the most common unexplained jump on an EKS bill and it is avoided entirely by upgrading on schedule.
Requests drift. So does the gap.
Finitizer tracks requested versus used capacity per namespace and workload over time, attributes cluster cost back to the teams causing it, and flags the version cliffs and idle node groups before they show up on an invoice.