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.
- Region
- US East (N. Virginia)
- Currency
- USD
- Rate basis
- Vendor list price plus rates you enter
- Prices verified
- 4 Aug 2026
Before you start: what to have to handShow
- Total CPU and memory requested by your pods.
kubectl get pods --all-namespaces -o custom-columnswith the requests fields, summed. Requests, not limits, and not usage: the bill follows the request. - Observed utilisation of that request. From
kubectl top podsor your metrics stack. A typical figure and a peak figure, because this tool asks for the band rather than a point. - Your node shape and its hourly rate. vCPU, memory and the price you actually pay per node-hour. On GKE and AKS this is the number the whole estimate rests on, because those catalogs are not modelled.
- Disk per node, and the count of Services of type LoadBalancer. Both are billed per node and per service and both are routinely left out of cluster estimates.
- Monthly egress and cross-AZ traffic, in GB. From your bill rather than from a guess. Cross-AZ is charged in both directions and is often larger than internet egress on a spread-out cluster.
Each one fills every field below with a plausible shape for that workload. Change anything afterwards; nothing is locked.
- Nodes (45)
- $12,614.40
- Everything that is not compute
- $1,018.55
- Requested and never used
- $8,199.36/mo
$163,595.40 a year at these inputs.
| 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
What the utilisation band is worth
Nodes are sized against requests, so the bill does not move when usage does. What the band tells you is how the gap between request and use splits: the part the busy hour eventually consumes is real headroom and has to stay, and the part that is idle even at the peak is simply a request nobody revisited.
Allocatable capacity per node
Make the change
Generated from the inputs above. The first two tell you whether the gap this page priced is real in your cluster; the third is the change that closes it.
Requests against live usage, per pod, sorted by the widest gap. Run this before changing anything: the utilisation figure above is your estimate, and this is the measurement. Needs metrics-server.
# Requested vs actually used, per pod, worst offenders first.
# Requires metrics-server. Read-only.
kubectl top pods --all-namespaces --no-headers \
| awk '{print $1, $2, $3, $4}' > /tmp/usage.txt
kubectl get pods --all-namespaces \
-o custom-columns='NS:.metadata.namespace,POD:.metadata.name,CPU_REQ:.spec.containers[*].resources.requests.cpu,MEM_REQ:.spec.containers[*].resources.requests.memory' \
--no-headers > /tmp/requests.txt
join -j 2 <(sort -k2 /tmp/usage.txt) <(sort -k2 /tmp/requests.txt) \
| column -tWhat 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.
Related tools
The questions this one tends to raise next.
NAT Gateway & Data Transfer Calculator
Price the line item that surprises everyone, and find the cheaper shape.
OpenFargate vs EC2 Calculator
Per vCPU Fargate looks dear. Per cluster it often is not.
OpenCloud Run Cost Calculator
Two billing models, and utilisation picks the winner.
OpenEvery tool on this site that touches kubernetes and containers, network and data transfer or compute and utilisation, across every cloud.
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.
