image.png

什么污点和容忍度

污点是给node添加一个污点,容忍度是作用于POD的,可以决定pod是否可以调度到该node上,如果pod容忍度不匹配就不能调度的pod上。

为什么需要污点和容忍度

可以改变pod的调度策略,指定pod只能部署到指定的node节点上,污点和容忍度都是成对出现的;在一些需要指定使用某台node资源的时候可以使用这种方式,指定一组pod只能部署在有污点的node节点上。

怎么使用污点和容忍度

  1. 首先给node添加污点
## 添加污点
kubectl taint nodes node1 key1=value1:NoSchedule
## 删除污点
kubectl taint nodes node1 key1=value1:NoSchedule-

![image.png](https://img-blog.csdnimg.cn/img_convert/9197f54ffc6c2a510c2bbbfcbab796d7.png
2. 给pod添加容忍度

tolerations:
- key: "key1"
  operator: "Equal"
  value: "value1"
  effect: "NoSchedule"

operator

  • Equal:容忍度中的key和value都需要跟污点中的匹配对应。
  • Exists:容忍度中value不能填写,只需要key和effect匹配就行。
  1. 如果一个容忍度的 key 为空且 operatorExists, 表示这个容忍度与任意的 key、value 和 effect 都匹配,即这个容忍度能容忍任何污点。
  2. 如果 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 还能在这个节点上继续运行这个指定的时间长度。
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐