Like most complex technologies, Kubernetes could save your business enormous amounts of money by allowing you to build a distributed, highly scalable hosting environment for your applications.
Or Kubernetes could end up significantly increasing expenses. If you design an environment that consumes hosting resources in an inefficient way, you'll end up wasting money on infrastructure resources.
The cost-effectiveness of your Kubernetes strategy depends largely on how you configure your Kubernetes environment and workloads. This article offers perspective on how to minimize Kubernetes spending by discussing five simple strategies for reducing Kubernetes costs.
1. Configure Autoscaling
Taking advantage of Kubernetes autoscaling is one of the easiest and most effective ways to reduce overall Kubernetes costs.
Autoscaling automatically adds or removes nodes from your Kubernetes clusters based on demand. It helps ensure that your workloads always have enough infrastructure resources to do their jobs, but not so much that you end up paying for more infrastructure than you need.
Unfortunately, not all Kubernetes services or distributions support autoscaling. But if yours does, turning it on is a simple way to reduce Kubernetes costs substantially.
2. Run Fewer Clusters
The more Kubernetes clusters you operate, the more you'll pay in Kubernetes hosting costs. The main reason why is that each cluster requires its own control plane, so you'll have to pay for at least one additional node to host the control plane for each additional cluster. If you want high availability (which you probably do for production clusters), you'll need multiple nodes for each control plane.
A simple way to avoid the added expense of running multiple control planes is to create just one cluster to host all of your workloads. Although there are situations where using multiple clusters makes sense (for example, it can improve security by providing rigid isolation between workloads), most workloads can be segmented well enough using namespaces inside a single cluster.
3. Define Resource Limits
Kubernetes allows (but doesn't require) admins to define resource limits. When you do this, containers can't consume more memory or CPU resources than you limit them to.
There's some debate about the wisdom of using Kubernetes limits. Critics argue that limits may end up depriving workloads of resources they require, leading to performance issues and a negative end-user experience. That's a valid point, and it underlines the importance of ensuring that you set reasonable, responsible limits.
From a cost perspective, however, it's hard to argue against limits. Defining limits ensures that your workloads can't suck up more resources — and therefore cause you to pay more — than they should. This is especially true if you've enabled autoscaling, in which you run the risk that your workloads will keep demanding more resources and the autoscaler will keep giving it to them, all while running up your hosting bill.
Limits are also a safeguard against the risk that buggy applications will waste resources due to problems like memory leaks, which could also lead to cost overruns if you have no limits in place to keep things in check.
4. Use Discounted Nodes
If you run Kubernetes in a major public cloud using a managed service like EKS or AKS, you can save substantial amounts of money by choosing to power your nodes with discounted VM instances.
For example, you can use AWS EC2 Spot instances or Reserved Instances with EKS, which could save you as much as about 85% compared with standard node pricing.
The caveat is that discounted nodes don't make sense for all Kubernetes use cases. Since Reserved Instances require an upfront commitment to a fixed amount of usage, they are only a good idea if you know you'll be operating your cluster for a long time. Likewise, Spot instances, which could stop running without warning, are a fit only for workloads that can tolerate periodic disruption.
5. Deploy OpenCost
OpenCost is an open source tool that provides visibility into Kubernetes hosting costs. It works across all major Kubernetes distributions, it's easy to install, and it's a great way to track Kubernetes spending in real time and identify ways to reduce it.
If you haven't installed OpenCost in your clusters, there's little reason not to. Although the OpenCost project remains relatively new and the tooling remains basic, OpenCost is probably the simplest, most straightforward means of figuring out where you're wasting money within Kubernetes environments.
Kubernetes can be expensive, but it doesn't have to be. By taking steps to avoid unnecessary consumption of Kubernetes hosting resources — and to pay as little as possible for the resources you do consume — you can build Kubernetes environments that deliver the performance and user experience you require without breaking the bank.
About the authorChristopher Tozzi is a technology analyst with subject matter expertise in cloud computing, application development, open source software, virtualization, containers and more. He also lectures at a major university in the Albany, New York, area. His book, “For Fun and Profit: A History of the Free and Open Source Software Revolution,” was published by MIT Press.