k8s 污点taint与容忍tolerations

污点

污点是k8s的一种属性,node有污点,哪个pod能容忍这个污点就可以在这个node上部署

1.1 污点组成

key,value及effect 三个元素组成,effect是污点状态
例:key1=value1:NoSchedule

1.2 污点状态

共有三种状态:
NoSchedule:一定不被调度 但是不会驱逐已有的 这个部署 ingress-controller 的时候 有用
PreferNoShedule:尽量不会调度
NoExecute:不仅不会调度,还会驱逐原先的pod,比如像公司招聘,招聘的人多了,把多的那部分人裁掉,常用于更换节点,给几分钟把pod驱逐到别的节点上

1.3 给node添加污点

给master添加污点不可调度

kubectl taint nodes master1 node-role.kubernetes.io/master=:NoSchedule

给node节点添加污点尽量不会调度

kubectl taint nodes node6 key1=value1:PreferNoSchedule

1.4 去掉node节点的污点

master去掉污点

kubectl taint nodes master1 node-role.kubernetes.io/master-

node节点去掉污点

kubectl  taint nodes node6 key1:NoSchedule-

1.5 查看节点污点

kubectl describe node node6 | grep Taint

容忍

容忍可以让pod对node节点上的污点容忍,容忍的就可以调度部署到node上,否则不调度。

2.1 容忍yml参数

tolerations:
  - key: "key1"
    operator: "Equal"
    value: "value1"
    effect: "NoSchedule"
    tolerationSeconds: 3600
  - key: "key1"
    operator: "Equal"
    value: "value1"
    effect: "NoExecute"
  - key: "key2"
    operator: "Exists"
    effect: "NoSchedule"

key,vaule,effect要与Node上设置的taint保持一致
operator的值为Exists将会忽略value值
tolerationSeconds 用于描述当 Pod 需要被驱逐时可以在 Pod 上继续保留运行的时间

2.2 容忍所有污点

当不指定 key 值时,表示容忍所有的污点 key

tolerations:
- operator: "Exists"

2.3 容忍所有状态污点

当不指定 effect 值时,表示容忍所有的污点状态

tolerations:
- key: "key"
  operator: "Exists"

有多个 Master 存在时,防止资源浪费,可以如下设置(表示k8s将尽量避免将Pod调度到具有该污点的Node上)

kubectl taint nodes Node-Name node-role.kubernetes.io/master=:PreferNoSchedule

节点亲和性,是 pod 的一种属性(偏好或硬性要求),它使 pod 被吸引到一类特定的节点。Taint 则相反,它使 节点 能够 排斥 一类特定的 pod

Taint 和 toleration 相互配合,可以用来避免 pod 被分配到不合适的节点上。每个节点上都可以应用一个或多个 taint ,这表示对于那些不能容忍这些 taint 的 pod,是不会被该节点接受的。如果将 toleration 应用于 pod 上,则表示这些 pod 可以(但不要求)被调度到具有匹配 taint 的节点上

posted @ 2022-03-09 11:34  liwenchao1995  阅读(400)  评论(0编辑  收藏  举报