1. 污点核心概念与Effect类型
污点(Taint)是添加在Node上的属性,用于标记节点不适合运行特定Pod,只有配置了对应容忍(Toleration)的Pod才能被调度到带污点的节点上,污点的调度约束由Effect字段决定,共3种类型:
- NoSchedule(不能调度):不匹配容忍的Pod完全不会被调度到该节点,属于硬约束,是最常用的污点策略
- PreferNoSchedule(尽可能不调度):软约束,当其他节点均能满足Pod的资源需求时,调度器会尽量不将Pod调度到该节点;仅当其他节点均无法承载Pod时,才会调度到该节点
- NoExecute(不能运行/驱离):不仅会阻止不匹配容忍的新Pod调度到节点,还会将节点上已存在的不匹配容忍的Pod驱逐出节点。驱逐前会通过
tolerationSeconds参数给Pod预留迁移时间,例如设置为3600秒,代表Pod可在节点上停留1小时再被驱逐,避免直接驱逐导致业务瞬间中断,比直接断电更稳妥。适用场景为节点维护、物理机迭代更新、硬件损坏前主动迁移业务。
2. 容忍核心概念
容忍是Pod的配置属性,用于声明Pod可以接受哪些污点,设置了对应容忍的Pod会忽略匹配的污点约束,可以被调度到带该污点的节点上,相当于对应污点对该Pod失效。
3. 容忍配置方式
容忍的配置根据operator字段的不同,分为4种常见模式:
- 精确匹配模式:
operator设为Equal,需要同时指定key、value、effect三个字段,仅当节点的污点三个属性完全匹配时,容忍才会生效 - 存在匹配模式(不指定value):
operator设为Exists,无需填写value字段,只要节点存在对应key的污点,无论污点的value和effect是什么,容忍都会生效 - 存在匹配模式(不指定effect):
operator设为Exists,填写key但不填写effect,代表兼容该key下所有effect类型的污点 - 全污点容忍模式:
key、value、effect均不填写,仅指定operator为Exists,代表容忍节点上的所有污点,对所有污点约束都不做限制。
4. 多主集群Master节点污点调整实践
Kubernetes默认会给Master节点添加node-role.kubernetes.io/control-plane:NoSchedule的污点,避免业务Pod调度到Master节点,保障集群控制面稳定性,但多主集群场景下可调整污点策略兼顾资源利用率:
- 若直接移除Master节点的污点,业务Pod会大量调度到Master节点,导致Master负载过高,一旦Master故障会影响整个集群可用性,不合理
- 合理方案是将Master节点的污点
effect从NoSchedule调整为PreferNoSchedule:Master节点负载较低、工作节点可承载全部业务时,业务Pod不会调度到Master;工作节点负载过高时,调度器会将部分Pod调度到Master节点,既保障了集群冗余稳定性,又提升了节点资源利用率 - 视频中做了实验验证:在单节点Minikube集群中调整Master污点为
PreferNoSchedule后,部署100副本的Nginx Pod,所有Pod均调度到工作节点,Master无Pod运行;将副本数调整为300时,工作节点无法承载,开始有Pod调度到Master节点,符合PreferNoSchedule的软约束特性 - 注意:该调整仅适用于多主集群,单主集群无Master冗余,不建议调整,避免Master过载导致集群不可用。
5. 实际场景:GPU节点调度配置
针对需要GPU资源的业务Pod调度需求,需结合污点、容忍、节点亲和三类配置共同实现,避免普通Pod占用GPU节点、GPU业务Pod无法获取GPU资源的问题:
- 给GPU节点添加污点:例如配置
cloud.google.com/gpu=GPU:NoSchedule,默认情况下没有对应容忍的Pod不会被调度到GPU节点 - 给GPU业务Pod添加对应容忍:匹配污点的
key、value、effect,允许Pod调度到GPU节点 - 额外配置节点亲和(nodeAffinity):强制要求Pod必须调度到带有
cloud.google.com/gpu=GPU标签的节点,避免其他节点评分更高时,GPU业务Pod被调度到非GPU节点,保证业务可以正常获取GPU资源
该组合方案是GPU节点调度的最优实践,同时实现了节点隔离和业务资源保障。
AI 总结
本小节系统讲解了Kubernetes污点与容忍的核心概念、配置逻辑及实践应用:污点通过3种Effect类型实现节点调度约束,容忍是Pod对污点的豁免机制,二者结合可实现节点资源隔离、集群稳定性保障等核心需求;同时结合多主集群Master节点优化、GPU节点调度等真实场景,演示了配置方法与效果验证,帮助掌握污点容忍在生产环境中的落地用法。