Skip to content

Differences between kubectl cordon & drain & taint ​

kubectl cordon ​

kubectl cordon is used to mark a node as unschedulable. It won't evict pods from the node. And it won't affect the pods that are already running on the node.

bash
kubectl cordon node

You can use kubectl uncordon to mark a node as schedulable again.

bash
kubectl uncordon node

kubectl drain ​

kubectl drain is used to mark a node as unschedulable and graceful evict all the pods from the node. It will wait for the pods to be evicted before marking the node as unschedulable.

If you want to stop the node and online it again, you can use the following command:

bash
kubectl cordon node
kubectl drain node --ignore-daemonsets=true
kubectl uncordon node

kubectl taint ​

kubectl taint is used to add or remove taints from a node. It won't evict pods from the node. And it won't affect the pods that are already running on the node.

bash
kubectl taint node ubuntu-1 key=value:NoSchedule