软件世界网 购物 网址 三丰软件 | 小说 美女秀 图库大全 游戏 笑话 | 下载 开发知识库 新闻 开发 图片素材
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
移动开发 架构设计 编程语言 Web前端 互联网
开发杂谈 系统运维 研发管理 数据库 云计算 Android开发资料
  软件世界网 -> 云计算 -> 【原创】k8s源码分析 -> 正文阅读

[云计算]【原创】k8s源码分析






转自本人空间 http://user.qzone.qq.com/29185807/blog/1459325937

一、controller manager创建endpointController


代码在k8s.io\kubernetes\cmd\kube-controller-manager\controller-manager.go main函数路口
[img]http://img.blog.csdn.net/20160330162523223

代码k8s.io\kubernetes\cmd\kube-controller-manager\app\controllermanager.go Run函数
[img]http://img.blog.csdn.net/20160330162538538

构建endpointcontroller
[img]http://img.blog.csdn.net/20160330162556413 

二、endpointcontroller初始化

EndpointController结构体


代码k8s.io\kubernetes\pkg\controller\endpoint\endpoints_controller.go
[img]http://img.blog.csdn.net/20160330162613848

1、client
       就是kubeClient,与apiserver连接的接口部分。用于service的list和watch的获取,pod的list和watch的获取
2、serviceStore与serviceController
       serviceStore,service信息的存储
       serviceController,service信息的生产者
3、podStore与podController
       podStore,pod信息的存储
       podController,pod信息的生产者
4、queue
       处理队列
 

初始化


代码k8s.io\kubernetes\pkg\controller\endpoint\endpoints_controller.go
 [img]http://img.blog.csdn.net/20160330162628117
[img]http://img.blog.csdn.net/20160330162641801
从上面的代码可以到,结构体里的各个成员进行了初始化。
1、client
       就是kubeClient,与apiserver连接的接口部分。用于service的list和watch的获取,pod的list和watch的获取
2、serviceStore与serviceController
       初始化为framework.NewInformer
       并将service的list和watch获取接口传入
3、podStore与podController
       初始化为framework.NewInformer
       并将pod的list和watch获取接口传入
4、queue
       就是一个队列(简单,所以不做分析)
 
继续看Run函数
[img]http://img.blog.csdn.net/20160330162657833

 
三、serviceControllerpodController工作流程

初始化流程


代码在k8s.io\kubernetes\pkg\controller\framework\ controller.go
[img]http://img.blog.csdn.net/20160330162919208

[img]http://img.blog.csdn.net/20160330162931209
上面的初始化几个地方比较重要
1、clientState也就是Store(serviceStore,podStore)
       其传入的keyfunc为代码在k8s.io\kubernetes\pkg\controller\framework\ controller.go
[img]http://img.blog.csdn.net/20160330162947418

代码在k8s.io\kubernetes\pkg\client\cache\delta.go
[img]http://img.blog.csdn.net/20160330163001543

2、cfg是后续很重要的配置信息
3、NewDeltaFIFO中传入的keyfunc
       代码在k8s.io\kubernetes\pkg\client\cache\store.go
[img]http://img.blog.csdn.net/20160330163015809

我们回到工作流程中 代码k8s.io\kubernetes\pkg\controller\framework\ controller.go
[img]http://img.blog.csdn.net/20160330163032560

从上面的代码来看,listerwatcher真正运行的还在下层的reflector
 

下层reflector工作流程


代码在k8s.io\kubernetes\pkg\client\cache\reflector.go
[img]http://img.blog.csdn.net/20160330163052513

[img]http://img.blog.csdn.net/20160330163105420
[img]http://img.blog.csdn.net/20160330163117569
入口ListAndWatch
[img]http://img.blog.csdn.net/20160330163130389 
我们看看list返回的是什么
我们以service的list为例
代码在k8s.io\kubernetes\pkg\client\unversioned\ services.go
[img]http://img.blog.csdn.net/20160330163148202

代码在k8s.io\kubernetes\pkg\api\typess.go
[img]http://img.blog.csdn.net/20160330163201437

在此处插入一下对于list结果的处理
[img]http://img.blog.csdn.net/20160330163219928

再插入下fifo的处理
代码在k8s.io\kubernetes\pkg\client\cache\fifo.go
[img]http://img.blog.csdn.net/20160330163234007

[img]http://img.blog.csdn.net/20160330163247172 
ok我们回到ListAndWatch,上面的list获取到后,直接全部更新掉fifo中的信息
我们继续ListAndWatch
下面轮到watch信息的获取和处理
[img]http://img.blog.csdn.net/20160330163304897

我们看看watch的返回是什么(我们以service的watch为例)
代码在k8s.io\kubernetes\pkg\client\unversioned\ services.go
[img]http://img.blog.csdn.net/20160330163326158

代码在k8s.io\kubernetes\pkg\watch\watch.go
[img]http://img.blog.csdn.net/20160330163341382 
我们继续watchHandler的处理(函数比较长,贴了几张图)
下面的处理,其实就是从watch获取到的事件,全部添加到fifo中
[img]http://img.blog.csdn.net/20160330163404648

[img]http://img.blog.csdn.net/20160330163417315
[img]http://img.blog.csdn.net/20160330163430331
[img]http://img.blog.csdn.net/20160330163444113 
我们看看fifo中的add函数,update函数,delete函数
[img]http://img.blog.csdn.net/20160330163500863

[img]http://img.blog.csdn.net/20160330163514442 
以上的loop会退出,但最顶层的reflector.Runutil会继续重复执行listAndwatch
以上便是reflector的工作流程
总结下,就是获取到list信息,然后更新掉store(fifo中的信息),然后watch获取到事件,然后根据不同的事件修改store(fifo)中的信息
 

Controller的工作流程


我们回到Controller中,代码在k8s.io\kubernetes\pkg\controller\framework\controller.go
[img]http://img.blog.csdn.net/20160330163600008

[img]http://img.blog.csdn.net/20160330163612945
其中的queue就是fifo,从中获取到一个item
下图代码在k8s.io\kubernetes\pkg\client\cache\fifo.go
[img]http://img.blog.csdn.net/20160330163628383

然后调用最上层传入的处理接口
[img]http://img.blog.csdn.net/20160330163641662

四、endpointController工作流程
 
我们再回到之前初始化时候注册的接口,代码在k8s.io\kubernetes\pkg\controller\endpoint\ endpoints_controller.go
下面是serviceController的处理接口
[img]http://img.blog.csdn.net/20160330163808414

[img]http://img.blog.csdn.net/20160330163819492
下面是podController的处理接口
[img]http://img.blog.csdn.net/20160330163834430

[img]http://img.blog.csdn.net/20160330163848352 
[img]http://img.blog.csdn.net/20160330163902680
[img]http://img.blog.csdn.net/20160330163914431
 上面的所有处理接口,最后都把serviceController和podController中的信息添加到了endpointController的queue中
下面我们看真正的处理work,这个是在func (e *EndpointController) Run(workers int, stopCh <-chan struct{}) 开启的
[img]http://img.blog.csdn.net/20160330163933447

 继续跟踪处理
[img]http://img.blog.csdn.net/20160330163950322

[img]http://img.blog.csdn.net/20160330164002197
[img]http://img.blog.csdn.net/20160330164014526
[img]http://img.blog.csdn.net/20160330164028698
[img]http://img.blog.csdn.net/20160330164041745
至此所有的处理流程都完成了
 

五、总结


整个流程为一个生产者与消费者模型
 
endpoint初始化了两个Controller(serviceController,podController)
然后这两个Controller通过listwatcher,通过kubeClient访问apiserver
获取到service和pod信息,然后将信息通过framework.controller的处理接口将信息上传到
endpointController中,然后endpointController中的work进行处理,然后又通过kubeClient将信息通过apiserver进行更新
 [img]http://img.blog.csdn.net/20160330164054822
 
龚浩华
qq 月牙寂 29185807
2016年3月30日
 

......显示全文...
    点击查看全文


上一篇文章      下一篇文章      查看所有文章
2016-04-01 16:58:16  
云计算 最新文章
CentOS7上安装Zabbix(快速安装监控工具Zab
十分钟搭建NeuralStyle服务
solr入门之拼写纠错深入研究及代码Demo
3个netty5的例子,简单介绍netty的用法
RedhatOpenshift云平台注册使用
Akka框架——第一节:并发编程简介
Hadoop实战:Linux报tmp磁盘存储不足
linux安装thrift
感觉快更快规划计划高考韩国
solr相似匹配
360图书馆 软件开发资料 文字转语音 购物精选 软件下载 美食菜谱 新闻资讯 电影视频 小游戏 Chinese Culture 股票 租车
生肖星座 三丰软件 视频 开发 短信 中国文化 网文精选 搜图网 美图 阅读网 多播 租车 短信 看图 日历 万年历 2018年1日历
2018-1-17 14:37:28
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  软件世界网 --