5.12.0 5.11.0 5.10.0 5.9.0 5.8.0 5.7.0 5.6.0 5.5.0 5.4.0 5.3.0 5.2.0 5.1.0 5.0 4.10 4.9 4.8 4.7 4.6 4.5.3 4.5.2 4.5.1 4.5 4.4 4.3
5.12.0 5.11.0 5.10.0 5.9.0 5.8.0 5.7.0 5.6.0 5.5.0 5.4.0 5.3.0 5.2.0 5.1.0 5.0 4.10 4.9 4.8 4.7 4.6 4.5.3 4.5.2 4.5.1 4.5 4.4 4.3

Tainting a Control Plane Node

By default, a control plane node can manage application workloads as well. This is okay for a lighter workload (~50 concurrent conversations) and RKE2 Single Node Deployment. But, for a higher workload or a multi-cluster setup, all control plane nodes should be tainted to schedule control-plane pods only.


First get the nodes to identify which are control plane / master nodes.

kubectl get nodes

Then to taint the master nodes, use the following command for each of the master node.

kubectl taint nodes (nodename) node-role.kubernetes.io/master:NoSchedule


Once done allow the RKE Ingress to spin up on control plane as well.

kubectl patch deploy nginx-ingress-nginx-ingress-controller -n ingress-nginx --type json -p='[{"op": "add", "path": "/spec/template/spec/tolerations", "value": [{"key": "node-role.kubernetes.io/master", "operator": "Exists", "effect": "NoSchedule"}]}]'
kubectl patch deploy nginx-ingress-nginx-ingress-controller-default-backend -n ingress-nginx --type json -p='[{"op": "add", "path": "/spec/template/spec/tolerations", "value": [{"key": "node-role.kubernetes.io/master", "operator": "Exists", "effect": "NoSchedule"}]}]'