Taints(污点):避免Pod调度到特定的Node上
Tolerations(污点容忍): 允许Pod调度到持有Taints的Node上
应用场景:
• 专用节点:根据业务线将Node分组管理,希望在默认情况下不调度该节点,只有配置了污点容忍才允许分配
• 配备特殊硬件:部分Node配有SSD硬盘,GPU,希望在默认情况下不调度该节点,只有配置了污点容忍才允许分配
• 基于Taint的驱逐
污点配置:
给node节点添加污点
kubectl taint node [node] key=value:[effect]
其中key=value 是设定一个污点标签
其中[effect] 可取值:
• NoSchedule :一定不能被调度
• PreferNoSchedule:尽量不要调度,非必须配置容忍
• NoExecute:不仅不会调度,还会驱逐Node上已有的Pod
污点容忍配置:
在pod.yaml中添加配置(spec下级,和containers段同级)
tolerations:
- key: "gpu" #允许容忍的污点标签key(添加节点污点时指定的)
operator: "Equal" #操作符,equal等于
value: "yes" #允许容忍的污点标签value(添加节点污点时指定的)
effect: "NoSchedule" #effect (添加节点污点时指定的)
去掉污点
kubectl taint node [node] key-
例子:
- 一共2台node节点,给node1 和 node2 都打上污点。分别指定两个污点标签gpu=yes,disk=ssd,最后查看pod状态和污点状态
kubectl taint node k8s-node1 gpu=yes:NoSchedule
kubectl taint node k8s-node2 disk=ssd:NoSchedule
#创建个pod
kubectl apply -f pod_taint.yaml
image.png
image.png
上述结果说明,污点配置成功,node1和node2都被打上了污点,当前已无合适的node可分配了。
-
如果在特殊情况下,需要污点机器也可以被分配,就要配置污点容忍。 在上面的情况下,如果让node1还能继续被分配,在pod.yaml添加
image.png
再次创建pod,发现成功分配到了。验证Tolerations
image.png
- 最后再去掉这两台node的污点
kubectl taint node k8s-node1 gpu-
#node/k8s-node1 untainted
kubectl taint node k8s-node2 disk-
#node/k8s-node2 untainted
kubectl describe node|grep Taint
Taints: node-role.kubernetes.io/master:NoSchedule
Taints: <none>
Taints: <none>
网友评论