How to set label to Kubernetes node at creation time?

10/19/2016

I am following up guide [1] to create multi-node K8S cluster which has 1 master and 2 nodes. Also, a label needs to set to each node respectively.

Node 1 - label name=orders 
Node 2 - label name=payment

I know that above could be achieved running kubectl command

kubectl get nodes
kubectl label nodes <node-name> <label-key>=<label-value>

But I would like to know how to set label when creating a node. Node creation guidance is in [2].

Appreciate your input.

[1] https://coreos.com/kubernetes/docs/latest/getting-started.html

[2] https://coreos.com/kubernetes/docs/latest/deploy-workers.html

-- Indika Sampath
kubernetes

2 Answers

10/20/2016

In fact there is a trivial way to achieve that since 1.3 or something like that.

What is responsible for registering your node is the kubelet process launched on it, all you need to do is pass it a flag like this --node-labels 'role=kubemaster'. This is how I differentiate nodes between different autoscaling groups in my AWS k8s cluster.

-- Radek 'Goblin' Pieczonka
Source: StackOverflow

10/19/2016

This answer is now incorrect (and has been for several versions of Kubernetes). Please see the correct answer by Radek 'Goblin' Pieczonka

There are a few options available to you. The easiest IMHO would be to use a systemd unit to install and configure kubectl, then run the kubectl label command. Alternatively, you could just use curl to update the labels in the node's metadata directly.

That being said, while I don't know your exact use case, the way you are using the labels on the nodes seems to be an effort to bypass some of Kubernetes key features, like dynamic scheduling of components across nodes. I would suggest rather than work on labeling the nodes automatically that you try to address why you need to identify the nodes in the first place.

-- chaosaffe
Source: StackOverflow