k8s调度实际上就是将Pod调度到合适的节点Node的过程,这个过程有k8s调度器kube-scheduler处理。
kube-scheduler内部调度过程分为三个部分:入队、调度、绑定,而每个部分可能有几个阶段组成,本文重点讨论调度部分的过程。
调度部分被设计为是可扩展的,如果内置调度插件不满足调度需要,可以通过实现几个阶段的接口进行扩展。
调度部分包含三大阶段:过滤、打分、选择
过滤阶段
PreFilter
过滤前的预处理阶段
Filter
过滤阶段,根据过滤逻辑以及策略侧配置及请求侧配置进行节点过滤,被过滤的节点不会流转到下个阶段
PostFilter
过滤后的回调阶段
PreScore
打分前的预处理阶段
Score
打分阶段,根据过滤逻辑以及策略侧配置及请求侧配置进行节点打分,每个打分插件都会有一个范围来定义最小和最大分数;
NormalizeScore
根据权重对不同打分插件在打分阶段所生成的分数进行归一化处理
Reserve
保留阶段是为了防止调度程序等待绑定成功时出现竞争情况。如果保留阶段或者后续阶段失败,则会触发取消保留阶段。
Permit
在Pod调度周期结束时调用,可以决定Pod是否进入下个阶段