I am provisioning a Kubernets cluster from scratch (reasons). Its a local setup inside VM, and everything is fine, except the master node is created as schedulable.
I have tried assigning the master label and appropriate taint to node by passing required arguments to kubelet binary (doesn't solve the problem):
--register-with-taints=node-role.kubernetes.io/master=:NoSchedule
--node-labels=master,node-role.kubernetes.io/master=""Here is the output from kubectl describe <node>:
Name: myNodeName
Roles: master
Labels: beta.kubernetes.io/arch=amd64
beta.kubernetes.io/os=linux
kubernetes.io/hostname=myHostName
master=
node-role.kubernetes.io/master=
Annotations: node.alpha.kubernetes.io/ttl=0
volumes.kubernetes.io/controller-managed-attach-detach=true
CreationTimestamp: Tue, 03 Jul 2018 05:56:53 +0000
Taints: node-role.kubernetes.io/master=true:NoSchedule
Unschedulable: false
How do I set this node as Unschedulable? The documentation doesn't really specify this (feel free to direct to appropriate part of the documentation, in case I missed something).
PS: The labels/taints mentioned above were present before the node was created/registered.
Taints get us a possibility to mark a node in order to prevent scheduler from using it for certain Pods with a NoSchedule parameter, and they have special values which Kubernetes Scheduler uses on the planning step. Pods by default cannot be spawned on nodes with taints until you will add tolerations which will allow scheduler to create pods on nodes with taints specified in toleration configuration; therefore, as per your node description, you have successfully registered this node as NoSchedule and it means that Pods will not be scheduled on this node.
Taints: node-role.kubernetes.io/master=true:NoSchedule
Alternatively, you can use kubectl cordon NODE command to mark the node as unschedulable; therefore it will disable scheduling for the node at all, so Kubernetes Scheduler will just ignore it in the process of planning workload, and it reflects in your node configuration like:
Unschedulable: true