1,Taint介绍
Taint(污点)和 Toleration(容忍)可以作用于 node 和 pod 上,其目的是优化 pod 在集群间的调度,这跟节点亲和性类似,只不过它们作用的方式相反,具有 taint 的 node 和 pod 是互斥关系,而具有节点亲和性关系的 node 和 pod 是相吸的。另外还有可以给 node 节点设置 label,通过给 pod 设置 nodeSelector 将 pod 调度到具有匹配标签的节点上。Taint 和 toleration 相互配合,可以用来避免 pod 被分配到不合适的节点上。每个节点上都可以应用一个或多个 taint ,这表示对于那些不能容忍这些 taint 的 pod,是不会被该节点接受的。如果将 toleration 应用于 pod 上,则表示这些 pod 可以(但不要求)被调度到具有相应 taint 的节点上。
2,污点
# node打污点的三种类型kubectl taint nodes node1 key1=value1:NokuSchedulekubectl taint nodes node1 key2=value2:NoExecutekubectl taint nodes node1 key=value:PreferNoSchedule# 查看节点详细信息kubectl describe node node1# 删除污点,这里的key可以不用指定valuekubectl taint nodes node1 key:NoSchedule-# 去除指定key所有的effect:kubectl taint nodes node1 key-
NoSchedule : 新的不能容忍的pod不能再调度过来,但是老的运行在node上不受影响
NoExecute :新的不能容忍的pod不能调度过来,老的pod也会被驱逐
PreferNoSchedule :pod会尝试将pod分配到该节点
3,容忍
apiVersion: apps/v1Beta1kind: Deploymentmetadata:name: nginx-deployspec:replicas: 1selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxtolerations:# 能容忍的污点key- key: "disktype"# Equal表示key=value,Exists不等于,表示当值不等于下面value正常operator: "Equal"# 值value: "value"# effect策略,见上面effect: "NoSchedule"# 原始的pod多久驱逐,注意只有effect: "NoExecute"才能设置,不然报错,默认300tolerationSeconds: 3600containers:- name: pod-taintsimage: busybox:latest
注意:如果pod打上这个污点,那么这个pod就会分配到这个node,其他pod未打污点无法分配,并且old的pod也被驱赶出这个node
