Karpenter vs Cluster Autoscaler: when the migration pays off
How Karpenter differs from Cluster Autoscaler, where the savings actually come from, and a safe migration outline.
For years, Cluster Autoscaler was the default way to scale EKS nodes. Karpenter, now at v1 and maintained as an open-source AWS project, is a better fit for most clusters with mixed workloads. Here's what changes and when it's worth the migration.
How the two differ
| Cluster Autoscaler | Karpenter | |
|---|---|---|
| Scales | Existing node groups (Auto Scaling Groups) | Individual nodes, launched directly |
| Instance choice | Fixed per node group | Chosen per pending pod from the types you allow |
| Consolidation | Scales down empty or underused nodes in a group | Replaces or removes nodes to pack pods onto cheaper capacity |
| Spot | One node group per instance mix | Spot and On-Demand in one NodePool, with fallback |
Where the money comes from
- Right-sized nodes. Karpenter picks an instance that fits the pending pods instead of adding another copy of whatever the node group uses.
- Consolidation. With
consolidationPolicy: WhenEmptyOrUnderutilized, it moves pods off underused nodes and removes them. - Easier Spot. Broad instance diversity is one requirements block, not a dozen node groups.
How much this saves depends almost entirely on how inflated your pod requests are and how uneven your traffic is. I won't give you a percentage without seeing the cluster. Anyone who does is guessing.
When it's worth migrating
- You run several node groups just to get different instance shapes.
- Nodes sit at low utilization most of the day.
- You want Spot but node group sprawl has stopped you.
If you run a small, steady cluster on one node group with good utilization, the gain may not be worth the change.
Migration outline
- Fix pod requests and limits first. Karpenter sizes nodes from requests, so bad requests mean bad nodes.
- Install Karpenter on a small managed node group (or Fargate) that it doesn't manage itself.
- Create an EC2NodeClass and a NodePool, starting with On-Demand only.
- Move one workload at a time with node selectors or taints, then scale the old node group down.
- Turn on consolidation and Spot once things are stable, with PodDisruptionBudgets in place.
See the Spot-ready NodePool example in Spot vs Savings Plans, and the Karpenter docs for the current install steps.
Karpenter migrations are part of the EKS Cost Sprint: review first, then PRs you can merge one at a time.