26.TaintToleration(污点和容忍)

TaintToleration(污点和容忍)

Taint(污点)和Toleration(容忍)可以作用于nodepod上,其目的是优化pod在集群间的调度,这跟节点亲和性类似,只不过它们作用的方式相反,具有taintnodepod是互斥关系,而具有节点亲和性关系的nodepod是相吸的。另外还有可以给node节点设置label,通过给pod设置 nodeSelectorpod调度到具有匹配标签的节点上。

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

示例

以下分别以为node设置taint和为pod设置toleration为例。

node设置taint

node1设置taint

kubectl taint nodes node1 key1=value1:NoSchedule
kubectl taint nodes node1 key1=value1:NoExecute
kubectl taint nodes node1 key2=value2:NoSchedule

删除上面的taint

kubectl taint nodes node1 key1:NoSchedule-
kubectl taint nodes node1 key1:NoExecute-
kubectl taint nodes node1 key2:NoSchedule-

查看node1上的taint

kubectl describe nodes node1

pod设置toleration

只要在podspec中设置tolerations字段即可,可以有多个 key,如下所示:

tolerations:
  - key: "key1"
    operator: "Equal"
    value: "value1"
    effect: "NoSchedule"
  - key: "key1"
    operator: "Equal"
    value: "value1"
    effect: "NoExecute"
  - key: "node.alpha.kubernetes.io/unreachable"
    operator: "Exists"
    effect: "NoExecute"
    tolerationSeconds: 6000
  • value 的值可以为 NoSchedule PreferNoScheduleNoExecute
  • tolerationSeconds 是当pod需要被驱逐时,可以继续在node上运行的时间。

详细使用方法请参考官方文档

参考

上一页
下一页