美文网首页kubernetes
K8S 核心组件 Scheduler

K8S 核心组件 Scheduler

作者: 陈sir的知识图谱 | 来源:发表于2019-07-18 16:39 被阅读0次

scheduler 的作用

将待调度的 POD (API 新创建的 POD, Controller manager 为补足副本而创建的 POD 等) 按照特定的调度算法和调度策略绑定(Binding) 到集群中某个合适的NODE, 上并将信息写入etcd 中, 在调度过程中涉及三个对象, 待调度 POD 列表, 可用 Node 列表 以及 调度算法和策略。

Scheduler 流程

image.png

默认调度流程如下:

  1. 预选调度:遍历所有目标 Node, 筛选出符合要求的节点。
  2. 优选调度:确定最优节点,在第一步的基础上,采用优选策略(xxx Priority)计算出每个候选节点的积分, 积分最好的生出。

Scheduler 调度流程通过插件方式加载的调度算法提供者(AlgorithmProvider)具体实现。一个AlgorithmProvider 包含一组预选调度策略与一组优选策略

预算策略说明

NoDiskConflict

判断备选 pod 的GcePersistentDisk 或 AwsElasticBlockStore 和备选的节点中已存在的pod 是否存在冲突。

  1. 首选读取备选pod的所有volume值(pod.spec.volumes), 对每个Volume执行以下冲突检测
    1. 如果Volume 是GcePersistentDisk, 则将Volume 和备选节点上的所有 Pod 的每个Volume 进行比较, 如果发现相同的GcePersistentDisk, 则返回false, 如果该Volume 是 AwsElasticBlockStore , 则将Volume 和备选节点所有 pod 的每个Volume 进行比较, 如果发现相同的的 AwsElasticBlockStore , 返回false。
    2. 如果均未发现冲突,返回true。

PodFitsResources

判断备选节点资源是否满足 Pod 需求

  1. 计算备选 Pod 和节点中已存在的 Pod 的所有容器的资源需求(cpu 内存)的总和
  2. 获得备选几点的状态信息,其中包含节点资源信息。
  3. 如果资源不满足则返回false, 如果满足返回true

PodSelectorMatches

判断备选节点是否包含备选 Pod 的标签选择器指定的标签。

  1. 如果pod 没有指定 spec.nodeSelector ,则返回true

  2. 如果pod 有指定 spec.nodeSelector, 则判断节点是否包含 pod 指定的标签, 如果有就返回true 否则返回 false

PodFirstHost

判断备选 Pod 的 spec.nodeName 所指定的节点名称和备选节点的名称是否一致,一致返回true 否则返回 false

CheckNodeLabelPresence

如果用户在配置文件中指定了该策略, Scheduler 会通过 RegisterCustomFitPredicate 方法注册该策略。 该策略用于判断策略列出的标签在备选节点中存在时,是否选择该节点。

  1. 读取备选节点中的标签列表
  2. 如果策略配置的标签列表在备选节点的标签列表中,且策略配置的Presence为false,则返回false ,否则返回true; 如果策略配置的标签列表在备选节点的标签列表中不存在,Presence 的值为true, 则返回false, 否则返回true

CheckServiceAffinity

如果用户在配置文件中指定了该策略, Scheduler 会通过 RegisterCustomFitPredicate 方法注册该策。该策略用于判断备选节点是否包含策略配置的标签, 或包含和备选 Pod 在相同 service, Namespace 下的 Pod 所在节点的标签列表。 如果存在,则返回true,否则返回false

PodFitsPorts

判断备选 Pod 所用的端口,在备选节点中是否被占用。如果占用返回false ,否则返回true

优选策略说明

leastRequestedPriority

从备选节点中选出资源消耗最小的节点

  1. 计算出所有备选节点上运行的 pod 和备选 pod的 cpu 占用量 totalMilliCPU
  2. 计算出所有备选节点上运行的 pod 和备选 pod的内存用量 totalMemory
  3. 计算每个节点的得分,公式为 score=int(((nodeCpuCapcity-totalMilliCpu)*10)/nodeCpuCapacity+()(nodeMemoryCapacity-totalMemory)*10)/ NodeCpuMemory/2)

CalculateNodeLabelPriority

用于判断策略列出的标签在备选节点中存在时,是否选择该节点,如果备选节点上标签在优选策略标签列表中存在,且Presence 为true, 或者备选节点上标签不再优选策略标签列表中且Presence为false, 则备选节点score=10 否则 score=0

BalanceResourceAllocation

选出资源使用率最均匀的节点

  1. 计算备选节点上pod+待分配pod 所占资源(CPU, MEMORY)的总量
  2. 计算得分,公式为score=int(10-math.Abs(totalMilliCPU/nodeCpuCapacity-totalMemory/nodeMemoryCapacity)*10)

相关文章

网友评论

    本文标题:K8S 核心组件 Scheduler

    本文链接:https://www.haomeiwen.com/subject/qvollctx.html