结论:kube-scheduler 监听未绑定节点的 Pending Pod,通过过滤(Filtering)筛出可行节点、打分(Scoring)排序,选最高分节点执行 Bind,整个过程基于调度框架(Scheduling Framework)的插件化扩展点。

展开:过滤阶段插件包括:NodeResourcesFit(按 Pod requests 检查 CPU/内存是否够,注意是 requests 不是实际用量)、NodeName、TaintToleration(污点与容忍)、NodeAffinity、VolumeBinding(PVC 对应 PV 的拓扑与可用性)、PodTopologySpread(拓扑分布约束)。打分阶段按权重排序,如 NodeResourcesBalancedAllocation 偏好 CPU/内存使用均衡的节点。高级调度能力:nodeSelector/nodeAffinity 做节点定向,taints/tolerations 做节点驱逐与专用节点(如 GPU 池),podAffinity/antiAffinity 控制 Pod 间聚散(常用反亲和把同应用副本打散到不同可用区),topologySpreadConstraints 是更灵活的替代。要点与追问:1)调度只看 requests,requests 虚高会造成节点实际很闲但调度不上新 Pod;2)调度是一次性决策,之后节点变忙不会自动迁移,需要 descheduler 重平衡;3)Pending Pod 排障先看 kubectl describe pod 的 FailedScheduling 事件;4)bind 后 kubelet 的 admission(驱逐检查)仍可能拒绝,表现为调度成功但起不来。