Kubernetes 调度器

959 阅读2分钟

概览 image.png

时机 image.png

调度分类 image.png

分级调度 拥有当前集群所有的资源, 并发的调度集回写状态, 如果发生锁冲突就进行重试

image.png

数据本地化, 启动worker处理数据, 本地启动 worker 远程启动job 远程传输文件 会存在效率问题, 哪里有数据 就将job下发到哪里, 将执行代码copy到目标节点

反相似 cpu密集 IO密集的任务混合到一起 这样不会存在资源的争抢

image.png

监听apiserver 还未分配节点的pod 然后根据调度策略 将pod绑定到节点(node)

调度阶段&绑定阶段

image.png

percidate预选 将不满足需求的节点过滤掉

每一个阶段 里面实现了很多的SQL(扩展点) 其实就是framework + 插件

调度插件 fit.go image.png pod--container 根据container的需求 计算pod需要的资源

leastallocate 哪个节点已经分配的少 谁的分配资源少 谁的优先级就高 mosttallocate 谁的分配资源多 谁的优先级就高

percidate工作原理

image.png 所有的插件并行顺序执行, 所有的插件都过滤完成 剩下的就是结果

资源分配

image.png 左边的 pod的需求 右边 节点上的资源情况(已经用的、总量)

进程调度

image.png

流量控制

例如节点8c (分时复用)

控制container使用cpu的资源

period = 10W ms的周期中

业务能用的ms /10W ms

控制使用比例

cpu争抢的时候 会按照1:2的比例争抢资源

node selecter

image.png

带SSD卡的机器 打一个lable pod支持node selecter 可以选择具有哪些lable的机器

Node affinity(建议使用)

image.png

更灵活

  • in not
  • 策略控制
    • require 必选 硬性的亲和指标
    • preferred 优选 软性的亲和指标(软亲和)

DuringScheduler首次调度的时候需要亲和的指标 DuringExecution 运行期间是否还满足亲和要求 如果不满足要求的时候 会重新进行调度 DuringIgnore 不需要管

污点

保证业务不被调度到这个节点 image.png

priority class

image.png

高优业务优先被调用 高优的资源 可以 让低优的资源 被清除掉

重调度

image.png

任务执行的过程中 持续的监听集群 如果存在调度策略 违法、异常 需要将pod驱逐掉 重新走调度器 找一个更合适的节点

扩展调度器

image.png

额外的服务跑到一个webhook中 extender

基于 framework扩展 image.png

动态调度

image.png 负载感知调度 例如设置调度水位 cpu70% 通过promethues监控 如果超过cpu70% 停止调度到改节点 将超过目标水位的节点过滤掉, 优先将业务调度到负载低的节点 解决负载不均衡的问题

image.png

image.png 为了提升cpu和内存