[Republished from Turbonomic.com]
Taking every advantage of Kubernetes automation is critical for operating at scale. Kubernetes as a container orchestrator will ensure pods are scheduled, but if you're looking to use Kubernetes to build a platform that facilitates DevOps speed to market and application elasticity, there's a lot more automation work to be done.
With this blog, we'll give you a quick crash course on the essential Kubernetes automation features:
- Deployment Automation
- Scaling Automation
- Horizontal Pod Autoscaler (HPA)
- Cluster Scaling Automation
Kubernetes Deployment Automation
Deployment automation or continuous delivery automates the release and deployment process in building applications. Kubernetes deployment automation is known as continuous delivery within the CI/CD process. This process provides your DevOps specialists the capacity to move your applications, new features, and software between your testing and production environments. This automated process allows reliable deployments to be released across your delivery cycle.
The main benefits of deployment automation are that it eliminates human intervention requirements in application deployments while also allowing your team to release applications and new features instantaneously. Within the deployment process the developer must define the workload, for example deciding the amount of CPU and memory the workload will receive. Unfortunately, not all aspects of the are fully automated; your developer will still need to make decisions around container sizing. To implement a successful deployment automation process, you will need a solution that can size your containers automatically, without the need for your developer to do so.
Check out Microservices in the Real World: How We Used Red Hat’s Operator Framework to Automate Our Application Lifecycle to learn about some of the real-world benefits of automation around deployment.
Kubernetes Scaling Automation
What is Kubernetes autoscaling? Well, it's one of Kubernetes most powerful automation features. Scaling automation is a capability that allows you to scale up or scale down your resources as demand changes. With Kubernetes, you can scale pods and the cluster.
Horizontal Pod Autoscaler (HPA)
The Horizontal Pod Autoscaler (HPA) automation feature within Kubernetes is designed to automatically increase or decrease the number of pods in a deployment in response to your workload's CPU or memory utilization. In addition to automatically scaling the number of pods in your workload based on your actual resource usage, the Horizontal Pod Autoscaler can scale based on custom metrics and external metrics as well. To scale your pods up or down, you must set a threshold for the Horizontal Pod Autoscaler. The HPA will then use the custom performance thresholds to create or destroy pods.
But setting up these custom thresholds is tricky. If you set the thresholds too high or too low, you will either become over-provisioned and therefore spend a considerable amount of money or your environment will work at overcapacity and your end-users will experience service latency.
To truly set precise values for your HPA thresholds that will assure the performance of your applications at minimum/peak demand, you will need a solution that understands what your application needs in terms of resources and can help automate HPA optimization.
Check out An Introduction to Kubernetes HPA: Everything to Know for Achieving Application Elasticity at Scale to learn about the specifics of what HPA does and does not do and if it’s right for you.
Cluster Scaling Automation
Cluster scaling or cluster autoscaler is an automation feature that can quite simply change the number of nodes in a cluster. For example, when a workload reaches its peak and the nodes in the cluster are overloaded, this process can increase the number of nodes on the cluster. Cluster scaling is based on your allocated utilization and will scale up or scale down the number of nodes on a cluster. This form of automation was designed to ensure that every one of your pods has a node on which to run and that no unused nodes are running, but this process does not fulfill that goal.
The Cluster Autoscaler SIG (special interest group) is a Kubernetes project responsible for the Cluster API project. This project was created to ensure that gaps between managing clusters day-to-day and managing a Kubernetes environment long-term were simplified. The Cluster API project does this by ensuring your cluster has the correct number of nodes needed to schedule your pods. Furthermore, the project inspects your environment for underutilized nodes and for pods that fail to schedule. The Cluster API project can do this through declarative Kubernetes APIs that automate cluster creation, configuration, and management.
The cluster autoscaler is a do-it-yourself solution, meaning you must know what your pods and containers exactly need to configure this tool for optimal use; this is a complex process. Some limitations of the cluster autoscaler include overprovisioning due to the solution looking at defined resource requests and limits and not at actual resource utilization. As well as minimal flexibility because mixed instance types must have the same capacity of CPU and memory, and there is no fallback to on-demand instances. This creates performance and availability risks that can cause issues for your end-user. While autoscaler is in the name of this automation feature, it is not fully automated as auto-scaling groups and setting utilization targets must be managed separately by you.
Kubernetes Automation + Turbonomic ARM
Combining all these types of automation makes it very simple to automate scaling for your workloads in your Kubernetes environment. And this might sound like the answer to your prayers, but you still must define policies, thresholds, triggers, and much more. This extra manual work might be manageable on a much smaller scope, but this is no longer plausible when you start to operate at scale. Kubernetes automation is supposed to make people's lives easier, and on a smaller scale, it does, but without Turbonomic in combination with Kubernetes, you cannot operate at scale.
The complex and ever-changing challenges Kubernetes automation brings on stumps the best of teams. To adequately manage Kubernetes at scale without human intervention, you need software that will automatically assure your containerized applications' performance by doling out resources to every layer of the stack automatically. Turbonomic is that software; it determines and automates how your containers should be sized when a pod should be rescheduled (and to which node), when you need to scale up or down a cluster (and by how much), and if you have enough capacity to onboard new services. Our software does all of this without the need for you to define policies, thresholds, triggers, or human interference. With Kubernetes and Turbonomic working hand in hand, you can feel secure in your containerized applications performance.