cordon 节点可以使节点不接受调度pod。那么原理是什么呢。其实很简单,就是给节点增加了一个污点。
kubectl describe node NODE_NAME 能看到这个污点配置:
Taints: node.kubernetes.io/unschedulable:NoSchedule
Unschedulable: true
那如果你的工作负载能够容忍这个污点,也就可以被调度到cordon的节点。如有些系统插件,就默认带有这样的容忍。
tolerations:
- effect: NoSchedule
operator: Exists
当然也可以自己添加一个明确key容忍
tolerations:
- effect: NoSchedule
key: node.kubernetes.io/unschedulable
operator: Exists