🎉 ScaleOps is excited to announce $58M in Series B funding led by Lightspeed! Bringing our total funding to $80M! 🎉 Read more →

DevOps Goldilocks Kubernetes VPA

Scaling Seamlessly with Cluster Autoscaler

Ben Grady 2 November 2023 7 min read

Amazon Elastic Kubernetes Service (EKS) has become a cornerstone of modern container orchestration, allowing organizations to deploy and manage applications efficiently. One of the critical features that make EKS a powerful tool is its autoscaling capabilities.

Why Autoscaling Matters

Autoscaling in EKS refers to the dynamic adjustment of resources capacity in your Kubernetes cluster to match the changing demands of your applications. EKS offers various autoscaling options, with the Cluster Autoscaler being a central player in this landscape.

Understanding the EKS Cluster Autoscaler

The EKS Cluster Autoscaler works by watching the pods in your cluster and evaluating their resource requests. When a pod can’t be scheduled due to insufficient available resources, the Autoscaler triggers the AWS Auto Scaling group to add more nodes to the node group, ensuring the pod can be scheduled. This is a crucial mechanism to ensure your applications run smoothly, especially during traffic spikes.

The Cluster Autoscaler is your go-to tool when you want to ensure that your Kubernetes cluster has the right number of nodes to handle your application’s workloads efficiently. It automatically adjusts the size of your worker node group based on the resource requirements of your pods.

EKS Cluster Autoscaler in Action

EKS Cluster Autoscaler is specifically designed for Amazon EKS clusters. It leverages AWS Auto Scaling groups to manage the underlying EC2 instances in your EKS node group.

Setting Up the EKS Cluster Autoscaler

To set up the EKS Cluster Autoscaler, you need to configure your node group’s scaling policies and IAM roles properly. While this may sound complex, AWS provides comprehensive documentation to guide you through this process.

Different Kubernetes Autoscaling Methods

In Kubernetes, autoscaling is achieved through various methods, including:

  • Vertical Pod Autoscaler (VPA): VPA adjusts the CPU and memory resource requests of individual pods based on their resource utilization, ensuring optimal resource allocation.
  • Horizontal Pod Autoscaler (HPA): HPA scales the number of pod replicas based on CPU or custom metrics, ensuring that your application can handle changes in traffic load.
  • Cluster Autoscaler: As mentioned earlier, the Cluster Autoscaler adjusts the number of nodes in your worker node group to accommodate the pods’ resource requirements.

Guide to EKS Cluster Autoscaler

To effectively use the EKS Cluster Autoscaler, you need to:

  • Enable and Configure: Ensure that it is properly enabled and configured within your EKS cluster.
  • Define Scaling Policies: Define the scaling policies and thresholds based on your application’s needs. You can configure it to respond precisely to your workload demands.
  • Continuous Monitoring: Continuously monitor and fine-tune the Autoscaler as your application evolves. This ensures that it adapts effectively to changes in demand, further enhancing your cluster’s efficiency.

Using Mixed Instances Policies and Spot Instances

If your workloads can tolerate interruption, you can take advantage of Amazon EC2 Spot Instances to reduce your cluster’s cost. To do this effectively, consider implementing mixed instances policies in your Auto Scaling Group (ASG). Mixed instances policies allow you to combine On-Demand and Spot Instances, as well as specify multiple EC2 instance types. This strategy can help you tap into various Spot capacity pools.

When using mixed instances policies, ensure the instance types in your ASG have similar CPU and memory specifications, as this is crucial for Cluster Autoscaler’s scaling calculations. If the instance types significantly differ, it can lead to unintended results.

Cluster Autoscaler vs. Other Types of Autoscalers

While the Cluster Autoscaler focuses on adjusting the cluster size to accommodate pods’ resource requirements, VPA and HPA primarily deal with resource allocation at the pod level. The choice between them depends on your specific use case. In many scenarios, a combination of these autoscaling methods may be required to optimize resource utilization.

Understanding the Limitations

It’s essential to be aware of the limitations of EKS autoscaling, which may include factors like node termination delays, application readiness, and pod termination behavior. Understanding these limitations helps you design robust and resilient applications.

FAQs

Q: What is autoscaler in EKS?

An autoscaler in EKS is a tool that automatically adjusts the size of your worker node group to match your application’s resource requirements, ensuring optimal performance and cost-efficiency.

Q: How do I turn on auto-scaling on EKS?

To enable auto scaling in EKS, configure the scaling options for your worker node group through the AWS Management Console, specifying minimum and maximum node counts.

Q: Is autoscaling possible in Kubernetes?

Yes, autoscaling is possible in Kubernetes. It offers Horizontal Pod Autoscaling (HPA) and Cluster Autoscaling to dynamically adjust resources based on workload demands.

Q: Why is my EKS cluster autoscaler not scaling up?

There are many reasons that could cause the EKS cluster autoscaler not to scale up. Here are some common reasons:

  • Incorrect node labels: The cluster autoscaler needs to be able to identify nodes that are available for scaling. If the node labels are incorrect, the cluster autoscaler may not be able to find any nodes to scale up.
  • Insufficient resources: The cluster autoscaler may not be able to scale up if there are not enough resources available, such as CPU, memory, or storage.
  • Node group configuration: The node group configuration may be preventing the cluster autoscaler from scaling up. For example, the node group may have a minimum size or maximum size that is preventing the cluster autoscaler from scaling up.
  • Cluster autoscaler configuration: The cluster autoscaler configuration may be preventing the cluster autoscaler from scaling up. For example, the cluster autoscaler may be configured to only scale up when the average CPU utilization across all nodes is above a certain threshold.
  • Cluster autoscaler errors: The cluster autoscaler may be unable to scale up due to errors. For example, the cluster autoscaler may be unable to create new nodes or the cluster autoscaler may be unable to update the node group configuration.

Q: Why is my EKS cluster autoscaler not scaling down?

There are many reasons that could cause the EKS cluster autoscaler not to scale down nodes. Here are some common reasons:

  • Pod affinity and anti-affinity: The cluster autoscaler may not be able to scale down if there are pods that have affinity or anti-affinity requirements that cannot be met on the remaining nodes.
  • Node scale-down disable: The cluster autoscaler may not be able to scale down nodes if they have scale-down-disable annotation set to true.
  • Pod do-not-evict: The cluster autoscaler may not be able to scale down nodes if they are running pods with the safe-to-evict annotation set to false.
  • Cluster autoscaler configuration: The cluster autoscaler configuration may be preventing the cluster autoscaler from scaling down. For example, the cluster autoscaler may be configured to only scale down when the average CPU utilization across all nodes is below a certain threshold.
  • Cluster autoscaler errors: The cluster autoscaler may be unable to scale down due to errors. For example, the cluster autoscaler may be unable to delete nodes or the cluster autoscaler may be unable to update the node group configuration.

Q: How do I know if my cluster autoscaler is working?

Monitor node group sizes, check CloudWatch metrics like “DesiredCapacity,” and review logs and events for scaling activity to ensure the cluster autoscaler is functioning correctly.

Q: How do I turn on auto scaling in EKS cluster?

Enable auto scaling for your EKS cluster by configuring scaling options for your worker node group in the AWS Management Console, specifying desired node counts.

Conclusion

EKS autoscaling, particularly the Cluster Autoscaler, empowers you to effortlessly handle dynamic workloads in your Kubernetes cluster on AWS. By carefully considering when to use autoscaling, understanding the available methods, and effectively configuring the EKS Cluster Autoscaler, you can ensure that your applications remain performant and cost-effective while scaling seamlessly with demand fluctuations.

Taking your EKS Autoscaling to the next level

Effective EKS autoscaling is crucial for ensuring optimal performance and cost-efficiency in your Kubernetes cluster. If you’re looking to take the complexity out of managing your autoscaling policies and making the most of EKS features, ScaleOps Platform provides the perfect solution. While the Cluster Autoscaler is a powerful tool on its own, its effectiveness reaches new heights when paired with the right resource management solution. ScaleOps introduces you to a comprehensive resource management platform that continuously optimizes workloads both vertically and horizontally, complementing the Cluster Autoscaler’s capabilities seamlessly. To learn more about how ScaleOps can revolutionize your Kubernetes resource management, check out  ScaleOps.

Related Articles

Amazon EKS Auto Mode: What It Is and How to Optimize Kubernetes Clusters

Amazon EKS Auto Mode: What It Is and How to Optimize Kubernetes Clusters

Amazon recently introduced EKS Auto Mode, a feature designed to simplify Kubernetes cluster management. This new feature automates many operational tasks, such as managing cluster infrastructure, provisioning nodes, and optimizing costs. It offers a streamlined experience for developers, allowing them to focus on deploying and running applications without the complexities of cluster management.

Pod Disruption Budget: Benefits, Example & Best Practices

Pod Disruption Budget: Benefits, Example & Best Practices

In Kubernetes, the availability during planned and unplanned disruptions is a critical necessity for systems that require high uptime. Pod Disruption Budgets (PDBs) allow for the management of pod availability during disruptions. With PDBs, one can limit how many pods of an application could be disrupted within a window of time, hence keeping vital services running during node upgrades, scaling, or failure. In this article, we discuss the main components of PDBs, their creation, use, and benefits, along with the best practices for improving them for high availability at the very end.

ScaleOps Pod Placement – Optimizing Unevictable Workloads

ScaleOps Pod Placement – Optimizing Unevictable Workloads

When managing large-scale Kubernetes clusters, efficient resource utilization is key to maintaining application performance while controlling costs. But certain workloads, deemed “unevictable,” can hinder this balance. These pods—restricted by Pod Disruption Budgets (PDBs), safe-to-evict annotations, or their role in core Kubernetes operations—are anchored to nodes, preventing the autoscaler from adjusting resources effectively. The result? Underutilized nodes that drive up costs and compromise scalability. In this blog post, we dive into how unevictable workloads challenge Kubernetes autoscaling and how ScaleOps’ optimized pod placement capabilities bring new efficiency to clusters through intelligent automation.

Schedule your demo