Administrator
发布于 2026-08-17 / 1 阅读
0
0

第八章.k8s调度器-容忍与污点-2

来源链接:https://www.bilibili.com/video/BV1PbeueyE8V?spm_id_from=333.788.videopod.episodes&vd_source=d8c71ff24a3359a807967fc4b5daa0e4&p=61

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种常见模式:

  1. 精确匹配模式:operator设为Equal,需要同时指定key、value、effect三个字段,仅当节点的污点三个属性完全匹配时,容忍才会生效
  2. 存在匹配模式(不指定value):operator设为Exists,无需填写value字段,只要节点存在对应key的污点,无论污点的value和effect是什么,容忍都会生效
  3. 存在匹配模式(不指定effect):operator设为Exists,填写key但不填写effect,代表兼容该key下所有effect类型的污点
  4. 全污点容忍模式: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资源的问题:

  1. 给GPU节点添加污点:例如配置cloud.google.com/gpu=GPU:NoSchedule,默认情况下没有对应容忍的Pod不会被调度到GPU节点
  2. 给GPU业务Pod添加对应容忍:匹配污点的key、value、effect,允许Pod调度到GPU节点
  3. 额外配置节点亲和(nodeAffinity):强制要求Pod必须调度到带有cloud.google.com/gpu=GPU标签的节点,避免其他节点评分更高时,GPU业务Pod被调度到非GPU节点,保证业务可以正常获取GPU资源
    该组合方案是GPU节点调度的最优实践,同时实现了节点隔离和业务资源保障。

AI 总结

本小节系统讲解了Kubernetes污点与容忍的核心概念、配置逻辑及实践应用:污点通过3种Effect类型实现节点调度约束,容忍是Pod对污点的豁免机制,二者结合可实现节点资源隔离、集群稳定性保障等核心需求;同时结合多主集群Master节点优化、GPU节点调度等真实场景,演示了配置方法与效果验证,帮助掌握污点容忍在生产环境中的落地用法。


评论