软件世界网 购物 网址 三丰软件 | 小说 美女秀 图库大全 游戏 笑话 | 下载 开发知识库 新闻 开发 图片素材
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
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
生肖星座 三丰软件 视频 开发 Android开发 站长 古典小说 网文精选 搜图网 美图 中国文化英文版 多播 租车 短信
2017-7-24 10:29:43
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  软件世界网 --