一 解释:
NodeAffinity节点亲和性,是Pod上定义的一种属性,使Pod能够按我们的要求调度到某个Node上,而Taints则恰恰相反,它可以让Node拒绝运行Pod,甚至驱逐Pod。
Taints(污点)是Node的一个属性,设置了Taints(污点)后,因为有了污点,所以Kubernetes是不会将Pod调度到这个Node上的,
于是Kubernetes就给Pod设置了个属性Tolerations(容忍),只要Pod能够容忍Node上的污点,那么Kubernetes就会忽略Node上的污点,就能够(不是必须)把Pod调度过去。
因此 Taints(污点)通常与Tolerations(容忍)配合使用。
二 添加污点
kubectl taint node [node] key=value[effect]
其中[effect] 可取值: [ NoSchedule | PreferNoSchedule | NoExecute ]
NoSchedule :一定不能被调度。
PreferNoSchedule:尽量不要调度。
NoExecute:不仅不会调度,还会驱逐Node上已有的Pod。
示例:kubectl taint node 172.20.8.22 test=22:NoSchedule
三 取消污点
比如设置污点:
kubectl taint node 172.20.8.22 test=22:NoSchedule
kubectl taint node 172.20.8.22 test=22:NoExecute
去除指定key及其effect:
kubectl taint nodes node_name key:[effect]- #(这里的key不用指定value)
[effect] 值: [ NoSchedule | PreferNoSchedule | NoExecute ]
去除指定key所有的effect:
kubectl taint nodes node_name key-
示例:
kubectl taint node 172.20.8.22 test:NoSchedule-
kubectl taint node 172.20.8.22 test:NoExecute-
kubectl taint node 172.20.8.22 test-
四 举例
1.设置污点
kubectl taint node 172.20.8.22 test=22:NoSchedule
2.设置容忍
apiVersion: v1
kind: Pod
metadata:
name: pod-taints
labels:
os: tomcat
spec:
tolerations: #设置容忍性
- key: “test”
operator: “Equal”
#如果操作符为Exists,那么key、value属性可省略,如果不指定operator,则默认为Equal
value: “22” #value可以省略
effect: “NoSchedule”
#意思是这个Pod要容忍的有污点的Node的key是test Equal value是22,效果是NoSchedule,
#tolerations属性下各值必须使用引号,容忍的值都是设置Node的taints时给的值。
containers: - name: pod-tains
image: 172.16.16.21/library/tomcat:latest
3.说明
3.1 容忍所有NoSchedule污点
Tolerations属性:空的key 如果再配合Exists 就能匹配所有的key与value ,也是是能容忍所有node的所有Taints
3.2 空的effect 匹配所有的effect
3.3 立即驱逐NoExecute,可以设置宽容时间,容忍时间到了,才会驱散
#设置Pod的宽限时间
spec:
tolerations: #设置容忍性
- key: “test”
operator: “Equal” #如果操作符为Exists,那么value属性可省略
value: “22”
effect: “NoExecute”
tolerationSeconds: 180
#如果运行此Pod的Node,被设置了具有NoExecute效果的Taint(污点),这个Pod将在存活180s后才被驱逐。
#如果没有设置tolerationSeconds字段,将永久运行。
3.4 多个污点需要多个容忍,才能调度
3.5 类型DaemonSet的容器运行的node设置污点,该容器消失后不会在其他节点新建(注意)。
五 查看和修改
1.查看
执行kubectl get node 172.20.8.22 -o yaml
2.修改
kubectl edit node 172.20.8.22
修改后执行 :wq 保存退出
修改成功
六 参考文档
https://cloud.tencent.com/info/21f27eb131873f979d6275f085dfabdc.html
https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/(官网很详细)