How to add roles to nodes in Kubernetes?

KubernetesKubeadm

Kubernetes Problem Overview


When I provision a Kubernetes cluster using kubeadm, I get my nodes tagged as "none". It's a known bug in Kubernetes and currently a PR is in progress.

However, I would like to know if there is an option to add a Role name manually for the node.

root@ip-172-31-14-133:~# kubectl get nodes
NAME               STATUS    ROLES     AGE       VERSION
ip-172-31-14-133   Ready     master    19m       v1.9.3
ip-172-31-6-147    Ready     <none>    16m       v1.9.3

Kubernetes Solutions


Solution 1 - Kubernetes

This worked for me:

kubectl label node cb2.4xyz.couchbase.com node-role.kubernetes.io/worker=worker

NAME                                          STATUS    ROLES           AGE       VERSION
cb2.4xyz.couchbase.com                          Ready     custom,worker   35m       v1.11.1
cb3.5xyz.couchbase.com                          Ready     worker          29m       v1.11.1

I could not delete/update the old label, but I can live with it.

Solution 2 - Kubernetes

A node role is just a label with the format node-role.kubernetes.io/<role>

You can add this yourself with kubectl label

Solution 3 - Kubernetes

Default
enter image description here

Add Role

kubectl label node <node name> node-role.kubernetes.io/<role name>=<key - (any name)>

enter image description here

Remove Role

kubectl label node <node name> node-role.kubernetes.io/<role name>-

enter image description here

Solution 4 - Kubernetes

Before label:

general@master-node:~$ kubectl get nodes
NAME          STATUS   ROLES    AGE   VERSION
master-node   Ready    master   23m   v1.18.2
slave-node    Ready    <none>   19m   v1.18.2

> > > kubectl label nodes <your_node> kubernetes.io/role=<your_label> > > In my case slave-node e.g. > > kubectl label nodes slave-node kubernetes.io/role=worker

After label:

general@master-node:~$ kubectl label nodes slave-node kubernetes.io/role=worker
node/slave-node labeled
general@master-node:~$ kubectl get nodes
NAME          STATUS   ROLES    AGE   VERSION
master-node   Ready    master   24m   v1.18.2
slave-node    Ready    worker   21m   v1.18.2

You can also change the label. Just put --overwrite

> kubectl label --overwrite nodes <your_node> kubernetes.io/role=<your_new_label> > > e.g. > > kubectl label --overwrite nodes slave-node kubernetes.io/role=worker1

After overwriting the label:

general@master-node:~$ kubectl label --overwrite nodes slave-node kubernetes.io/role=worker1
node/slave-node labeled
general@master-node:~$ kubectl get nodes
NAME          STATUS   ROLES     AGE   VERSION
master-node   Ready    master    36m   v1.18.2
slave-node    Ready    worker1   32m   v1.18.2

Solution 5 - Kubernetes

Add Roles

$ kubectl get nodes 

master  Ready    control-plane,master   166m    v1.21.1
worker1  Ready    worker                 48m     v1.21.1
worker2  Ready    worker                 16m     v1.21.1
worker3   Ready    worker                 9m57s   v1.21.1    

$ kubectl label node worker1  node-role.kubernetes.io/worker=worker

$ kubectl label node worker2  node-role.kubernetes.io/worker=worker

$ kubectl label node worker3  node-role.kubernetes.io/worker=worker

In case if you wanted to overwrite, please use this below command.

$ kubectl label node worker1  node-role.kubernetes.io/worker=worker --overwrite   

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionJeelView Question on Stackoverflow
Solution 1 - Kubernetesram dhakneView Answer on Stackoverflow
Solution 2 - KubernetesJordan LiggittView Answer on Stackoverflow
Solution 3 - KubernetesIsuru AmarathungaView Answer on Stackoverflow
Solution 4 - KubernetesKamleshView Answer on Stackoverflow
Solution 5 - KubernetesPraveen Kumar K SView Answer on Stackoverflow