[源码分析-kubernetes]scheduler调度器源码解析

scheduler调度器源码解析

kube-scheduler是K8s集群的三大重要组件之一,负责集群运行的所有容器的调度工作,深入理解该组件可以说是入门k8s源码的灵魂所在;本文基于hutao大神的文章加入自己的理解对该组件进行深入的源码解析:
0. scheduler是一个多实例高可用选主的组件,同一个时间只有一个容器提供调度服务

  1. Run方法启动一个go协程:不停的执行scheduler.scheduleOne,输入容器信息 输出推荐节点 串行!
  2. 第一步进入初选过程 输入为一个pod 和从nodelistener中获取的所有node,之后会启动最多16个协程 来分别判定某个node
    是否满足该pod的部署条件 协程之前按通过管道通信
  3. 每个node都会调用相应的所有初选函数来判断节点是否适合部署,任一一个出现问题则节点被过滤: 比如节点是否ready 节点是否有
    可用端口 是否满足选择器的要求 磁盘 cpu 内存是否有压力等
  4. 对所有节点并发调用所有优选函数 计算每个节点在某个函数上的分值 然后根据权重计算最终节点获取的分数 会获得一个nodelist 然后获取这个list中最高分的节点作为部署节点
  5. 如果有配置priorityclass 会进入抢占调度逻辑
  6. 启动协程去绑定这个节点 重新进入下一个pod的scheduleOne逻辑

原文章相关链接:
gitbook:https://farmer-hutao.github.io/k8s-source-code-analysis/
github:https://hub.fastgit.org/daniel-hutao/k8s-source-code-analysis

文章目录

  1. 调度器设计
  2. 调度程序启动前逻辑
  3. 调度器框架
  4. 一般调度过程
  5. 预选过程
  6. 优选过程
  7. 抢占调度
  8. 调度器初始化
  9. 专题-亲和性调度
posted @ 2021-10-05 19:44  backTraced  阅读(183)  评论(0编辑  收藏  举报