<p>I am learning Kubernetes, and and faced a conceptual question, what is the benefit of new taint model over the simple node selector.</p>

<p>Documentation talks about a usecase where a group of devs might have exclusive right for a set of pods by a taint like <code>dedicated=groupA:NoSchedule</code>. But I thought we can do the same thing by a simple nodeSelector. </p>

<p>To be more specific, what is the role of the effect on this taint. Why not simply a label like the rest of the Kubernetes.</p>

<p>A node selector affects a single pod template, asking the scheduler to place it on a set of nodes. A NoSchedule taint affects all pods asking the scheduler to block all pods from being scheduled there.</p>

<p>A node selector is useful when the pod needs something from the node. For example, requesting a node that has a GPU. A node taint is useful when the node needs to be reserved for special workloads. For example, a node that should only be running pods that will use the GPU (so the GPU node isn't filled with pods that aren't using it).</p>

<p>Sometimes they are useful together as in the example above, too. You want the node to only have pods that use the GPU, and you want the pod that needs a GPU to be scheduled to a GPU node. In that case you may want to taint the node with <code>dedicated=gpu:NoSchedule</code> and add both a taint toleration and node selector to the pod template.</p>
