<p>i have setup myself a simple 1 master and 3 nodes setup running on Ubuntu based on the book "Kuberenetes Up &amp; Running" in combination with the official documentation.</p>

<p>It basically works until i shutdown one of the <code>worker</code> nodes.
After a few seconds the nodes-running-state switches to <code>unknown</code>.
The pods keep report the state <code>running</code> even if the pods are located on the offline node.</p>

<p>Shouldn't k8s move these pods to a different healthy host? 
Am i missing something?</p>

<p>thanks in advice!</p>

thepill
<p>With Kubernetes version 1.13 and higher, pod eviction on node failures/not-ready conditions is actually controlled by <strong>taints and tolerations</strong>. <code>--pod-eviction-timeout</code> parameter is not used anymore.</p>

<p>When a node goes down or is not ready, node-controller/kubelet will add the following taints to the node - <code>node.kubernetes.io/unreachable</code> and <code>node.kubernetes.io/not-ready</code>. All pods tolerate these taints for 300 seconds by default. You can control this toleration time cluster wide for all pods with flags to <code>kube-api-server</code> and also per pod using <code>tolerations</code> object in pod spec.  </p>

<p><strong>Cluster Wide configuration:</strong></p>

<p>You can modify the toleration time cluster wide using <code>--default-not-ready-toleration-seconds</code> and <code>--default-unreachable-toleration-seconds</code> flags to <code>kube-api-server</code>.</p>

<p>From <a href="https://kubernetes.io/docs/reference/command-line-tools-reference/kube-apiserver/" rel="noreferrer">docs:</a></p>

<pre><code>--default-not-ready-toleration-seconds int     Default: 300
Indicates the tolerationSeconds of the toleration for notReady:NoExecute that is added by default to every pod that does not already have such a toleration.
--default-unreachable-toleration-seconds int     Default: 300
</code></pre>

<p><strong>Per pod configuration:</strong></p>

<p>You can also modify the toleration time per pod using the following configuration. </p>

<pre><code>tolerations:
  - key: "node.kubernetes.io/unreachable"
    operator: "Exists"
    effect: "NoExecute"
    tolerationSeconds: 120
  - key: "node.kubernetes.io/not-ready"
    operator: "Exists"
    effect: "NoExecute"
    tolerationSeconds: 120
</code></pre>

<p><a href="https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/#taint-based-evictions" rel="noreferrer">https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/#taint-based-evictions</a></p>
