This document lists some commonly asked questions about KubeOne, what it does,
and how it works. If you have any question not covered here, please create
a new GitHub issue or contact us on the mailing list or
on the #kubeone
channel on Kubernetes Slack.
- What is KubeOne?
- What cloud providers KubeOne does support?
- Are on-prem and bare metal clusters supported?
- Does KubeOne handles the infrastructure and cloud resources?
- How KubeOne works?
- How are commands executed on nodes?
- Can I deploy other CNI plugin then Canal?
- Can I deploy other controller than machine-controller or decide not to deploy and machine-controller?
- Can I use KubeOne to create Kubernetes clusters older than 1.13?
- Can I use KubeOne to upgrade Kubernetes 1.12 or older cluster to 1.13+?
- How many versions can I upgrade at the same time?
- I'd like to contribute to KubeOne! Where can I start?
KubeOne is a CLI and a Go library for installing, maintaining and upgrading Kubernetes 1.13+ clusters.
KubeOne is supposed to work on any cloud provider, on-prem and bare-metal cluster, as long as there is no need for additional configuration. However, to utilize all features of KubeOne, such as Terraform integration and creating worker nodes, KubeOne and Kubermatic machine-controller need to support that provider.
Currently we support AWS, DigitalOcean, Google Compute Engine (GCE), Hetzner, Packet, OpenStack, VMware vSphere and Azure.
Yes. We officially support VMware vSphere and OpenStack.
No, it's up to the operator to setup the needed infrastructure and provide the needed parameters to KubeOne. To make this task easier, we provide Terraform scripts that operators can use to create the needed infrastructure. Using the Terraform integration operator can source information about the infrastructure from the Terraform output.
This decision was based on that fact that we didn't want to limit operators how
the infrastructure can be configured and what resources can be used. There are
many possible setups and supporting each of them in most of cases isn't
possible. Operators are free to define infrastructure how they prefer and then
use KubeOne to provision the cluster. We're open to feedback, so if you have any
suggestion or idea ping us on the mailing list or on the
#kubeone
channel on Kubernetes Slack.
KubeOne uses kubeadm to provision and upgrade Kubernetes control plane nodes. The worker nodes are provisioned and managed using the Kubermatic machine-controller. KubeOne takes care of installing Docker and all needed dependencies for Kubernetes and kubeadm. After the cluster is provisioned, KubeOne deploys the Canal CNI plugin and Kubermatic machine-controller.
All commands are executed over SSH. Because we don't take care of the
infrastructure, it makes almost impossible to use cloud-config
. Addons (Canal
and machine-controller
) are deployed using Go and the
controller-runtime client library.
This is currently not possible, however we're researching about switching to WeaveNet or providing option to choose the CNI plugin.
Can I deploy other controller than machine-controller or decide not to deploy and machine-controller?
You can opt out deploying machine-controller by setting
machine_controller.Deploy
to false
. In that case you can't deploy worker
nodes using KubeOne.
No. Due to breaking changes and the new features available only in kubeadm 1.13+, we decided to support only Kubernetes 1.13+ clusters.
No. Due to breaking changes in the upgrade process, we only support upgrading from Kubernetes 1.13 to newer.
It is only possible to upgrade from one minor to the next minor version (n+1
).
For example, if you want to upgrade from Kubernetes 1.13 to Kubernetes 1.15,
you'd need to upgrade to 1.14 and then to 1.15.
Please check our contributing guide.