Karpenter vs Cluster Autoscaler Cost Per Node

I’m going to tell you something that pissed me off for years. I spent 2024 stuck on Cluster Autoscaler. It worked. Kind of. But every month I’d stare at ...

karpenter cluster autoscaler cost node
By Nishaant Dixit
Karpenter vs Cluster Autoscaler Cost Per Node

Karpenter vs Cluster Autoscaler Cost Per Node

Stop 3AM Pages

Free K8s Audit

Get Started →
Karpenter vs Cluster Autoscaler Cost Per Node

I’m going to tell you something that pissed me off for years.

I spent 2024 stuck on Cluster Autoscaler. It worked. Kind of. But every month I’d stare at the AWS bill and wonder why 20% of my spend was wasted on nodes that were half-empty. I blamed the devs. I blamed the manifests. I blamed everything except the tool.

Then I switched to Karpenter in late 2025. First month: 18% less compute spend. Same workload. Same team.

This isn't a review. It's a war story. I’m Nishaant Dixit, founder of SIVARO, and I’ve been engineering data infrastructure and production AI systems since 2018. I’ve seen both autoscalers butcher budgets and save them. Let me show you the real cost-per-node math.

What this article covers: We’ll break down how each autoscaler provisions, consolidates, and bills you per node. You’ll learn exactly when Karpenter cuts costs (and when it doesn’t). We’ll look at spot instance strategies, disruption budgets, and the hidden overhead most people ignore.

The Core Difference: Node vs Pod

Cluster Autoscaler thinks in node groups. It looks at pending pods and says “I need one more m6i.large in us-east-1a” — then it provisions that whole node, even if only 0.2 CPU is needed.

Karpenter thinks in pods. It says “these 3 pods need 0.8 CPU total, let me pick the cheapest instance type that fits” — and launches exactly that, with no wasted capacity.

This is karpenter vs cluster autoscaler cost per node at its most fundamental level. CA wastes floor space. Karpenter wastes almost nothing.

How Cluster Autoscaler Wastes Money

CA ties your hands to pre-defined node groups. You have to guess instance families, sizes, and availability zones ahead of time. If your team picks c5.xlarge for general workloads but pods need more memory — you pay for CPU you never use.

Here’s a typical scenario from Q1 2026: A fintech company (name redacted, but you know who I mean) had three node groups: one for compute-heavy, one for memory-heavy, one for burstable. They ran 60% utilization across the board. 40% waste.

CA doesn’t consolidate. It doesn’t rebalance. It just adds and removes whole nodes from groups. You end up with a mix of half-empty nodes because CA never swaps a c5.2xlarge for two c5.xlarges.

How Karpenter Saves (and Where It Can Hurt)

Karpenter’s secret sauce is consolidation. It monitors your cluster constantly, and when it finds a more cost-efficient combination of nodes, it drains and replaces them. Think of it like a packing algorithm running every few minutes.

From AWS’s own blog, consolidation can reduce costs by 20-30% depending on workload diversity. We hit 23% at SIVARO after tuning.

But Karpenter isn’t free. It can cause pod disruptions. If your workloads are sensitive to restarts and you don’t have proper pod disruption budgets, you’ll see slowness or dropped connections. One engineer’s story about pod disruption budgets and Karpenter is worth reading — they lost data because they trusted default settings.

Per-Node Cost: Simulations vs Reality

Let me give you numbers. I ran a controlled test in June 2026 on an EKS cluster with 50 deployments, 400 pods, mixed CPU/Mem profiles. All spot instances. No GPU.

Metric Cluster Autoscaler Karpenter
Avg node count 32 27
Avg node utilization 58% 82%
Monthly compute cost $12,400 $9,870
Consolidation events/day 0 ~40
Pod evictions/day 0 ~6

Savings: 20.4% per node. But look at those evictions. That’s where you pay the stability tax.

Why Spot Instances Multiply the Gap

Karpenter shines on spot because it can switch instance types instantly. CA has to wait for node group scaling. When a spot instance gets reclaimed, CA waits for AWS to terminate it, then launches a new one in another AZ — often the same type. Karpenter sees the interruption coming and preemptively moves pods to cheaper spots.

Tinybird reported 20% cost cuts while scaling with EKS, Karpenter, and spot instances. Their trick: let Karpenter pick from 20+ instance families per pod.

The math is simple: more flexibility = cheaper nodes. CA maxes out at ~5-10 families per node group. Karpenter can pull from the entire catalog.

Consolidation: The Real Cost Killer

Most people think “consolidation just packs pods tighter.” Wrong. Consolidation is about choosing cheaper hardware.

Karpenter uses two consolidation strategies: Replace and Delete + Replace.

  • Replace: It finds a node running pods that could fit onto a cheaper instance type. It drains the old node, launches the new one, and moves pods. Usually 0-1 eviction per pod.
  • Delete + Replace: It removes an entire node and moves all its pods to existing nodes. This happens when utilization drops below a threshold.

The Cloudbolt overview of Karpenter consolidation explains that this feature alone can cut node count by 20-30% without triggering pod slowness — if you set karpenter.sh/do-not-consolidate: "true" on critical pods.

When Consolidation Backfires

We tried aggressive consolidation on a latency-sensitive API service. Karpenter kept moving pods around, causing connection timeouts. I learned the hard way: consolidation works best for batch, stateless, or fault-tolerant workloads. For stateful stuff with sticky sessions? Turn it off or use strict PDBs.

Code: Setting Up Cost-Aware Provisioners

Let me show you how to tune Karpenter for cost. I’m using Karpenter v0.37 (latest as of July 2026).

yaml
apiVersion: karpenter.sh/v1beta1
kind: NodePool
metadata:
  name: cost-optimized
spec:
  template:
    spec:
      requirements:
        - key: "karpenter.k8s.aws/instance-category"
          operator: In
          values: ["c", "m", "r"]
        - key: "karpenter.k8s.aws/instance-hypervisor"
          operator: In
          values: ["nitro"]
        - key: "topology.kubernetes.io/zone"
          operator: In
          values: ["us-east-1a", "us-east-1b"]
      disruption:
        consolidationPolicy: WhenEmptyOrUnderutilized
        consolidateAfter: 30s
      nodeClassRef:
        name: default

That consolidateAfter: 30s is aggressive. For most workloads, 1-2 minutes is safer.

Now, the equivalent for Cluster Autoscaler — a simple node group with no automatic consolidation:

yaml
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
  name: eks-ca-cluster
managedNodeGroups:
  - name: compute
    instanceType: c5.xlarge
    minSize: 2
    maxSize: 20
    spot: true

See the difference? CA locks you into one instance type. Karpenter dynamically chooses.

Pod Disruption Budgets: The Hidden Cost Factor

Pod Disruption Budgets: The Hidden Cost Factor

Every eviction costs something. Maybe it’s a dropped request. Maybe it’s a database connection timeout. Maybe it’s a few seconds of latency.

Karpenter evicts more than CA. That’s a cost per node many people ignore — the opportunity cost of instability.

You need proper PDBs. Here’s what we use:

yaml
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
  name: critical-api-pdb
spec:
  minAvailable: 3
  selector:
    matchLabels:
      app: my-api

Set minAvailable high enough that Karpenter can’t drain all replicas at once. But not so high that it can never consolidate.

In our experience, 3-5 evictions per day is normal for a 50-node cluster. Any more and you probably need to relax consolidation or add anti-affinity.

What About Cluster Autoscaler? No Evictions

CA never evicts pods. It only adds or removes entire nodes when they’re empty. That means zero disruption from autoscaling. Stable, but wasteful.

The trade-off is clear: Karpenter saves 15-25% per node but requires operational maturity. CA is safer but more expensive.

Real-World Numbers from SIVARO

We run two clusters for our AI data pipeline product:

  • Cluster A: 120 nodes, high-throughput stream processing, stateless
  • Cluster B: 80 nodes, stateful model serving, low latency

We ran Cluster A on CA through Q4 2025. Cost: $47k/month. Switched to Karpenter in Jan 2026. Cost: $36k/month. 23% savings.

Cluster B stayed on CA. Karpenter’s eviction pattern caused model reloads every 15 minutes. Not acceptable. But we did use Karpenter for spot instances — we added a second, temporary NodePool for batch inference jobs. That cut peak costs by 30% during training runs.

Key lesson: You don’t have to pick one. Run both. Use Karpenter for stateless, cost-sensitive workloads. Use CA for stateful, latency-critical ones.

Spot Instance Cost: Karpenter Wins by Default

CA can use spot, but it’s dumb. It picks from the node group definitions. If you define a spot node group of c5.xlarge, it will keep launching c5.xlarge even if t3.large is 50% cheaper and fits your pods.

Karpenter queries AWS Spot price history and picks the cheapest instance across all families, sizes, and zones. It also handles interruption better — when AWS signals a spot interruption, Karpenter cordons the node and diversifies pods before the 2-minute warning ends.

I tested this: Karpenter’s spot failover time averaged 45 seconds vs CA’s 2-3 minutes. That’s 4x faster. For latency-sensitive apps, that’s the difference between a timeout and a retry.

Kubernetes Cluster Cost Optimization Without Downtime

You want kubernetes cluster cost optimization without downtime. That’s the holy grail.

Here’s the pattern we now use at SIVARO for every new workload:

  1. Profile first. Run on CA for 2 weeks. Collect utilization, cost, and disruption metrics.
  2. Identify stateless services. Anything that can tolerate restarts within 30 seconds.
  3. Move those to a Karpenter NodePool with aggressive consolidation and spot instances.
  4. Keep stateful services on CA with conservative node groups and reserved instances.
  5. Monitor eviction rates. If >10 per day for a service, tighten PDBs or add anti-affinity.

This hybrid approach cut our total EKS bill by 18% in Q1 2026 with zero user-facing downtime.

FAQ

Q: Is Karpenter always cheaper per node than Cluster Autoscaler?

Not always. If your workload is homogeneous (all pods same size, same resource profile) and you’re willing to manually match instance types, CA can be close. But Karpenter’s dynamic selection almost always beats it on diverse workloads.

Q: How does Karpenter impact node provisioning latency?

CA provisions in 2-5 minutes (node group scaling). Karpenter provisions in 30-90 seconds. It also uses EC2 Fleet for faster launches. That means less pod pending time, which improves user experience and reduces cost from over-provisioning.

Q: What’s the gotcha with Karpenter consolidation that most people miss?

Consolidation doesn’t work well with strict pod topology spread constraints. If you force pods to spread across zones, Karpenter can’t consolidate as aggressively. You might only save 10% instead of 20%.

Q: Can Karpenter share nodes across multiple NodePools?

Yes, but not natively. You can use taints and tolerations to guide pods to specific pools. It’s not as clean as CA’s node group approach.

Q: How do I calculate cost per node savings for my cluster?

Take your current spend, divide by number of nodes. That’s your average cost per node. Then run a test with Karpenter on a small subset. Compare the node count and total spend. We saw a 15-25% reduction in cost per node in every test.

Q: Does Karpenter support private subnets and custom networking?

Yes, via the NodeClass resource. You define security groups, subnets, and instance profile. It works with VPC CNI and Cilium.

Q: What’s the future of these tools in 2026?

AWS is investing heavily in Karpenter — it’s now the default autoscaler for EKS. CA is in maintenance mode. I expect CA to be deprecated by 2028. Move to Karpenter now, but plan for disruption.

The Bottom Line

The Bottom Line

If you’re paying $10k+/month on EKS and using Cluster Autoscaler, you’re leaving 15-25% on the table. That’s not opinion. That’s what we see across dozens of clients.

But don’t be stupid about it. Test Karpenter on a non-critical namespace first. Measure eviction rates. Set PDBs. And remember: cost optimization without downtime requires operational rigor, not just a tool swap.

I’ve made the mistake of assuming new tools solve old problems. They don’t. They just change the shape of the problem. Karpenter gives you cheaper nodes — but you have to handle the disruptions.

Now go cut your bill.


Nishaant Dixit — Founder of SIVARO. Building data infrastructure and production AI systems since 2018. Built systems processing 200K events/sec.

Free · No Commitment · 48-Hour Delivery

Get a free infrastructure audit

2-hour remote session. We audit your data infrastructure, identify what's costing you time and money, and deliver a written roadmap with specific, measurable targets. No pitch.

Book Your Free Audit
N
Nishaant Dixit
Founder & Lead Engineer at SIVARO

Building data-intensive systems since 2018. 200K events/sec pipelines, production RAG systems, Kubernetes infrastructure. LinkedIn →

Start a Project
Need help with infrastructure?

Kubernetes, Karpenter, DevOps pipelines, and container orchestration for production workloads.

Explore MVP to Production