<p>In the following scenario:</p>

<ol>
<li>Pod X has a toleration for a taint</li>
<li>However node A with such taint does not exists</li>
<li>Pod X get scheduled on a different node B in the meantime</li>
<li>Node A with the proper taint becomes Ready</li>
</ol>

<p>Here, Kubernetes does not trigger an automatic rescheduling of the pod X on node A as it is properly running on node B. Is there a way to enable that automatic rescheduling to node A?</p>

Arkon
<p>Natively, probably not, unless you:</p>
<ul>
<li>change the taint of <code>nodeB</code> to <code>NoExecute</code> (it probably already was set) :</li>
</ul>
<blockquote>
<p>NoExecute - the pod will be evicted from the node (if it is already running on the node), and will not be scheduled onto the node (if it is not yet running on the node).</p>
</blockquote>
<ul>
<li><a href="https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/#concepts" rel="nofollow noreferrer">update the toleration of the pod</a></li>
</ul>
<p>That is:</p>
<blockquote>
<p>You can put multiple taints on the same node and <strong>multiple tolerations on the same pod</strong>.</p>
<p>The way Kubernetes processes multiple taints and tolerations is like a filter: start with all of a node’s taints, then ignore the ones for which the pod has a matching toleration; the remaining un-ignored taints have the indicated effects on the pod. In particular,</p>
<p>if there is at least one un-ignored taint with effect NoSchedule then Kubernetes will not schedule the pod onto that node</p>
</blockquote>
<p>If that is not possible, then using <a href="https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#node-affinity-beta-feature" rel="nofollow noreferrer">Node Affinity</a> could help (but that differs from taints)</p>
