Karpenter: The Intelligent Autoscaler for EKS
Posted on November 24, 2025 • 6 min read • 1,146 wordsDiscover Karpenter, the modern autoscaler designed for EKS — faster, more flexible, and more cost-efficient than the traditional Cluster Autoscaler.

Karpenter is an open-source autoscaler for Kubernetes, created by AWS.
Its purpose is to automatically adjust the EC2 node capacity of an EKS cluster based on real workload demand.
In short:
But more importantly:
It does this faster, more intelligently, and more efficiently than Kubernetes’ traditional autoscaler (Cluster Autoscaler).
In this article, we explore:
The native Kubernetes Cluster Autoscaler (CA):
Karpenter fixes all of these issues.
No need to manually list dozens of instance types inside an ASG.
Karpenter can decide automatically:
It selects the instance at the moment of need, based on:
Much faster than:
Karpenter creates nodes directly via the EC2 API — extremely fast.
If a node becomes empty (no useful pods), Karpenter:
Result: lower costs and a cleaner cluster
When AWS announces a Spot interruption:
Very helpful during difficult periods… like December (see the article on Spot availability in December).
Karpenter relies on a Custom Resource:
This object defines:
Then Karpenter watches Pending pods and creates the perfect node to host them.
apiVersion: karpenter.sh/v1alpha5
kind: Provisioner
metadata:
name: default
spec:
requirements:
- key: karpenter.sh/capacity-type
operator: In
values: ["spot", "on-demand"]
limits:
resources:
cpu: 500
provider:
subnetSelector:
kubernetes.io/cluster/my-cluster: owned
securityGroupSelector:
kubernetes.io/cluster/my-cluster: owned| Feature | Cluster Autoscaler | Karpenter |
|---|---|---|
| Intelligent instance choice | limited | dynamic |
| Speed | slow | very fast |
| Spot handling | average | excellent |
| ASG dependency | required | none |
| Removal of unused nodes | standard | optimized |
| Simplicity | medium | high |
Karpenter is much faster than Cluster Autoscaler — sometimes too fast.
Symptoms:
Cause:
Karpenter reacts instantly to pods in Pending, even when those pods should not actually be scheduled.
How to avoid:
maxPods and realistic CPU/RAM requestslimits:
resources:
cpu: 200Karpenter removes nodes that appear unused.
Possible issues:
Solutions:
ttlSecondsAfterEmptyKarpenter cannot operate without:
Mandatory tags:
kubernetes.io/cluster/<cluster-name>: owned
karpenter.sh/discovery: <cluster-name>Without these tags, no node can be created.
Examples:
Why?
Karpenter chooses node sizes based on actual pod resource consumption.
If DaemonSets consume too much:
Solutions:
resources.requestssystem-nodes)During high-demand periods (e.g., December), Karpenter may:
This may cause:
Key advice: Never rely on 100% Spot. Always maintain an On-Demand baseline, e.g.:
on-demand: 20–40%Many infrastructures use:
Karpenter ignores ASGs entirely.
It creates instances directly through the EC2 API.
If your architecture relies on:
You will lose these mechanisms when migrating to Karpenter.
Karpenter optimizes for:
…but not necessarily for the lowest cost.
Classic example:
“I requested 2 CPU and 4 GB…
Why did Karpenter launch anm6i.2xlarge?”
Possible reasons:
Solution:
restrict instance families/types in your requirements.
Example:
requirements:
- key: karpenter.sh/capacity-type
operator: In
values: ["spot"]If Spot capacity disappears:
Always:
Example:
Result:
Solution: increase TTLs or disable consolidation at certain hours.
| # | Risk | Explanation | How to Avoid / Fix |
|---|---|---|---|
| 1 | Over-provisioning | Scaling too fast → too many nodes | Limits, consolidation, maxPods |
| 2 | Aggressive scale-in | Nodes removed too soon → ping-pong | Longer TTL, taints, progressive consolidation |
| 3 | VPC / IAM / Tag misconfig | No nodes created | Correct tags, IAM roles, subnet tagging |
| 4 | Heavy DaemonSets | Poor node size selection | Requests, taints, dedicated Provisioners |
| 5 | Spot instability | Shortages → flapping nodes | On-Demand baseline (20–40%), fallback AZs |
| 6 | Loss of ASG features | No hooks, warm pools, EC2 scaling | Architecture adaptation |
| 7 | Oversized instances | Aggressive optimization → unexpected costs | Restrict instance families/types |
| 8 | Too-permissive Provisioners | Spot-only → cluster down | Include On-Demand, restrict types |
| 9 | Unpredictable consolidation | Too many pod relocations | Adjust TTLs, disable consolidation |
Karpenter is an outstanding tool, especially for:
But because it is extremely powerful,
it must be configured carefully.
Well-managed, it is one of the best tools available for EKS today.