KubeOne: Simplified Lifecycle Management for HA Kubernetes Clusters

Today, we are excited to announce a new open source Kubernetes cluster lifecycle management tool: KubeOne! KubeOne takes care of installing, configuring, upgrading and maintaining Highly-Available (HA) Kubernetes clusters. It works out-of-the-box on any cloud provider, as well as in on-prem and bare-metal environments.

With Kubernetes gaining more and more popularity each day, we believe that creating and maintaining HA Kubernetes clusters should be easy. Operators should focus on running the workload, not a bunch of commands to get clusters up and running.

In search for a feature-complete solution that supports HA clusters, follows the Kubernetes best-practices, and comes with a simple and declarative API based on the Kubernetes Cluster-API, we could not find an exisiting project that fulfilled our needs. Therefore, we decided to build our own solution.

Cluster Lifecycle Management

KubeOne comes with a rich, easy to use, declarative Kubernetes-style API that allows you to configure your desired cluster in just a few lines. The configuration manifest defines on what instances Kubernetes will be installed, what Kubernetes version will be used, and what features will be enabled on the newly provisioned cluster. With the manifest in place, by using a single command, you can provision the cluster, upgrade it to the newer version, or destroy it.

During the provisioning time, the user can enable and configure various features that improve the security and usability of the cluster. Supported features include PodSecurityPolicy, DynamicAuditLog, metrics-server and OpenID Connect authentication.

Moreover, selected providers benefit from advanced features such as managing worker nodes with KubeOne and Kubermatic Kubernetes Platform machine-controller and deploying provider specific ones like external cloud controller managers (CCM).

Kubermatic Kubernetes Platform machine-controller is a Cluster-API implementation that ensures you can manage all your worker nodes using a declarative Kubernetes-style API. That allows you to manage full lifecycle of worker nodes, including creating infrastructure, provisioning and upgrading Kubernetes, and destroying nodes using just kubectl.

All worker nodes are backed by the MachineDeployment objects. MachineDeployments work just like Deployments, but instead of managing containers they manage machines.

You can scale MachineDeployment objects using kubectl and the scale command. For example, the following command will set number of worker nodes to 5:

kubectl scale machinedeployment/fra1-1-deployment -n kube-system --replicas=5

Terraform Integration

KubeOne requires operators to provide the running instances for control plane nodes, instead of KubeOne provisioning them. This ensures users can continue using their favorite tools to create the infrastructure tailor-made to their needs on any provider, while enjoying all features of KubeOne.

To ensure a seamless flow of information on the infrastructure and control plane nodes, and prevent potential errors and mistakes, KubeOne can read the needed information directly from the Terraform output.

We provide you with the example Terraform scripts which can be used to create the needed infrastructure for a cluster. The example Terraform scripts are available for all supported providers.

kubeadm Under the Hood

KubeOne uses the well-known and production-grade tool kubeadm. kubeadm allows you to follow the best practices for provisioning Kubernetes clusters, while providing a rich set of features that we make available in an easy to use manner.

Supported Providers and Environments

Despite being able to use KubeOne on any provider, in order to benefit from all features of KubeOne, the provider needs to be supported by KubeOne and Kubermatic Kubernetes Platform machine-controller.

Currently, KubeOne supports AWS, GCP, DigitalOcean, Packet, Hetzner and OpenStack. Support for VMware vSphere is planned for one of the upcoming releases.

If you’d like to see support for other providers let us know via GitHub or check the guidelines for adding support for a new provider.

Getting Started with KubeOne

Everything you need to do to get started with KubeOne is to grab the latest release from GitHub Releases. The detailed installation instructions can be found in the installing section of the README file. In order to use the example Terraform scripts, you need to have Terraform installed, which can be done by following the official installing instructions.

In the KubeOne documentation you can find a “Getting started” walkthrough for each supported provider. Alternatively, check out the recording showing KubeOne in action!


Looking to the Future

If you want to keep in the loop about what is happening, keep an eye at the KubeOne GitHub repository and join the #kubeone channel on Kubermatic Kubernetes Platform Slack. We’re planning many awesome features and we hope you’ll like them!

Also, we’ll hold two Live Sessions at KubeCon + CloudNativeCon Europe in Barcelona: on Wednesday at 3:30 pm and on Thursday at 10:45 am! Just pass by our booth (SE56) to learn more about KubeOne and Kubermatic. If you are not able to join us at KubeCon, no worries. We’ll be giving a Kubernetes / Cloud Native Online Meetup dedicated to KubeOne on June 6th at 6 pm CEST.

Marko Mudrinić

Marko Mudrinić

Senior Software Engineer