【Kubernetes】---污点(Taint)与容忍(Toleration)
文章目录
- Kubernetes 污点(Taint)与容忍(Toleration)
- 污点检测与管理
- 查看节点污点
- 添加污点
- 删除污点
- 污点值(Effect)及其作用
- 污点使用示例
- 语法
- 专用GPU节点
- 即将维护的节点
- 高内存需求节点
- 容忍(Toleration)配置
Kubernetes 污点(Taint)与容忍(Toleration)
污点检测与管理
在Kubernetes中,污点(Taint)是节点(Node)上设置的一种属性,用于排斥某些Pod不被调度到该节点上。要检测和管理污点,可以使用以下命令:
查看节点污点
kubectl describe node <node-name> | grep Taints
# 或者
kubectl get node <node-name> -o jsonpath='{.spec.taints}'
添加污点
kubectl taint nodes <node-name> key=value:effect
删除污点
kubectl taint nodes <node-name> key:effect-
# 或者删除特定键的所有污点
kubectl taint nodes <node-name> key-
污点值(Effect)及其作用
Kubernetes中有三种主要的污点效果(Effect):
-
NoSchedule
- 作用:除非Pod具有匹配的容忍(Toleration),否则不会被调度到该节点
- 使用场景:专用节点、特殊硬件节点
一定不被调度
-
PreferNoSchedule
- 作用:系统会尽量避免将Pod调度到该节点,但不是强制性的
- 使用场景:软性隔离,优先但不强制
尽量不被调度
-
NoExecute
- 作用:不仅影响新Pod的调度,还会驱逐节点上已经存在但不容忍该污点的Pod
- 使用场景:节点维护、节点故障、需要立即驱逐Pod的情况
不会调度,并且还会驱逐已有的pod
污点使用示例
语法
kubectl taint nodes <node-name> key=value:污点三个值
专用GPU节点
kubectl taint nodes gpu-node-1 gpu=true:NoSchedule
即将维护的节点
kubectl taint nodes node-1 maintenance=soon:NoExecute
高内存需求节点
kubectl taint nodes memory-node-1 memory=high:PreferNoSchedule
容忍(Toleration)配置
Pod可以通过在spec中添加tolerations
来容忍污点:
tolerations:
- key: "key"operator: "Equal"value: "value"effect: "NoSchedule"
或者容忍所有具有特定键的污点:
tolerations:
- key: "key"operator: "Exists"effect: "NoSchedule"