KubeOne
KubeOne makes installing and upgrading a HA Kubernetes cluster a breeze.
It integrates with your favorite infrastructure tools or can be used standalone.
From a bird eye view, KubeOne connects to your machines using SSH and then uses
kubeadm to bootstrap the cluster.
Features
- Kubernetes 1.13 support
- easy Terraform integration
- provides rolling cluster upgrades (TODO)
Usage
First, build the binary by running make. After that you need to provide
KubeOne with a configuration with details about the node IPs, Kubernetes
versions etc.
By default, the configuration happens by providing a single YAML file. Take a
look at the config.yaml.dist for more details and create a copy of it to make
adjustments.
Armed with your configuration, you can now run KubeOne:
kubeone install myconfig.yaml
This will SSH into the machines, install the required dependencies and then
perform the necessary steps to bring up an etcd ring and a HA Kubernetes
control plane.
Workers definition
KubeOne relies on the machine-controller
project to create worker nodes after the Kubernetes master nodes are bootstrapped.
The machine controller will be deployed as part of the cluster creation and is configured using the cloud provider credentials from the shell environment.
(AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY in case of AWS)
Worker nodes are managed by the machine-controller
project (which kubeone
automatically deploys).
The config section workers: [] specifies MachineDeployment objects that will be created when KubeOne runs.
You can find example machine deployments in the machine-controller examples.
KubeOne supports discovery of hosts, the Kubernetes API LB and can read worker configuration from Terraform's output.
Take a look at the files in the terraform/aws directory and especially the output.tf file to learn more about what data KubeOne expects to read from Terraform.
To use Terraform's output, use the --tfjson CLI flag:
terraform apply
terraform output -json > tf.json
kubeone install --tfjson tf.json myconfig.yaml
While the hosts: [] configuration will be completely taken from Terraform's output, the workers: [] configuration will be merged by populating empty config fields.
Output value names and types correspond to cloudProviderSpec fields for the chosen
provider, for more information please consult the RawConfig structure in corresponding provider package in the machine-controller provider folder.
The terraform/aws example and the config.yaml.dist file contain multiple worker configs that use this mechanism to add availabilityZone, ami, etc. fields.
Debugging
To see exactly what's happening during installation, pass the --verbose flag
to KubeOne:
kubeone --verbose install myconfig.yaml
This will stream the output of all shell commands to your shell.
License
Apache License