Logiciel Contact Us
Success Stories Tech News Contact Us

Karpenter.

Karpenter is an open source Kubernetes autoscaler that provisions and removes compute nodes automatically based on what pending workloads actually need to run.

01 / 09 Karpenter

Definition

Karpenter is an open source node autoscaler for Kubernetes that automatically provisions new compute capacity when pods cannot be scheduled due to insufficient resources, and just as automatically removes capacity that is no longer needed, without an operator having to pre-define rigid groups of machine types in advance. It was originally built by AWS and later became a graduated project under the Cloud Native Computing Foundation, and it now works with other cloud providers too, not just the one that created it. That broader compatibility has made it a common default recommendation well beyond the AWS-only tool it started out as.

It exists because the tool most teams used before it, the Kubernetes Cluster Autoscaler, works in terms of predefined node groups, fixed pools of a specific instance type that scale up and down as a block, which forces an operator to guess ahead of time what mix of instance sizes and types they will need. That guesswork often led to wasted capacity, paying for larger instances than a given workload actually needed because that was the size of node group available, or slow scaling because the right node group had to grow before a pod could actually run.

What separates Karpenter from that older model is that it does not require predefined node groups at all. Instead, it looks directly at what a pending pod actually needs, in terms of CPU, memory, and any other constraints, and picks or provisions the most efficient instance type and size to satisfy that specific requirement in that specific moment, rather than fitting the workload into whatever fixed-size groups happen to already exist. This lets it pack workloads more efficiently and react faster than the older group-based approach generally could. That real-time matching is the single biggest behavioral difference between Karpenter and everything that came before it.

By 2026, Karpenter has become a fairly standard choice for teams running Kubernetes on AWS specifically, given its origins there and the deep integration with AWS-specific features like spot instance handling, and it has picked up real usage on other cloud providers too as the project matured and its provider support broadened. It is not the only node autoscaler in serious use, but it is one of the most commonly recommended for greenfield Kubernetes setups on AWS in particular. Teams evaluating it on another provider should check the current state of that support directly rather than assuming parity with the AWS experience.

This page covers how Karpenter actually decides what capacity to provision, how it compares to the traditional Cluster Autoscaler, what separates node-level autoscaling from pod-level autoscaling, and where it is worth adopting versus where a simpler setup will do. The idea worth keeping is that Karpenter's core trick is matching compute capacity to actual, specific pod requirements in real time, rather than to pre-guessed buckets of machine sizes, and that flexibility is most valuable when your workloads are varied enough that fixed node groups were genuinely a bad fit. Getting that balance right is less about the tool itself and more about how well a team understands its own workloads.

Key Takeaways

  • Karpenter is an open source Kubernetes node autoscaler that provisions and removes compute capacity automatically based on actual pending pod requirements.
  • It exists because the older Cluster Autoscaler relies on predefined node groups, which forces guesswork about instance types ahead of time.
  • Karpenter picks the most efficient instance type for a specific pending pod directly, rather than fitting workloads into fixed-size groups.
  • By 2026 it is a common choice for Kubernetes on AWS specifically, though its support for other cloud providers has grown too.
  • Its core value is matching capacity to real, specific workload needs in real time instead of pre-guessed buckets of machine sizes.

How Karpenter Works

Karpenter watches the Kubernetes scheduler for pods that cannot be placed anywhere because no existing node has enough available capacity to run them. Rather than waiting on a fixed pool of machines to have room, it evaluates what that specific unschedulable pod actually needs, CPU, memory, architecture, any node selectors or tolerations it declares, and decides what kind of new node would satisfy that need. This targeted evaluation is what lets Karpenter avoid the guesswork baked into a system built around fixed node group sizes.

It then reaches out to the cloud provider's API directly to provision exactly that kind of node, often picking from a wide range of possible instance types and sizes rather than a short, pre-approved list, and aims to select something that is efficient for the workload rather than oversized just because that was the only option available. Within a short window, usually well under a minute in a well-configured setup, the new node joins the cluster and the pending pod gets scheduled onto it.

On the other end, Karpenter also watches for nodes that have become underutilized or empty and works to consolidate workloads onto fewer, better-utilized nodes, then terminates the nodes that are no longer needed. This consolidation step is a big part of what actually saves money in practice, since a cluster that only ever scales up without also cleaning up idle capacity slowly and quietly accumulates waste. Skipping this step would let a cluster slowly fill up with underused nodes that quietly inflate the compute bill for no real benefit.

Karpenter also has meaningful support for using cheaper spot instances automatically for workloads that can tolerate interruption, handling the mechanics of detecting an incoming spot reclamation notice and rescheduling affected pods elsewhere before the instance actually disappears, which removes a lot of the manual complexity teams previously had to build themselves if they wanted to use spot capacity reliably in Kubernetes. Building this handling from scratch used to require real engineering effort, which is part of why spot adoption in Kubernetes was rarer before tools like this existed.

Karpenter Compared to the Cluster Autoscaler

The Kubernetes Cluster Autoscaler, the tool most teams used before Karpenter existed, works by scaling predefined groups of nodes, commonly backed by something like an AWS Auto Scaling Group, up or down based on demand. An operator has to decide ahead of time what instance types go into each group, and the autoscaler's job is simply deciding how many nodes within those existing groups should be running at any given time. That structure made sense when the tool was first built, since fixed groups are simpler to reason about even if they are less efficient in practice.

That model works fine when your workloads are fairly uniform and you can accurately predict what instance types you will need. It becomes a real limitation when workloads vary a lot in their resource needs, since you either end up maintaining many separate node groups to cover different shapes of workload, which is genuinely tedious to manage, or you accept inefficiency by running workloads on node groups that do not fit them particularly well. Either path adds ongoing operational cost that a more dynamic approach was specifically designed to avoid.

Karpenter removes the node group concept from the equation almost entirely, deciding on the fly what instance type best fits a given pending pod's actual needs rather than picking from a pre-approved list of group shapes. This generally produces better bin-packing and lower waste, since the fleet is not constrained to a handful of fixed shapes decided in advance, but it also means less predictability about exactly what instance types will show up in your cluster on any given day, which is a real tradeoff for teams who value that kind of predictability for cost forecasting or compliance reasons.

In practice, migrating from the Cluster Autoscaler to Karpenter is common among teams that have outgrown their initial node group setup and are tired of managing an ever-growing list of groups to cover an ever-widening range of workload shapes, while teams with genuinely simple, uniform workloads sometimes find the Cluster Autoscaler's more predictable, simpler model perfectly adequate for what they actually need. The decision usually comes down to whether the team values Karpenter's efficiency more than the Cluster Autoscaler's simpler, more predictable mental model.

What Makes Karpenter Different From the Horizontal Pod Autoscaler

The Horizontal Pod Autoscaler, usually shortened to HPA, decides how many copies, or replicas, of a given application's pods should be running, based on metrics like CPU utilization or custom application metrics, scaling the pod count up under load and back down when demand drops. Karpenter operates at a different layer entirely: it decides how many and what kind of nodes, the actual underlying machines, exist to run those pods in the first place. Confusing the two roles is a common early mistake for teams new to Kubernetes autoscaling.

The two work together rather than against each other in a well-configured cluster. When HPA decides more replicas of a pod are needed and there is not enough room on existing nodes to schedule them, those new pods become unschedulable, and that is precisely the signal Karpenter is watching for to go provision more node capacity so those pods actually have somewhere to run. This handoff between the two systems happens automatically once both are configured correctly, with no manual coordination required from an operator.

Without something like Karpenter or the Cluster Autoscaler in the picture, HPA can decide to scale a pod up and then simply fail to find room for the new replicas if the existing nodes are already full, leaving pods stuck in a pending state indefinitely. Without HPA, Karpenter has nothing telling it demand has increased in the first place, since Karpenter reacts to pods that already exist and need scheduling, it does not decide on its own that an application needs more replicas.

This layered relationship, HPA deciding pod counts based on application demand, Karpenter deciding node capacity based on what pods actually need to run, is the normal, expected setup in most Kubernetes clusters doing any kind of serious autoscaling, and understanding that they solve different halves of the same overall problem avoids the common confusion of expecting one to do the other's job. Teams that set up only one of the two often find scaling working halfway, which is usually a sign the other layer is missing rather than misconfigured.

Where Karpenter Fits and Where It Does Not

Karpenter fits well for clusters with genuinely variable or unpredictable workload shapes, where different pods need meaningfully different combinations of CPU, memory, and architecture, and maintaining a growing list of predefined node groups to cover all of that variety has become a real operational burden rather than a hypothetical concern. Retail and media companies with seasonal or event-driven spikes are common examples where this variability shows up most clearly. A team maintaining a long list of node groups to cover that same variety often finds the list itself becoming a maintenance burden worth escaping.

It also fits well for teams that want to use spot instances aggressively to control cost, since Karpenter's built-in handling of spot interruption and rescheduling removes a substantial amount of the custom engineering effort teams previously had to build themselves to use spot capacity reliably alongside on-demand fallback. That reliability difference is often what convinces cost-conscious teams to adopt spot capacity at all, having avoided it previously due to the operational burden.

It fits poorly for teams running on a cloud provider where Karpenter's support is thin or immature, since its original and deepest integration is with AWS, and the experience elsewhere, while improving, has not always matched that depth, at least as of the current state of the ecosystem. It also fits poorly for teams that specifically need tight, predictable control over exactly which instance types appear in their cluster, for cost forecasting or compliance reasons that require knowing in advance precisely what will be provisioned.

It also fits poorly, or at least is unnecessary overhead, for small clusters running a narrow, stable range of workload types, where a handful of well-chosen node groups managed by the simpler Cluster Autoscaler covers the actual need just fine, and adopting Karpenter mainly adds a new tool to learn and operate without solving a problem that was actually causing pain. In that setting, the learning curve of a new tool costs more than the modest efficiency gains it would actually deliver.

How to Use Karpenter Well

Set sensible constraints on what instance types and sizes Karpenter is allowed to provision, rather than leaving it fully unconstrained, since an unconstrained setup can occasionally pick an instance type that technically fits the workload but is a poor choice for cost or performance reasons a human would have avoided at a glance. Reviewing those constraints periodically as new instance types become available is also worth doing rather than setting them once and forgetting them.

Use consolidation deliberately and understand what it is doing, since Karpenter's default behavior of moving workloads to fewer, better-packed nodes and terminating idle ones can occasionally cause disruption for workloads that are sensitive to being moved, and tuning how aggressively consolidation runs is worth doing thoughtfully rather than leaving it at whatever the default happens to be. Testing consolidation behavior in a staging environment before relying on it in production helps catch surprises before they affect real users.

Combine it deliberately with the Horizontal Pod Autoscaler rather than assuming Karpenter alone handles all of scaling, since Karpenter only reacts to pods that already exist and need somewhere to run. Without HPA scaling pod counts based on actual demand, Karpenter has no growing pod count to react to in the first place, and the two need to be configured together to get real end to end autoscaling. Treating the two as a single coordinated system, rather than two unrelated tools, is what actually delivers reliable end-to-end autoscaling.

Set appropriate resource requests and limits on your workloads, since Karpenter makes its provisioning decisions based on what pods declare they need, and workloads with inaccurate or missing resource requests will cause Karpenter to make decisions based on bad information, either over-provisioning expensive capacity or under-provisioning and leaving pods struggling for resources on nodes that looked adequate on paper. Reviewing these values periodically as actual usage data comes in keeps the whole system's decisions grounded in reality rather than initial guesses.

Monitor actual cost and utilization after adopting it, rather than assuming efficiency automatically improved just because a smarter autoscaler is now in place. Karpenter's efficient bin-packing depends heavily on how well workloads declared their actual resource needs and how the constraints were configured, and it is worth checking the real numbers rather than taking the improvement on faith. A quarterly review of these numbers is enough for most teams to catch drift before it becomes a real budget problem.

Best Practices

  • Set sensible constraints on allowed instance types and sizes rather than leaving Karpenter's provisioning fully unconstrained.
  • Understand and tune consolidation behavior deliberately, since aggressive node consolidation can disrupt workloads sensitive to being moved.
  • Run Karpenter alongside the Horizontal Pod Autoscaler rather than expecting either one to handle the full scaling picture alone.
  • Set accurate resource requests and limits on workloads, since Karpenter's provisioning decisions depend directly on what pods declare they need.
  • Track real cost and utilization after adoption rather than assuming efficiency improved automatically just from switching tools.

Common Misconceptions

  • Karpenter is not a replacement for the Horizontal Pod Autoscaler; it manages node capacity, not how many pod replicas an application runs.
  • Karpenter does not require predefined node groups the way the Cluster Autoscaler does; it selects instance types dynamically based on pending pod needs.
  • Karpenter is not AWS-exclusive anymore, though its deepest and most mature integration remains with AWS specifically.
  • Using Karpenter does not automatically guarantee cost savings; poor resource requests on workloads can still lead it to provision inefficiently.
  • Karpenter is not something every Kubernetes cluster needs; small, stable workloads are often served fine by simpler, group-based autoscaling.
Keep exploring

Related terms.

Questions

Frequently asked.

What is Karpenter?

Karpenter is an open source Kubernetes node autoscaler that automatically provisions new compute capacity when pods cannot be scheduled and removes capacity that is no longer needed, choosing instance types dynamically rather than relying on predefined node groups. It aims to match compute capacity to actual workload needs more precisely than older, group-based autoscaling approaches.

Who created Karpenter?

Karpenter was originally created by AWS and has since become a graduated project under the Cloud Native Computing Foundation, with growing support for cloud providers beyond AWS as the project has matured. That CNCF status means its ongoing development is no longer controlled by a single company, which has helped broaden both its contributor base and its provider support.

How is Karpenter different from the Cluster Autoscaler?

The Cluster Autoscaler scales predefined groups of nodes that an operator configures ahead of time. Karpenter decides instance type and size dynamically based on what a specific pending pod actually needs, which generally improves efficiency but reduces predictability about exact instance types.

Does Karpenter replace the Horizontal Pod Autoscaler?

No. They operate at different layers and typically work together. The Horizontal Pod Autoscaler decides how many pod replicas an application needs, while Karpenter provisions the node capacity required to actually run those pods. Running both together, rather than expecting one to substitute for the other, is the normal and recommended setup for a Kubernetes cluster doing serious autoscaling.

Can Karpenter use spot instances?

Yes. Karpenter has built-in support for provisioning spot instances for workloads that can tolerate interruption, and it handles detecting reclamation notices and rescheduling affected pods before the instance disappears. This built-in handling removes much of the custom engineering work teams previously needed to use spot capacity reliably in a Kubernetes cluster.

Does Karpenter work outside of AWS?

Support has expanded to other cloud providers over time, but AWS remains where Karpenter originated and where its integration is deepest and most mature as of now. Teams considering it on another provider should verify current feature parity directly rather than assuming it matches the AWS experience exactly.

Is Karpenter difficult to set up?

It requires some upfront configuration, defining what instance types and constraints are allowed, and understanding consolidation behavior, but it generally requires less ongoing maintenance than managing a growing list of node groups by hand over time. Teams already comfortable with Kubernetes generally find the learning curve manageable within their first few deployments.

Does Karpenter guarantee lower cloud costs?

Not automatically. Its efficiency depends on workloads declaring accurate resource requests and on sensible provisioning constraints. Poorly configured workloads or an unconstrained setup can undercut the cost benefits it is capable of providing. Treating it as a tool that rewards good workload configuration, rather than a magic switch, sets more realistic expectations from the start.

Next step

Put Karpenter into practice.

If you're building this into a real product - governed, secured, and scaled - we can help. Talk to the engineers who ship it.

Book an Intro Call