其他分享
首页 > 其他分享> > 污点和容忍度

污点和容忍度

作者:互联网

污点:主体是node,在node上标记特定的键值对,以此来标识该node的特殊属性
容忍度:主体是pod,当pod被调度到有污点的node时,该pod能否容忍node的污点标记

在查看master节点的信息

~]# kubectl describe node master-node | grep Taints
Taints:     node-role.kubernetes.io/master:NoSchedule

可以看到master的节点集群在创建时已经被自动标记了taint,保证了创建未经指定容忍度的pod时,不会调度到master节点

节点污点

三种类型:

污点设置:

kubectl taint nodes node2 test=slave:NoSchedule

撤销污点:

kubectl taint nodes node2 test:NoSchedule-

pod容忍度

当node已经设定了污点,通过设置容忍度将pod调度到相应的节点上

示例:

...
tolerations:
  - key: "key"
    operator: "Equal" 
    value: "value"
    effect: "NoScheduale"
...

operator: 没指定默认为Equal,当为Equal时value必须指定并且key的值和vaule的值匹配才能执行,当为Exists时可以不写value

此外,空的 key(是指key没有指定,而不是指key为空字符串) 如果再配合operator Exists 就能匹配所有的 key 与 value,也是能容忍所有 node 的所有 Taints,空的 effect 匹配所有的 effect

当配置NoExecute时,pod可以通过设定tolerationSeconds(秒),表示pod可以容忍该节点并在该节点继续运行指定的时间

比如,一个使用了很多本地状态的应用程序在网络断开时,仍然希望停留在当前节点上运行一段较长的时间, 愿意等待网络恢复以避免被驱逐。在这种情况下,Pod 的容忍度可能是下面这样的:

tolerations:
- key: "node.kubernetes.io/unreachable"
  operator: "Exists"
  effect: "NoExecute"
  tolerationSeconds: 6000

在k8s的集群中,当某种条件为真时,节点控制器会自动给节点添加一个污点。包括如下:

daemonset 容忍度的添加

DaemonSet 控制器自动为所有守护进程添加如下 NoSchedule 容忍度(不同版本有差别)以防 DaemonSet 崩溃:

另外:在集群运行的过程中当节点由于资源的紧缺,会出现集群自动将资源紧缺的节点标记污点,让无法忍受的pod自动剥离该node

标签:node,kubernetes,io,容忍度,污点,Pod,节点
来源: https://www.cnblogs.com/ymei/p/13691983.html