Kubernetes is hard, there’s no arguing that. The good news, however, is that a little knowledge and guidance can go a long way, especially if you already know your way around Linux and shell scripts like Bash. Before we get into the different ways to automate Kubernetes cluster management, let’s take a look at what exactly that’s supposed to cover. According to the official documentation, this involves automating cluster creation and configuration, upgrading master and worker nodes, maintenance, and upgrades.
There are several tools and ready-made solutions we can use to that effect. For cluster creation and configuration, in particular, there is no dearth of solutions. There’s Kubeadm, Kubespray, Kops, Conjure-up, Kubo, Kube-AWS, and a number more. Since what we’re looking for here is automation, however, it’s also worth looking at platforms like Ansible that in addition to being able to automate Kubernetes cluster management can be used throughout the development lifecycle, as well as to create custom tools. Ansible is usually used alongside Terraform, a declarative infrastructure-as-code tool used to automate the process of infrastructure deployment.
1. Kubernetes operations
While most lists would probably begin with Kubeadm since it’s a pretty powerful tool for deployment, configuration, and management, it’s mostly associated with manual setups. That’s why we’re going to skip it and move on to some more “automated” options like Kops. Advertised as being the “easiest way to get a production-grade cluster up and running,” Kops features automated cluster creation and configuration, as well as support for cloud-native features, automatic updates, and upgrades. Kops also supports heterogeneous clusters, public and private topologies, single or multiple master clusters, and rolling cluster updates
One big advantage to Kops is that if you’re already familiar with kubectl, it’s pretty easy to automate the majority of operational tasks like scaling up nodes or scaling up the cluster. While it can only be used to automate deployments on AWS and GCE, OpenStack, and VMware vSphere as of now, the ability to automate the entire cluster lifecycle from infrastructure provisioning to cluster deletion makes it an interesting proposition. That and the fact that it works really great with AWS. Other useful features include the ability to generate Terraform configurations, as well as support for eight different CNI networking providers like Weave Net, Calico, Canal, and Flannel.
2. Automation by Playbook
Another popular solution to automate Kubernetes cluster management is Kubespray, which is built around Ansible’s provisioning and deployment capabilities. It’s a highly customizable composition of Ansible playbooks that abstracts and automates tasks like creating clusters, composing inventory files, and planning cluster deployment. It also provides additional playbooks to automatically scale, update, and upgrade clusters. Kubespray ships with a library of provisioning resources for several different cloud platforms and can be used in the cloud or on-premises. It also lets you run the same cluster in multiple datacenters making it ideal for hybrid environments that often consist of more than one public cloud in addition to on-premises facilities.
While one of the main drawbacks with Kubespray is the inability to self-provision or orchestrate like Kops, the fact that it does offer support for Terraform on most public clouds resolves this issue to some extent. As we mentioned earlier, Terraform is a declarative infrastructure deployment platform that automates deployment to multiple platforms, so while some might look at this as a drawback, others just see even more flexibility. Kubespray also provides a way to verify deployments with the use of a tool called NetChecker. Kubespray is available on AWS, GCE, Azure, OpenStack, Oracle Cloud Infrastructure, and bare metal and supports almost all Linux distributions as well as six different CNI networking providers.
3. Automation by Spellbook
From the publishers of Ubuntu comes our next offering, which aims to bring a bit of magic to automating Kubernetes cluster management. Conjure-up is based on Canonical’s Juju framework and allows users to “summon” a big-software stack in the form of a “spell.” Juju is an open-source, applications, and service modeling tool that works by wrapping your infrastructure into a single entity or a model. Models can include several components including applications, storage volumes, network spaces more. It then uses “charms,’’ which are a collection of scripts containing all the information necessary to deploy, configure, resize, upgrade, and maintain clusters. Charms are usually made up of YAML files and “hooks,’’ which are naming conventions.
Similarly, Conjure-up can be run automatically with the help of a “conjurefile” that lets you predefine all the specific requirements of a particular software stack or spell before it’s deployed or summoned. Conjurefiles are also useful when a spell includes steps that need to be followed post-deployment, in which case those steps can be defined in the conjurefile. The idea here is to install complex pieces of software automatically to get straight to using them instead of messing around with settings and configurations. Conjure-up also features native integration with AWS and a long list of conjure-up spells that are ready and available for use.
4. Automation by AWS
The best way to automate cluster management is obviously to have someone else do it for you and AWS does a really good job of that. Kube-AWS is a Kubernetes incubator project that, similar to Conjure-up, defines all the specific requirements of a particular cluster using a cluster.YAML file. This makes for exceptional flexibility as almost all aspects of a cluster can be customized from a single file. While the downside is obviously that it’s only for AWS customers, the advantage is that it seamlessly integrates with and is powered by several AWS services as well. These include CloudFormation, EC2, KMS, S3, Auto Scaling, Spot Fleet, and more.
In addition to provisioning “production-ready” Kubernetes clusters, a key feature of Kube-AWS is the ability to customize almost every possible feature of your stack, node by node. Where you had spells and magic with Canonical, AWS is all business and these features are expressed in the form of cloud-config and CloudFormation stack templates. A bonus here is that you can use existing preconfigured resources like subnets, VPCs, IAM roles, security groups, and the like without having to go through the trouble of setting everything up. Kube-AWS also features multi-AZ etcd clusters that refer to multiple availability zones where a standby database is synchronously replicated.
5. Automation with Ansible
We did mention that we couldn’t let this particular option escape our list and even though we kind of covered it with Kubespray, we felt it deserves some attention of its own. This is because Ansible goes the whole hog and in addition to automating provisioning and configuration, allows IT administrators to automate any repetitive tasks, from beginning to end. That puts it into entirely another category of platforms offering end-to-end automation. The best part about Ansible is definitely that you don’t need to know the exact commands needed to perform a particular task, you just need to get your hands on the required playbooks and the rest is magic.
Automating Kubernetes cluster management: Know before you go
While there are several tools and platforms that you can use to automate cluster management in Kubernetes, it’s important to know how deep you can go before you drown. As we mentioned earlier, Kubernetes isn’t easy and unless you’re willing to spend some time researching with trial and error, a managed service is probably the way to go with regards to automation.
Featured image: Pikrepo