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:NokuSchedule
kubectl taint nodes node1 key2=value2:NoExecute
kubectl taint nodes node1 key=value:PreferNoSchedule
# 查看节点详细信息
kubectl describe node node1
# 删除污点,这里的key可以不用指定value
kubectl taint nodes node1 key:NoSchedule-
# 去除指定key所有的effect:
kubectl taint nodes node1 key-
NoSchedule : 新的不能容忍的pod不能再调度过来,但是老的运行在node上不受影响
NoExecute :新的不能容忍的pod不能调度过来,老的pod也会被驱逐
PreferNoSchedule :pod会尝试将pod分配到该节点
3,容忍
apiVersion: apps/v1Beta1
kind: Deployment
metadata:
name: nginx-deploy
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
tolerations:
# 能容忍的污点key
- key: "disktype"
# Equal表示key=value,Exists不等于,表示当值不等于下面value正常
operator: "Equal"
# 值
value: "value"
# effect策略,见上面
effect: "NoSchedule"
# 原始的pod多久驱逐,注意只有effect: "NoExecute"才能设置,不然报错,默认300
tolerationSeconds: 3600
containers:
- name: pod-taints
image: busybox:latest
注意:如果pod打上这个污点,那么这个pod就会分配到这个node,其他pod未打污点无法分配,并且old的pod也被驱赶出这个node