<p><a href="https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/" rel="noreferrer">https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/</a> The docs are not very clear as to what exactly the values represent.</p>

<blockquote>
  <p>the system will try to avoid placing a pod that does not tolerate the
  taint on the node, but it is not required</p>
</blockquote>

<p>What does 'try' imply? If I said a function will try sort a a list of numbers - it's not very clear...</p>

<p>Although there is a slight difference, I like more Google explanation about what <strong>Node Taints</strong> are, rather then Kubernetes:</p>

<p>A node taint lets you mark a node so that the scheduler avoids or prevents using it for certain Pods. A complementary feature, tolerations, lets you designate Pods that can be used on "tainted" nodes.</p>

<p>Node taints are key-value pairs associated with an effect. Here are the available effects:</p>

<p><code>NoSchedule</code>: Pods that do not tolerate this taint are not scheduled on the node.</p>

<p><code>PreferNoSchedule</code>: Kubernetes avoids scheduling Pods that do not tolerate this taint onto the node. This one basically means, do it, if possible.</p>

<p><code>NoExecute</code>: Pod is evicted from the node if it is already running on the node, and is not scheduled onto the node if it is not yet running on the node.</p>

<p>Note that the difference between <code>NoSchedule</code> and <code>NoExecute</code> is that with the first one  it won't schedule a pod, but if it is already running, it won't kill it. With the last one, it will kill the pod and re-schedule on another node.</p>
