什么污点和容忍度
污点是给node添加一个污点,容忍度是作用于POD的,可以决定pod是否可以调度到该node上,如果pod容忍度不匹配就不能调度的pod上。
为什么需要污点和容忍度
可以改变pod的调度策略,指定pod只能部署到指定的node节点上,污点和容忍度都是成对出现的;在一些需要指定使用某台node资源的时候可以使用这种方式,指定一组pod只能部署在有污点的node节点上。
怎么使用污点和容忍度
- 首先给node添加污点
## 添加污点
kubectl taint nodes node1 key1=value1:NoSchedule
## 删除污点
kubectl taint nodes node1 key1=value1:NoSchedule-
- 给pod添加容忍度
tolerations:
- key: "key1"
operator: "Equal"
value: "value1"
effect: "NoSchedule"
operator
- Equal:容忍度中的key和value都需要跟污点中的匹配对应。
- Exists:容忍度中value不能填写,只需要key和effect匹配就行。
- 如果一个容忍度的
key
为空且operator
为Exists
, 表示这个容忍度与任意的 key、value 和 effect 都匹配,即这个容忍度能容忍任何污点。- 如果
effect
为空,则可以与所有键名key1
的效果相匹配。
effect
effect表示了一些pod调度node上的一些行为。
- PreferNoSchedule:尽量避免把pod调度到容忍度不匹配的node节点,不是强制要求的,还是有可能不匹配的调度。
- NoSchedule:只要pod存在node不能容忍的容忍度,pod不能进行调度到该node上。
- NoExecute:pod容忍度不能匹配node的容忍度,不能被调度到该node上;已经存在的pod如果不符合容忍度,则会被驱逐。
驱逐规则
- 如果 Pod 不能忍受这类污点,Pod 会马上被驱逐。
- 如果 Pod 能够忍受这类污点,但是在容忍度定义中没有指定
tolerationSeconds
, 则 Pod 还会一直在这个节点上运行。 - 如果 Pod 能够忍受这类污点,而且指定了
tolerationSeconds
, 则 Pod 还能在这个节点上继续运行这个指定的时间长度。