scheduler 的作用
将待调度的 POD (API 新创建的 POD, Controller manager 为补足副本而创建的 POD 等) 按照特定的调度算法和调度策略绑定(Binding) 到集群中某个合适的NODE, 上并将信息写入etcd 中, 在调度过程中涉及三个对象, 待调度 POD 列表, 可用 Node 列表 以及 调度算法和策略。
Scheduler 流程
![](https://img.haomeiwen.com/i5120230/f7e5c93a409d3afe.png)
默认调度流程如下:
- 预选调度:遍历所有目标 Node, 筛选出符合要求的节点。
- 优选调度:确定最优节点,在第一步的基础上,采用优选策略(xxx Priority)计算出每个候选节点的积分, 积分最好的生出。
Scheduler 调度流程通过插件方式加载的调度算法提供者(AlgorithmProvider)具体实现。一个AlgorithmProvider 包含一组预选调度策略与一组优选策略
预算策略说明
NoDiskConflict
判断备选 pod 的GcePersistentDisk 或 AwsElasticBlockStore 和备选的节点中已存在的pod 是否存在冲突。
- 首选读取备选pod的所有volume值(pod.spec.volumes), 对每个Volume执行以下冲突检测
- 如果Volume 是GcePersistentDisk, 则将Volume 和备选节点上的所有 Pod 的每个Volume 进行比较, 如果发现相同的GcePersistentDisk, 则返回false, 如果该Volume 是 AwsElasticBlockStore , 则将Volume 和备选节点所有 pod 的每个Volume 进行比较, 如果发现相同的的 AwsElasticBlockStore , 返回false。
- 如果均未发现冲突,返回true。
PodFitsResources
判断备选节点资源是否满足 Pod 需求
- 计算备选 Pod 和节点中已存在的 Pod 的所有容器的资源需求(cpu 内存)的总和
- 获得备选几点的状态信息,其中包含节点资源信息。
- 如果资源不满足则返回false, 如果满足返回true
PodSelectorMatches
判断备选节点是否包含备选 Pod 的标签选择器指定的标签。
-
如果pod 没有指定 spec.nodeSelector ,则返回true
-
如果pod 有指定 spec.nodeSelector, 则判断节点是否包含 pod 指定的标签, 如果有就返回true 否则返回 false
PodFirstHost
判断备选 Pod 的 spec.nodeName 所指定的节点名称和备选节点的名称是否一致,一致返回true 否则返回 false
CheckNodeLabelPresence
如果用户在配置文件中指定了该策略, Scheduler 会通过 RegisterCustomFitPredicate 方法注册该策略。 该策略用于判断策略列出的标签在备选节点中存在时,是否选择该节点。
- 读取备选节点中的标签列表
- 如果策略配置的标签列表在备选节点的标签列表中,且策略配置的Presence为false,则返回false ,否则返回true; 如果策略配置的标签列表在备选节点的标签列表中不存在,Presence 的值为true, 则返回false, 否则返回true
CheckServiceAffinity
如果用户在配置文件中指定了该策略, Scheduler 会通过 RegisterCustomFitPredicate 方法注册该策。该策略用于判断备选节点是否包含策略配置的标签, 或包含和备选 Pod 在相同 service, Namespace 下的 Pod 所在节点的标签列表。 如果存在,则返回true,否则返回false
PodFitsPorts
判断备选 Pod 所用的端口,在备选节点中是否被占用。如果占用返回false ,否则返回true
优选策略说明
leastRequestedPriority
从备选节点中选出资源消耗最小的节点
- 计算出所有备选节点上运行的 pod 和备选 pod的 cpu 占用量 totalMilliCPU
- 计算出所有备选节点上运行的 pod 和备选 pod的内存用量 totalMemory
- 计算每个节点的得分,公式为
score=int(((nodeCpuCapcity-totalMilliCpu)*10)/nodeCpuCapacity+()(nodeMemoryCapacity-totalMemory)*10)/ NodeCpuMemory/2)
CalculateNodeLabelPriority
用于判断策略列出的标签在备选节点中存在时,是否选择该节点,如果备选节点上标签在优选策略标签列表中存在,且Presence 为true, 或者备选节点上标签不再优选策略标签列表中且Presence为false, 则备选节点score=10 否则 score=0
BalanceResourceAllocation
选出资源使用率最均匀的节点
- 计算备选节点上pod+待分配pod 所占资源(CPU, MEMORY)的总量
- 计算得分,公式为
score=int(10-math.Abs(totalMilliCPU/nodeCpuCapacity-totalMemory/nodeMemoryCapacity)*10)
网友评论