本文主要介绍一下kube-scheduler的架构,简要说明一下各个模块的作用,后面会单独详细分析每个模块。架构图如下

监听资源
kube-scheduler会通过client-go提供的informer机制监听如下几种k8s的资源变化,相关代码可参考: //pkg/scheduler/eventhandlers.go:addAllEventHandlers
a. Node资源
kube-scheduler的主要目的是给未调度的pod找到合适的node,所以kube-scheduler必须得知道所有的node信息,这里通过监听node资源的增删改事件将node信息保存到cache中

b. Pod资源
kube-scheduler的主要目的是给未调度的pod找到合适的node,所以kube-scheduler必须得监听pod资源,未调度的pod指的是pod.Spec.NodeName字段为空的pod,监听到此种pod后,将根据queueSort提供的排序方法进行排序后(按照pod优先级和创建时间),插入ActiveQ中,等待被调度。对于pod.Spec.NodeName字段不为空的pod,又分为两种情况,一种是在创建pod时,显式指定了此pod所在node,另一种情况是调度成功并且bind node成功的pod,对于这种pod将其加入cache中

c. PV/PVC等资源
这里主要是监听影响pod调度的资源,比如PV等pod需要的资源。如果这些资源有变化可能导致之前调度失败的pod成功,所以需要调用MoveAllToActiveOrBackoffQueue将不可调度队列中的pod移动到ActiveO或者BackoffQueue队列

cache
cache主要用来缓存从apiserver监听到的所有的node信息,及node上所有的pod,可参考代码://pkg/scheduler/internal/cache/cache.go。
之前看informer机制源码时,其内部也有cache,缓存的是监听的所有资源信息,包括node和pod,为什么这里要再搞一个cache?我想有两个原因:
a. informer里的cache保存的资源都是分开的,比如想获取某个node上的所有pod,必须遍历所有的pod找到属于这个node的pod。而这里的cache在资源变化时已经将pod按node保存了,所以查找速率更快
b. 这里的cache中node上的信息不仅包括已经成功运行的pod的资源,也包括那些调度成功,但正在bind阶段的pod资源,因为bind过程是异步进行的,schedule调度时必须考虑这些pod所占用的node资源

queue
主要包括三个队列,可参考代码://pkg/scheduler/internal/queue/scheduling_queue.go
a. activeQ
此队列中的pod是正在等待被调度的pod,并且是有序队列,pod优先级高(如果优先级相同,则先创建的pod)的在队列头
b. podBackoffQ
pod退避队列,此队列中的pod是调度失败的pod,等到退避时间到后就会被移动到activeQ,也是有序队列,根据退避时间排序
c. unschedulableQ
此队列保存的是尝试调度但失败的pod

framework
framework是一个调度框架,里面保存着每个扩展点上的插件。

schedulealgorithm
调度算法的目的是根据输入的node列表和pod信息,找到适合pod的node并返回,此过程中会调用framework的prefilter,filter,postfilter,prescore和score五个扩展点上的插件。

下图为调度器数据结构,Scheduler为调度器,其中包括了cache,queue,调度算法和framework等几个接口,每个接口都有其对应的实现

kube-scheduler 架构概述相关推荐

  1. NVIDIA CUDA初级教程(P2-P3)CPU体系架构概述、并行程序设计概述

    文章目录 1.CPU体系架构概述 2.并行程序设计概述 1.CPU体系架构概述 现代CPU架构 CPU的定义 (1)执行指令.处理数据的器件:完成基本的逻辑和算术指令 (2)内存接口.外部设备接口 ( ...

  2. Scrapy 框架介绍 [Scrapy 框架概述][Scrapy 框架的特点][Scrapy 框架的架构概述]

    您的"关注"和"点赞",是信任,是认可,是支持,是动力- 如意见相佐,可留言. 本人必将竭尽全力试图做到准确和全面,终其一生进行修改补充更新. 文章目录 1 S ...

  3. 1小时学会:最简单的iOS直播推流(二)代码架构概述

    最简单的iOS 推流代码,视频捕获,软编码(faac,x264),硬编码(aac,h264),美颜,flv编码,rtmp协议,陆续更新代码解析,你想学的知识这里都有,愿意懂直播技术的同学快来看!! 源 ...

  4. NR 5G 安全架构概述

    安全架构概述 安全域 安全体系结构概述 该图说明了以下安全域: 网络接入安全性(I):一组安全功能,使UE能够安全地通过网络进行身份验证和接入服务,包括3GPP接入和非3GPP 接入,特别是防止对(无 ...

  5. netty系列之:netty架构概述

    文章目录 简介 netty架构图 丰富的Buffer数据机构 零拷贝 统一的API 事件驱动 其他优秀的特性 总结 简介 Netty为什么这么优秀,它在JDK本身的NIO基础上又做了什么改进呢?它的架 ...

  6. Java生鲜电商平台-微服务架构概述

    Java生鲜电商平台-微服务架构概述 单体架构存在的问题 在传统的软件技术架构系统中,基本上将业务功能集中在单一应用内,或者是单一进程中.尽管现代化的软件架构理论以及设计原则已推广多年,但实际技术衍化 ...

  7. Nvidia CUDA初级教程4 GPU体系架构概述

    Nvidia CUDA初级教程4 GPU体系架构概述 视频:https://www.bilibili.com/video/BV1kx411m7Fk?p=5 讲师:周斌 本节内容: 为什么需要GPU 三 ...

  8. LAMP+LNMP(一) LAMP架构概述

    一.LAMP架构概述 LAMP就是 Linux.Apache(httpd).MySQL.PHP四个东东的统称,我们常见的大部分网站都是由这个体系提供的,比如google.Taobao.51CTO等等. ...

  9. Kafka概念和基本架构概述

    Kafka概念和基本架构概述 一.Kafka介绍 Kafka是最初由 Linkedin 公司开发,是一个 分布式.分区的.多副本的.多生产者.多订阅者,基于zookeeper协调的分布式日志系统(也可 ...

  10. 【TA-霜狼_may-《百人计划》】图形2.7.2 GPU硬件架构概述

    [TA-霜狼_may-<百人计划>]图形2.7.2 GPU硬件架构概述 @[TOC]([TA-霜狼_may-<百人计划>]图形2.7.2 GPU硬件架构概述 GPU是什么 GP ...

最新文章

  1. 模块--random
  2. Windows下搭建PySpark环境
  3. 容器源码分析之TreeMap(十)
  4. python处理word文档保留格式_python 处理document文档 保留原样式
  5. python调用mysql数据库sql语句过长有问题吗_python连接MYSQL数据库,调用update语句后无法更新数据,解决...
  6. Silverlight 入门
  7. [转载]在ASP.NET中使用Microsoft Word文档
  8. 本地安装的smushit,如何压缩图片
  9. 使用MAT分析dump文件
  10. android mms 广播,Android-如何成为第一个接收WAP PUSH(MMS)的人
  11. 最全面试题CSS(含答案)
  12. 2020 APP批量头像,高质量严选真实用户头像
  13. python爬取千图网_python 爬取 花瓣网图片,千图网图片
  14. 人人网、7K7K、178等各网站迅雷地址。最新得到的各种URL。
  15. SVG格式文件插入Word/WPS,三种简单快捷的方法,实现图片高清无损
  16. 惹某人突然不舍de第七周(习题+感悟)
  17. 上下定高 中间自适应_css经典布局——头尾固定高度中间高度自适应布局
  18. 数据挖掘与分析——回归模型
  19. 中望CAD教程:如何将PDF转化为DWG格式文件
  20. 那是计算机房吗英语否定回答,【微课+教材+听力+知识点】PEP四年级英语下册 Unit 1...

热门文章

  1. 数据库系统之三级结构模式
  2. 使用pyodbc连接SqlServer数据库问题总结
  3. 2023轻薄投影仪推荐:极米投影仪Z7X闭眼可买
  4. 物联网专题17:IP地址和端口
  5. Linux显示文件目录分屏显示,Linux-作业1(文件和目录操作题目)
  6. 一个月涨粉63万,画风转型让她实现了流量逆袭
  7. 中国境内小麦的储粮害虫汇总
  8. 可视化有关JS官网链接
  9. 领导想提拔你,会暗送这3个“秋波”,你要做足前戏,把握节奏
  10. SQL基础题 一、查出每个部门高于部门平均工资的员工名单