Karpenter vs. Cluster Autoscaler in EKS: A Comparative Guide
Tags: eks, kubernetes, containers, sre
Published: 2024-02-10 09:02:38

When it comes to managing applications in Kubernetes, it is crucial to balance resource availability without over-provisioning. Autoscaling is the solution to this dilemma, which allows resources to be dynamically adjusted based on the workload requirements. In this regard, let's delve into the intricacies of autoscaling in Kubernetes, with a particular focus on two significant players, namely Cluster Autoscaler and Karpenter, in the context of Amazon EKS.
<img width="100%" style="width:100%" src="https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExajFuNGpnODIxb21oN3AwbjhncGNjaHNkaGp0NnhtbTNna2k4Y3JjaCZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/5QRl3L2KPicz0bGBXW/giphy.gif">

## What is Autoscaling?

Autoscaling refers to the automatic adjustment of computing resources in a server farm, which is usually a cloud environment, to match the current demand. It's similar to having a smart thermostat for your cloud infrastructure that increases the computing power during peak times and reduces it when the demand lessens.
<img width="100%" style="width:100%" src="https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExa29weTY2bmIzb2UweTdxcjV5a2podnZ4NWJ1dXE0NzRmZW9lajF3dCZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/xT8qBit7YomT80d0M8/giphy.gif">

## How it Works in Non-EKS Kubernetes Clusters

In vanilla Kubernetes clusters, autoscaling can happen at different levels:

- **Horizontal Pod Autoscaler (HPA)**: adjusts the number of pods in a deployment or replica set.

![HPA](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pflbvtebkkzssgaud071.png)


- **Vertical Pod Autoscaler (VPA)**: adjusts the CPU and memory reservations for pods.
https://github.com/kubernetes/autoscaler/tree/master/vertical-pod-autoscaler
- **Cluster Autoscaler (CA)**: adjusts the number of nodes in a cluster.


## Cluster Autoscaler: The Kubernetes Classic

Cluster Autoscaler (CA) is like your reliable old hatchback. It's been around since the early days of Kubernetes, ensuring that clusters scale out when needed and scale in when the demand wanes.

### History of Cluster Autoscaler

Developed as part of the Kubernetes project, CA has been the go-to for Kubernetes users needing to implement node-level autoscaling. It monitors for pods that couldn't be scheduled due to resource constraints and adjusts the cluster size accordingly.

### How Cluster Autoscaler Works

Cluster Autoscaler dynamically optimizes the number of nodes in your EKS cluster. It scales up when it detects unscheduled pods due to resource constraints and scales down when nodes have been underutilized for an extended period.

#### Scaling Up with Cluster Autoscaler

Cluster Autoscaler checks for unscheduled pods approximately every 10 seconds. If it finds any, it triggers the provisioning of new EC2 instances with specifications mirroring existing nodes, ensuring pods are scheduled promptly.

#### Scaling Down

It also identifies nodes with low resource utilization and marks them as unnecessary. If these nodes remain unneeded for about 10 minutes, Cluster Autoscaler will terminate them, optimizing resource usage and cost.

#### Issues Faced with Cluster Autoscaler

Despite its functionality, we encountered challenges with Cluster Autoscaler, especially with volume node affinity conflicts. Stateful pods requiring EBS Volume Storage faced scheduling issues due to node termination and subsequent provisioning in different AWS zones.
![Cluster Autoscaler functionality](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rflki10wtmy6cryzfw5d.png)

## Karpenter: The New Kid on the Block

Karpenter is AWS's response to next-generation cluster autoscaling, focusing on optimizing resource utilization and reducing costs through intelligent provisioning.
<img width="100%" style="width:100%" src="https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExcnpldWJ0dXgzMWoyOXFhZTg1ZHE3eHEwZHNjazh3dWl2cWFzaWlnMSZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/zioSZDwyCEbv9jZhUu/giphy.gifhttps://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExajFuNGpnODIxb21oN3AwbjhncGNjaHNkaGp0NnhtbTNna2k4Y3JjaCZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/5QRl3L2KPicz0bGBXW/giphy.gif">

### History of Karpenter

Introduced in late 2021, Karpenter was created to improve the efficiency of resource allocation within Kubernetes. Karpenter emerged as a solution to the limitations of Cluster Autoscaler, offering intelligent node provisioning based on actual workload requirements, significantly optimizing resource utilization and cost.

### How Karpenter Works

Karpenter takes a proactive approach to autoscaling, using custom Kubernetes resources called “provisioners” to define and manage resource provisioning based on application requirements. This method ensures optimal resource utilization, as Karpenter can tailor provision nodes to the workload's specific needs.

### Key Features of Karpenter

- **Elimination of Multiple Autoscaling Groups**: Karpenter is zone-aware, capable of provisioning nodes in required zones without managing numerous autoscaling groups.
- **Intelligent Node Allocation**: It provisions nodes based on precise workload requirements, optimizing costs and system availability.
- **Versatile Node Configuration**: Supports diverse configurations, allowing for an optimal match between instance types and pod requirements.
- **Enhanced Scaling and Scheduling**: Offers fast, efficient scaling based on workload and resource utilization, maintaining optimal performance.

![Karpenter functionality](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/llbswdrtmdyk3f8sy5aj.png)

## Comparing Karpenter to Cluster Autoscaler
**User Friendliness:** Karpenter simplifies setup and integration with Kubernetes, contrasting with the Cluster Autoscaler's potentially complex configuration.

**Optimal Resource Utilization:** Karpenter's ability to provision nodes based on application requirements leads to more efficient use of resources.

**Customization:** Karpenter allows for detailed scaling configurations, such as scaling based on custom metrics.

**Optimized Compute Costs**: Unlike Cluster Autoscaler, Karpenter's efficient bin packing and workload consolidation can reduce computation costs.

**Volume Node Affinity Conflict**: Karpenter's intelligent scheduling resolves the challenge of stateful pods by ensuring node and volume affinity, mitigating unscheduled pod issues.


## Conclusion

While the Cluster Autoscaler provides a reliable, time-tested solution for autoscaling, Karpenter introduces a more dynamic and cost-effective approach when paired with AWS EKS. By understanding the unique features and capabilities of each, you can choose the right tool for your Kubernetes environment, ensuring efficient resource management and cost savings.