Sometimes it’s needed to create a one-node-cluster, which will host control plane components and as well the usual workloads. It’s possible to do so with small tweaks.
The setup of “one node fits all” or all-in-one in general is a usual KubeOne cluster, the only difference would be: removed taints from the Node.
Every control plane Node in the cluster will, by default, have the following taints, which prevents any “accidental” workloads to land on the control plane Nodes.
- effect: NoSchedule
key: node-role.kubernetes.io/master
So we need to get rid of them.
In order to remove the default taints from the control plane Nodes we need to ether edit the terraform output (in case when it’s in use) or to specify empty tains array in the YAML.
In the output.tf
file, add untaint = true
to the control_plane
like shows
in the diff below.
output "kubeone_hosts" {
description = "Control plane endpoints to SSH to"
value = {
control_plane = {
+ untaint = true
...
}
}
In case if you don’t use terraform but rather write whole config manually:
apiVersion: kubeone.k8c.io/v1beta2
kind: KubeOneCluster
name: demo-cluster
controlPlane:
hosts:
- publicAddress: "x.x.x.1"
hostname: "k1-cp-1"
+ taints: []