Loading...


Updated 16 Oct 2026 • 5 mins read

Amazon EKS costs far more than its $73 control-plane fee: nodes, storage, networking, and a 6x extended-support penalty, none of it visible per namespace on the bill. This guide explains EKS pricing, the traps that inflate it, and twelve optimization levers from pod requests to Karpenter, with worked US figures.
Amazon EKS has a famous price and a hidden one. The famous price is $0.10 an hour for the control plane, about $73 a month, which is the number every comparison quotes and the smallest number on the bill. The hidden one is everything underneath: the EC2 nodes the pods run on, the EBS volumes behind every persistent claim, the load balancers and NAT Gateways and public addresses the cluster needs to talk to anything, and a six-fold control-plane penalty that switches on by calendar when a Kubernetes version ages out of support. None of it is labeled EKS on the invoice, and none of it is attributed to the namespaces that consumed it.
This guide covers how EKS pricing really works in 2026, including the extended-support trap and Auto Mode's management fee, why cost is a black box per namespace, and twelve levers that cut EKS spend, ordered by impact and with worked US figures. It applies the general practice in our Kubernetes cost optimization guide to the specific economics of EKS. Rates are from the official EKS pricing page and vary by region.
The short answer: EKS cost optimization starts from the fact that the $73-a-month control plane is the smallest line: the bill is the EC2 nodes, EBS, load balancers, NAT, public IPv4 addresses, and transfer the cluster consumes, plus a control-plane fee that jumps to $438 a month automatically when a Kubernetes version leaves standard support. The twelve levers, in order of impact: right-size pod requests to measured usage; stay inside standard support; replace Cluster Autoscaler with Karpenter (or use EKS Auto Mode for about 12 percent on top of EC2); run interruptible workloads on Spot; move to Graviton; consolidate clusters and remove idle ones; cover the steady node baseline with Savings Plans; keep traffic in-zone and use VPC endpoints; drop unneeded public IPs and load balancers; tier and clean EBS; schedule non-production down; and allocate cost per namespace so every one of these has an owner. Together they commonly cut EKS spend by 30 to 50 percent.
EKS has two kinds of cost: what EKS charges directly, and what the cluster consumes from other AWS services. The first is small and fixed; the second is large, variable, and spread across the bill.
| Line | Rate (US East, 2026) | Monthly, typical | Notes |
|---|---|---|---|
| Control plane, standard support | $0.10 per cluster-hour | $73 per cluster | First 14 months of a Kubernetes version |
| Control plane, extended support | $0.60 per cluster-hour | $438 per cluster | Automatic from month 15; inclusive of the $0.10 |
| EKS Auto Mode management fee | About 12% of EC2 on-demand price, per instance-hour | Scales with fleet | Bundles Karpenter, EBS CSI, load balancer controller, node lifecycle |
| EC2 nodes | Instance rate, e.g. m6i.large $0.096 per hour | Usually 60 to 80% of the bill | On-demand, Spot, or Savings Plan rates apply |
| Fargate pods | Per vCPU-hour and GB-hour | Varies | No nodes to manage; higher unit cost |
| EBS volumes | gp3 about $0.08 per GB-month | Per persistent volume | Billed on provisioned size; orphans persist after pods |
| Load balancers | ALB about $16 per month plus usage | Per Service of type LoadBalancer | Plus 2 to 3 public IPv4 addresses each |
| NAT Gateway | About $33 per month plus $0.045 per GB | Per gateway | Private subnets reaching the internet or AWS APIs |
| Public IPv4 addresses | $0.005 per hour each | $3.65 each | Every public IP, in use or idle |
| Data transfer | Cross-AZ $0.01 per GB each way; internet $0.09 per GB | Often 5 to 15% of the bill | Multi-AZ pods talking across zones |
Two lines deserve emphasis. Extended support is a calendar event, not a decision: a cluster that was $73 a month on a Monday is $438 on the Tuesday its version ages out, and several guides in 2026 flag it as the most common EKS surprise, especially for infrastructure-as-code clusters whose defaults allow extended support rather than forcing an upgrade. And the networking lines, which we cover in our guides to Elastic IP charges and the hidden cloud costs around Kubernetes, are where a cluster that looks cheap on compute quietly is not.
AWS bills what it provisions: nodes, volumes, gateways. The scheduler's decision to place a payment service's pods and a batch job's pods on the same m6i.xlarge happens inside Kubernetes and is never sent to billing. So the invoice can say what the node cost and cannot say which namespace consumed it, and the finance question that every platform team eventually gets, what does the data team's namespace cost, has no answer in any AWS console. Answering it requires joining billing data to per-pod resource usage over time, allocating each node's cost by the share of it each pod reserved or used, and deciding explicitly how idle capacity and system pods are split. That is the method in our guides to container cost visibility and allocating Kubernetes costs, and it is the precondition for most of the levers below, because a namespace with no cost has no owner and no incentive.
Requests reserve node capacity whether or not the pod uses it, and the autoscaler adds nodes to satisfy requests, not usage. Most clusters run requests two to four times actual consumption. Measure p95 and p99 usage per container over several weeks, set requests with headroom above the p99, and use the Vertical Pod Autoscaler in recommendation mode to keep them honest. This is the largest single lever and the one most often skipped.
Upgrade Kubernetes versions on a cadence that never lets a cluster reach month 15. A quarterly upgrade schedule eliminates the $365-a-month-per-cluster penalty entirely; on twenty clusters that is $87,600 a year for doing upgrades you should be doing anyway.
Karpenter reads pending pods and launches exactly the nodes they need from the full EC2 catalog, including Spot and Graviton, in seconds, and consolidates workloads onto fewer nodes as demand falls. Cluster Autoscaler's fixed node groups do none of that. Teams moving to Karpenter commonly see node cost fall 20 to 30 percent from consolidation and instance selection alone.
Auto Mode bundles Karpenter, the EBS CSI driver, the load balancer controller, and managed node lifecycle for a fee of about 12 percent on top of the EC2 price. For a team without the capacity to operate Karpenter it is worth it; for one that already runs it well, it is 12 percent for convenience. Decide per cluster.
Stateless services behind a load balancer, batch and CI workloads, and dev and test namespaces tolerate two-minute interruptions, and Spot cuts their node cost by 60 to 70 percent in practice. Karpenter diversifies across pools and handles replacement automatically; keep a floor of on-demand or committed nodes for what cannot be interrupted. Our comparison of On-Demand, Spot, Reserved, and Savings Plans covers the portfolio.
ARM-based Graviton instances cost about 20 percent less than their Intel equivalents for comparable performance, and most container images already have ARM builds. Let Karpenter prefer m7g and c7g families and watch the per-pod cost fall.
Each cluster costs $73 a month before it runs anything, plus its own system pods, NAT, and load balancers. Development clusters per team, proof-of-concept clusters nobody deleted, and per-environment clusters that could be namespaces all pay that overhead. Audit for clusters with no recent deployments; consolidate where isolation requirements allow.
Once requests are right-sized and the fleet has settled, commit the always-on node baseline to a Compute Savings Plan for up to about 66 percent off. Commit after optimization, not before, or the plan locks in the oversized fleet.
Multi-AZ pods talking to a database or each other across zones pay $0.02 per GB round trip; enable topology-aware routing so services prefer same-zone endpoints. Replace NAT Gateway paths to S3, ECR, and other AWS APIs with VPC endpoints, which removes $0.045 per GB on image pulls and data access that most clusters never notice.
A Service of type LoadBalancer per microservice creates an ALB with two or three public IPv4 addresses each, about $27 a month before traffic. Consolidate behind one ingress controller, and remove public IPs from nodes that sit behind it.
Persistent volumes bill on provisioned size and persist after the pods that used them are gone. Set the StorageClass to gp3, size claims to what is used, and reclaim orphaned volumes on a schedule.
Scale development and test namespaces to zero outside working hours; a cluster running eight hours on weekdays costs a quarter of one running all month. Then allocate the whole cluster, nodes, idle capacity, system overhead, and the networking around it, to namespaces and teams, because the eleven levers above are only applied by teams that can see what their namespace costs. Our guide to finding and eliminating idle Kubernetes resources covers the cleanup; allocation is what makes it recur.
A company runs a production EKS cluster of 30 m6i.xlarge nodes at $0.192 an hour, about $4,200 a month, on Kubernetes 1.33, which entered extended support in July. The control plane is $438. The cluster has 18 ALBs with 50 public addresses, two NAT Gateways processing 8 TB a month, and 4 TB of gp3 volumes, half orphaned. Requests average three times usage. Total: roughly $4,200 nodes, $438 control plane, $290 load balancers, $180 IPv4, $430 NAT, $320 EBS, and about $200 in cross-zone transfer, near $6,060 a month.
Right-sizing requests lets Karpenter consolidate the fleet to 14 nodes: about $1,950. Upgrading to a supported version returns the control plane to $73. Moving the 40 percent of workloads that are stateless to Spot and the rest to Graviton takes the node line to about $1,150. One ingress controller replaces the 18 ALBs, cutting load balancers and IPs to about $35. VPC endpoints for ECR and S3 halve NAT processing to about $215. Reclaiming orphaned volumes halves EBS to $160. Topology-aware routing trims transfer to about $80. The cluster now costs roughly $1,710 a month, a 72 percent reduction, serving the same workloads. The largest single step was the first one, requests, and it was only possible because someone could see that the data namespace was reserving nine times what it used.
The black box is the problem Opslyft opens first. Explorer breaks Kubernetes cost down by pod, service, or namespace, and shows it in the same view as the EC2 nodes, EBS volumes, load balancers, NAT Gateways, and public addresses around the cluster, so a namespace's cost is its share of the nodes it ran on plus the infrastructure it depends on, tracked over time, with a spike visible before the invoice. Canvas puts the cluster's cost on the platform team's screen and the per-team view on each team's, from the same numbers.
Dimension Studio handles the parts of a cluster bill that have no obvious owner: idle node capacity, system pods, the control plane, and the shared networking, which it allocates to teams and products by rule, fixed or proportional, without every workload needing a perfect label, and which is how a Kubernetes-heavy estate reports cost per customer or per feature rather than cost per node. Atlas keeps the inventory, every node, volume, load balancer, and address with an owner and a cost, and its change history ties a cost movement to the change behind it, a node group's size, a version upgrade missed, a new Service of type LoadBalancer. Its recommendations surface the request-versus-usage gap per workload and weigh purpose and criticality, so the payment service and the batch job get different advice at the same utilization.
Monitor detects anomalies at namespace level with a root-cause explanation, a deployment whose replicas tripled, a cluster that crossed into extended support, a NAT Gateway suddenly processing ten times its usual traffic, and routes them to the owning team's Slack channel; budgets at namespace, team, or cluster level hold the result. Tickets makes each finding an assigned item in Jira, ServiceNow, or Asana tracked to a measured saving, and Iris answers which namespaces grew fastest this month and why in plain English. The result is that the twelve levers above stop being a one-time project and become what each team does with its own number.
That is the pattern behind Disprz's result: six platforms including AWS, Azure, GCP, and OCI, 50 to 60 shared services, and many untagged resources, brought into one view with 100 percent automated attribution and 40 hours a month of manual allocation returned to the team.
EKS is cheap to run and expensive to run badly, and the difference is almost entirely in things the invoice does not show: requests reserving capacity nobody uses, versions aging into a six-fold penalty, load balancers and addresses multiplying per service, and traffic crossing zones and NAT for no reason. Right-size requests, stay in support, let Karpenter or Auto Mode place nodes, use Spot and Graviton, consolidate, commit the baseline, fix the networking, clean the storage, schedule non-production down, and allocate every dollar to a namespace with an owner. Done in that order the cluster commonly costs half what it did, and the allocation is what keeps it there. For the general method across any Kubernetes platform, see our Kubernetes cost optimization guide; for the GPU-specific version, allocating GPU costs in shared clusters.
Amazon EKS charges $0.10 per cluster per hour for the control plane, about $73 a month, on a Kubernetes version in standard support, before any nodes run. Once a version leaves standard support (14 months after release) the cluster moves automatically to extended support at $0.60 an hour, about $438 a month. On top of that you pay for the EC2 nodes or Fargate pods, EBS volumes, load balancers, NAT Gateways, public IPv4 addresses, and data transfer the workloads consume, which are almost always the larger part of the bill.
When a cluster's Kubernetes version passes its 14-month standard support window, EKS keeps supporting it for another 12 months at six times the control plane fee, $0.60 an hour instead of $0.10, automatically. Avoid it by upgrading on a cadence that stays inside standard support; a quarterly upgrade schedule prevents the charge entirely. Version 1.33 entered extended support on July 29, 2026, so clusters still on it are paying the higher rate now.
EKS Auto Mode, in which AWS provisions, scales, patches, and upgrades nodes for you, charges the standard cluster fee plus the EC2 instance cost plus a management fee of roughly 12 percent on top of the on-demand instance price, varying by instance type. For an m5.large in US East the fee is about $0.0115 an hour on a $0.096 instance. It trades that surcharge for not running Karpenter, the EBS CSI driver, and node lifecycle yourself.
Because AWS bills the nodes, not the pods. The invoice shows EC2 instance-hours; which namespaces and deployments used them is known only inside the cluster, from the scheduler and usage metrics, and is never sent to billing. Allocating node cost to namespaces requires joining billing data with per-pod resource metrics over time, which is what container cost tooling, and platforms like Opslyft, exist to do.
Over-provisioned pod resource requests. Requests reserve node capacity whether or not the pod uses it, and most clusters run requests two to four times actual usage, which forces the autoscaler to add nodes for capacity nobody consumes. Right-sizing requests to measured usage, with headroom, is usually the largest single EKS saving, ahead of Spot or commitments.
Karpenter, for most new clusters. It provisions right-sized nodes directly from pending pods, choosing instance types and purchase options from the full EC2 catalog, launches in seconds, and consolidates workloads onto fewer nodes as demand falls, none of which Cluster Autoscaler's fixed node groups do. EKS Auto Mode bundles Karpenter for teams that would rather not operate it.
Opslyft's Explorer breaks Kubernetes cost down by pod, service, or namespace in the same view as the EC2, EBS, NAT, and load balancer spend around the cluster, so a namespace's real cost includes the node share it consumed and the infrastructure it depends on. Dimension Studio allocates shared cluster capacity and system overhead to teams and products, Monitor detects namespace-level anomalies with a root cause, and Atlas's recommendations surface the request-versus-usage gap per workload.