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.

Multi-cloudCalculatorA few numbers
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-columns with the requests fields, summed. Requests, not limits, and not usage: the bill follows the request.
  • Observed utilisation of that request. From kubectl top pods or 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.
Start from a scenario

Each one fills every field below with a plausible shape for that workload. Change anything afterwards; nothing is locked.

Monthly cluster cost$13,632.95
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.

Estimate coverage: medium. The EKS node default is a verified EC2 list price and the control plane, load balancer, disk and transfer rates are all verified. It is list price throughout, so a committed or negotiated rate would bring this number down.
Monthly cluster cost
$13,632.95
45 nodes, bound by cpu (45 by CPU, 41 by memory). 7.5% of this bill is not compute, the part a nodes-times-price calculator never shows.
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

Paid for, never used
$8,199.36/mo
Pods request 240 cores and 900 GiB but use about 35.0% of it. Nodes are provisioned against the request, so you pay for the request.
Nodes if requests matched usage
16
Down from 45
Saving from right-sizing requests
$8,361.28/mo
No new tooling; this is editing resource requests in your manifests.
Saving from spot
$0.00/mo
Only for workloads that tolerate a two-minute eviction notice.

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.

Idle at 35.0%, a typical hour
$8,199.36/mo
Everything paid for and not used when the cluster is going about its ordinary day.
Still idle at 60.0%, the peak
$5,045.76/mo
Capacity the busiest hour does not use either, so reclaiming it costs you nothing. This is the safe target.
Burst headroom
$3,153.60/mo
The rest of the gap, which the peak hour does consume. Cutting into this is what produces throttling and evictions when the load arrives.

Allocatable capacity per node

CPU available to your pods
6.79 of 8
After the kubelet reservation and daemonsets.
Memory available to your pods
27.7 of 32 GiB
This is why node count comes out higher than a simple division.
Binding resource
CPU
The other one has slack, a different node shape would fit better.
Watch the EKS version cliff. A cluster left on a Kubernetes version past its standard support window moves to extended support at $0.6 per cluster-hour, six times the standard fee. For your 3 clusters that is $1,314.00 a month instead of $219.00.

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.

shell
# 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 -t

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.
Rates used
  • Amazon EKS control plane, source, read 4 Aug 2026
  • Elastic Load Balancing, source, read 4 Aug 2026
  • Data transfer and NAT gateway, source, read 4 Aug 2026

US East (N. Virginia) list prices, excluding any negotiated or committed-use discount. Your effective rate is lower if you have one.

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.

Every 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.