Kubernetes is an open-source platform for deployment, management, and orchestration of containerized applications. It was originally developed by Google, which leveraged more than 15 years of experience running applications in containers at a massive scale. Kubernetes was then open-sourced and turned over to the community in 2014, and over the past two and a half years it has become one of the go-to solutions for distributed architecture. It has also been widely adopted by everyone from hobbyists and developers working on small projects to the biggest enterprise installations running billions of containers a week on thousands of coordinated virtual machines.
Kubernetes has been a tremendous success, in large part due to the relative ease of use/interaction with a complicated distributed system. The end user interacts with Kubernetes via the command line tool kubectl. kubectl (pronounced “kube-control,” “kube-C-T-L,” or sometimes even “kube-cuttle”) abstracts the implementation of incredibly complex tasks and allows the administrator to work in a straightforward, declarative syntax. For example, you can use kubectl to tell the cluster that 30 replicas of a given service are needed and let the cluster figure out how to make it happen. This is a vast improvement over much of what existed before, and the Kubernetes ecosystem continues to expand at an incredible rate. To date, the main project has almost 21k GitHub stars and more than 1k contributors.
This all sounds great, right? Let’s all do some Kubernetes!
But as a professional system administrator, how do you go about provisioning and deploying a production ready, highly available, Kubernetes cluster?
More now than ever, the answer to that question is a relative newcomer to the Kubernetes and open source family: kops. kops (kubernetes-ops) is the one-stop, open source solution for deploying Kubernetes clusters from the command line. kops was designed to make installation of secure, highly available clusters easy and automatable on AWS. (As the project grows, support for other cloud providers continues to improve as well.) kops currently focuses on full-cycle provisioning – from networking and security to the installation of the software on the instances that will make up your cluster.
One of the ways kops integrates with the existing Kubernetes community and software is that the main interaction with kops is via a relatively easy to use, declarative syntax command line utility, that’s a lot like kubectl. At a basic level, the difference between kops and kubectl is that kubectl interacts with applications or services deployed in your cluster, while kops interacts with entire clusters at a time. Instead of scaling an application deployment to 30 replicas like before, you might scale the number of nodes to 30 with a few quick declarative commands. As the administrator, that means you’re not responsible for individually provisioning all the extra compute instances, and you don’t have to rely on traditional DevOps tools like Chef or Ansible to configure them. If you give kops a job within its scope, it gets it done and helps direct your choices to industry best practices. In addition, creating and managing Kubernetes clusters with kops is much faster than the first generation, more generalized DevOps tools. We’re talking about under 20 minutes for a highly available multiple master cluster of essentially any size in private network topology. All it takes is a few choices, and kops works out the details of how to get it done.
The kops Community
Beginning in March 2016 as a small project with just a few core contributors, kops has grown to more than 1,100 GitHub stars and more than 110 contributors. It is truly a community project that lives up to open source ideals, with the core team actively soliciting ideas for new directions of the codebase, inviting the community to help address bugs and issues making sure all voices are heard. The enthusiasm and energy of the community are driving the program forward.
Here’s how I got involved with kops. I had been writing and commenting on issues for months on the Kubernetes slack channel (#kops), and I had a feature in mind that we needed at ReactiveOps. One of the kops core maintainers, the awesome Kris Nova, invited me to sit down with her after a breakfast meeting, and we spent the next hour hacking out the beginnings of the feature. Over the next few weeks, we bounced code back and forth, and she helped me make sure all the bases were covered before finally getting the feature accepted into the main codebase. Now, as a kops core maintainer, I mentor new contributors to the project in the same way that she mentored me. We’re a tight-knit group, and we’re working hard to do something that we think is important, useful, and pretty cool. The result has been rapid growth and near real-time progress.
What to Look for in a DevOps Partner
Whether you plan to use Kubernetes, kops or some other combination of tools, choose a partner that has an active stake in the open source community. Specifically, choose a partner that demonstrates expertise in the tooling that your business relies on to succeed.
Find a partner that:
- Has a real understanding of the inner workings of the software and is visible to, part of and invested in the community.
- Keeps a close eye on the evolution of the project and participates in driving the agenda and conversation in meaningful ways in order to develop and implement tools, features and changes that support your business needs and create value for your business.
- Helps you find ways to extend existing technologies to save time and money and contribute them back to the community to further future progress.
Choose a DevOps partner that combines an industry-leading understanding of cloud infrastructure. Rather than watching from the outside, waiting for some big company to fix a bug or create your must-have feature for you, choose to work with a team that’s at the center of the action and helping to build that feature from the ground up.