k8s源码分析-----kube-scheduler

说明:此文章为腾讯云机器自动从本人csdn博客搬迁过来。是本人授权操作。

申明:无本人授权,不可转载本文。如有转载,本人保留追究其法律责任的权利。

龚浩华,QQ 29185807,月牙寂 道长

第一时间获取文章,可以关注本人公众号 月牙寂道长 yueyajidaozhang

源码为k8s v1.1.1稳定版本

一、主要流程

1、main入口

源码在k8s.io/kubernetes/plugin/cmd/kube-scheduler

这种封装是k8s里面一贯的封装风格,就不再多说了

源码在k8s.io/kubernetes/plugin/cmd/kube-scheduler/app

继续往下

真正的入口

下面有个ratelimiter

在factory.NewConfigFactory之后调用了func (s *SchedulerServer) createConfig

2、configFactory

源码k8s.io/kubernetes/plugin/pkg/scheduler/factory

先看下结构体

1、client 与apiserver的接口

2、podqueue,ScheduledPodLister,scheduledPodPopulator 这个是关键数据,稍后分析

3、PodLister ,NodeLister,ServiceLister,ControllerLister 调度的时候需要用到的数据

4、BindPodsRateLimiter,在入口初始化的ratelimiter

5、modeler,pod信息处理部分

我们继续

以下代码,做了简单的初始化。其中重要的初始化有modeler

继续流程

继续

3、Scheduler流程

二、modeler分析

源码在k8s.io\kubernetes\plugin\pkg\scheduler\modeler.go

在modeler中,有三个list

1、queuedPods: a PodLister that will return pods that have not been scheduled yet.

即将被调度,还未被调度的

2、scheduledPods: a PodLister that will return pods that we know for sure have been scheduled.

已经调度的

3、assumedPods: holds the pods that we think we've scheduled, but that haven't yet shown up in the scheduledPods variable. 正在调度中,还未确认以上三个队列我们看看三个队列的前世与今生

1、queuedPods

在k8s.io\kubernetes\plugin\pkg\scheduler\factory\factory.go中(上文中已经有)

很明显podqueue初始化了modeler

k8s.io\kubernetes\plugin\pkg\scheduler\modeler.go

ConfigFactory中的podqueue就是modeler中的queuedpods

func (f *ConfigFactory) CreateFromKeys 函数中,在这里生成了一个生产者,用于获取那些需要调度的pod,保存在podqueue中

func (f *ConfigFactory) CreateFromKeys函数末尾,在函数尾部,提供了一个借口用于Scheduler获取需要调度的pod

在k8s.io\kubernetes\plugin\pkg\scheduler中的scheduleOne,获取需要调度的pod,然后进行调度

2、assumedPods

在k8s.io\kubernetes\plugin\pkg\scheduler中的scheduleOne,调度需要调度的pod,然后将其调度放到assumedpods中

在modeler中,添加到assumepods队列

然后我们看看在什么时候将assumepods消费掉

在NewConfigFactory函数中,我们看到,生成了一个生产者,获取到所有被调度的pod,然后在两个接口中,将在assumepods中的,已经被调度的pod删除

3、scheduledPods

这个已经被调度的则是在NewConfigFactory函数中,定时获取到的已经被调度的pod

总结

1、在ConfigFactory中,调用与apiserver的接口,定期获取需要调度的pod,将其保存在modeler中的queuedPods中

2、在ConfigFactory中,像Scheduler提供获取需要调度pod的接口,然后在Scheduler中进行调度处理,(通过genericScheduler获取调度需要的host),然后将其放入modeler中的assumepods中

3、在ConfigFactory中,定期获取已经调度的pod信息,然后刷新assumepod和scheduledPods

三、genericScheduler分析

我们看看k8s.io\kubernetes\plugin\pkg\scheduler\factory中

GenericScheduler需要什么

func (f *ConfigFactory) CreateFromKeys中

准备数据

func (f *ConfigFactory) CreateFromKeys

1、podlister为modeler的podlister

2、ServiceLister

func (f *ConfigFactory) CreateFromKeys中

3、ControllerLister

func (f *ConfigFactory) CreateFromKeys中

4、NodeLister

那么我们看scheduler工作流程。初始化中nodelister和genericScheduler

调度的时候,获取到需要调度的pod,然后genericScheduler进行调度获取host

我们看genericScheduler中的调度

四、调度算法

k8s.io\kubernetes\plugin\pkg\scheduler\algorithmprovider中

具体算法就不做探讨了

五、总结

在此系统中,3个部分功能清晰,各司其责

modeler,主要负责pod 信息管理(需要调度的,已经调度的,正在调度中的)

genericScheduler,主要负责pod,计算出host的工作

Scheduler,组织前两个部分,进行调度

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大前端开发

从编程小白到全栈开发:服务端的一些概念

幕后英雄总是容易被大家所忽略。在这看脸的世界,大家都以为脸就是全部了,你总是相信你所看到的就是事物的全部,可是你往往看到的只是冰山的一角而已。

772
来自专栏移动端开发

Socket学习总结系列(一) -- IM & Socket

Socket通讯在iOS中也是很常见,自己最近也一直在学习Telegram这个开源项目,Telegram就是在Socket的基础上做的即时通讯,这个相信了解这...

2865
来自专栏CSDN技术头条

15个最受欢迎的Python开源框架

本文从GitHub中整理出15个最受欢迎的Python开源框架。这些框架包括事件I/O,OLAP,Web开发,高性能网络通信,测试,爬虫等。 Django: P...

2288
来自专栏网络

怎么理解前端路由?当然是自己实现一个啦!

spa流行的今天不少同学会把前端路由跟后端路由弄混, 莫名其妙的怎么页面404啦之类'奇怪'的问题, 其实这就是没弄清楚前端路由和后端路由的原因(当然你用has...

2246
来自专栏Coding01

搭建公众号自动回复功能

选择 hapi,主要被它的 logo 和读音(与 happy 同音)吸引,也主要因为自己爱折腾,老想着用不同的框架写写,重点是看看区别,你也可以看看 stack...

1142
来自专栏企鹅号快讯

WebSocket:5分钟从入门到精通

作者:程序猿小卡 https://segmentfault.com/a/1190000012709475 一、内容概览 WebSocket的出现,使得浏览器具备...

1998
来自专栏Python自动化测试

Jmeter接口测试之HTTP请求默认值(八)

不管是在UI级别的自动化测试还是在接口级别的自动化测试中,对公共数据数据的分离都是一种趋势,或者某种程度来说,这是自动化测试中必须要掌握的一种能力...

803
来自专栏张善友的专栏

微软开源 C++ REST SDK

微软的代号为Casablanca的C++ REST SDK已经基于Apache许可证开源。它被描述为“微软为了以原生代码支持基于云的客户端/服务器通信所做的努力...

23010
来自专栏Jerry的SAP技术分享

推荐一个高大上的网易云音乐命令行播放工具:musicbox

网易云音乐上有很多适合程序猿的歌单,但是今天文章介绍的不是这些适合程序员工作时听的歌,而是一个用Python开发的开源播放器,专门适用于网易云音乐的播放。这个播...

1562
来自专栏互联网杂技

程序员保证能笑出腹肌

客户需求 vs 最终产品 ? requirements vs. implementation 程序员的一天 ? The Programmers life 寂寞...

3377

扫码关注云+社区