集群中新增一个Pod后,调度器必须在几秒内为它找到最合适的“家”——也就是物理机或虚拟机节点。这个过程直接决定了你的应用能否平稳运行,也关乎整个集群的资源利用率。
调度不只是找个节点这么简单
在Kubernetes集群中,调度器是核心组件之一。它的工作听起来很简单:给新创建的Pod找个节点运行。但实际情况要复杂得多。一个中型企业的生产集群可能运行着数百个节点,每个节点有不同的硬件配置,每个Pod又有各自的内存、CPU、GPU需求。
2025年CNCF的一份调查显示,超过60%的Kubernetes运维事故与资源调度不当有关。要么是Pod挤在同一台机器上导致性能下降,要么是资源碎片化严重,明明集群有空闲资源,新Pod却调度不上去。这就像春运期间的火车站,售票系统得把旅客合理分配到各个车厢,既不能超载,也不能让有些车厢空着。
默认调度器kube-scheduler的工作机制
Kubernetes默认的调度器叫做kube-scheduler,它运行在控制平面中。当一个Pod被创建后,kube-scheduler会第一时间介入。这个调度器采用两阶段工作法:先过滤出符合条件的节点,再给这些节点打分。
在2026年的Kubernetes v1.30版本中,kube-scheduler已经支持超过30种过滤规则和20种评分策略。整个过程通常在100毫秒内完成,这意味着它每秒钟可以处理上百个Pod的调度请求。Google的一项研究表明,调度延迟每增加10毫秒,大规模集群的资源利用率就会下降约2%。
过滤阶段如何筛选可选节点
过滤阶段就像相亲时的硬性条件筛选。节点必须有足够的CPU和内存剩余,这是最基本的门槛。如果Pod声明需要16GB内存,剩余只有8GB的节点会被直接淘汰。
除了资源要求,还有很多专业过滤器在工作。比如Pod需要访问特定类型的存储卷,那么没有挂载该类型存储的节点就不能入选。Pod如果指定了要运行在某个标签的节点上,其他不符合标签要求的节点也会被剔除。2025年双十一期间,某电商平台通过精细化配置节点过滤器,将大促应用的调度成功率提升了15个百分点。
评分阶段如何选出最优节点
经过过滤阶段后,通常还剩下多个符合条件的节点。这时评分阶段就派上用场了。kube-scheduler会调用一系列评分插件,给每个候选节点打分。评分标准包括资源利用率均衡度、Pod之间是否亲和、节点当前负载情况等。
比如ImageLocalityPriority插件会优先选择已经缓存了所需镜像的节点,这能把Pod启动时间缩短30%以上。InterPodAffinity插件则会把经常通信的Pod调度到同一可用区,减少网络延迟。Netflix的工程团队曾分享,他们通过调整评分权重,将视频转码任务的完成时间缩短了22%。
实际调度中的常见难题
调度并非总能一帆风顺。当找不到符合条件的节点时,Pod会一直处于Pending状态。这种情况在资源紧张时尤其常见。比如一家金融科技公司扩容时创建了50个需要GPU的Pod,但集群只有30块空闲GPU,剩下的20个Pod就只能等待。
另一种棘手情况是资源碎片化。节点上的剩余资源可能既零散又不均衡,比如某个节点还剩8核CPU但内存只有2GB,另一个节点内存充足但CPU只剩下2核。一个需要4核4GB的Pod可能哪个节点都去不了,尽管集群总体资源是够的。美团的技术团队在2025年公开的数据显示,通过引入碎片整理调度策略,他们的集群资源利用率提升了约18%。
自定义调度器的应用场景
虽然kube-scheduler很强大,但特定场景下企业会选择开发自己的调度器。比如机器学习训练任务需要复杂的资源拓扑感知,大数据作业需要考虑数据本地性,这些需求用通用调度器难以完美满足。
字节跳动在2025年开源了他们自研的调度器,专门针对混部场景优化,能把在线服务和离线任务的资源利用率平衡得更好。他们公布的数据显示,相比默认调度器,自定义调度器让整体集群利用率从42%提升到了61%。不过开发自己的调度器并非易事,需要深入理解Kubernetes的调度框架和API交互机制。
你有没有在生产环境中遇到过Pod调度不上去的情况?欢迎在评论区分享你的排查经历,点个赞让更多同行看到这些实战经验。

