Node污点
释义看文档就好 https://kubernetes.io/zh-cn/docs/concepts/scheduling-eviction/taint-and-toleration/ 污点是Node的属性 容忍度是Pod的属性 用来标记各自特征的,通常协同工作。
举个例子,
一个Node的污点
kubectl taint nodes node1 key1=value1:NoSchedule
一个pod的容忍度
tolerations:- key: "key1" operator: "Equal" value: "value1" effect: "NoSchedule"
这个乍一看意思应该是,当key1=value1时,不调度;然而实际的意思是 Pods that do not tolerate this taint are not scheduled on the node. 那些不能容忍这个污点的Pod不能调度到这个Node,双重否定。其他的effect还会有 PreferNoSchedule
NoExecute
(立即驱逐)
https://stackoverflow.com/questions/50966318/what-is-the-difference-between-noexecute-noschedule-prefernoschedule
为什么要污点,而不是正向的优点呢? 当是污点时,污点去掉不影响Node上已调度的Pod,当是优点时,优点去掉会影响Node上已调度的Pod
排除匹配兼容性更好。即使把这个属性中性化,原始目的就是Node不让一些Pod在上面调度,本身就是否定的,所以用污点这个"负面属性"进行排除性匹配,而不是用指定属性精确匹配。我们有一个例子,某测试用例,特定情况下不运行,我们构造条件判断Rule,此情况下不运行,而不是枚举所有正向的情况,当正向条件增加时,Rule又需要更改,也即排除性匹配兼容性好。