软件世界网 购物 网址 三丰软件 | 小说 美女秀 图库大全 游戏 笑话 | 下载 开发知识库 新闻 开发 图片素材
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
移动开发 架构设计 编程语言 Web前端 互联网
开发杂谈 系统运维 研发管理 数据库 云计算 Android开发资料
  软件世界网 -> 云计算 -> 【原创】k8s源码分析 -> 正文阅读
云计算 最新文章
CentOS7上安装Zabbix(快速安装监控工具Zab
十分钟搭建NeuralStyle服务
solr入门之拼写纠错深入研究及代码Demo
3个netty5的例子,简单介绍netty的用法
RedhatOpenshift云平台注册使用
Akka框架——第一节:并发编程简介
Hadoop实战:Linux报tmp磁盘存储不足
linux安装thrift
感觉快更快规划计划高考韩国
solr相似匹配

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

  2016-04-01 16:58:35





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

一、controller manager创建endpointController


代码在k8s.io\kubernetes\cmd\kube-controller-manager\controller-manager.go main函数路口


代码k8s.io\kubernetes\cmd\kube-controller-manager\app\controllermanager.go Run函数


构建endpointcontroller
 

二、endpointcontroller初始化

EndpointController结构体


代码k8s.io\kubernetes\pkg\controller\endpoint\endpoints_controller.go


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
 


从上面的代码可以到,结构体里的各个成员进行了初始化。
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函数


 
三、serviceControllerpodController工作流程

初始化流程


代码在k8s.io\kubernetes\pkg\controller\framework\ controller.go



上面的初始化几个地方比较重要
1、clientState也就是Store(serviceStore,podStore)
       其传入的keyfunc为代码在k8s.io\kubernetes\pkg\controller\framework\ controller.go


代码在k8s.io\kubernetes\pkg\client\cache\delta.go


2、cfg是后续很重要的配置信息
3、NewDeltaFIFO中传入的keyfunc
       代码在k8s.io\kubernetes\pkg\client\cache\store.go


我们回到工作流程中 代码k8s.io\kubernetes\pkg\controller\framework\ controller.go


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

下层reflector工作流程


代码在k8s.io\kubernetes\pkg\client\cache\reflector.go




入口ListAndWatch
 
我们看看list返回的是什么
我们以service的list为例
代码在k8s.io\kubernetes\pkg\client\unversioned\ services.go


代码在k8s.io\kubernetes\pkg\api\typess.go


在此处插入一下对于list结果的处理


再插入下fifo的处理
代码在k8s.io\kubernetes\pkg\client\cache\fifo.go


 
ok我们回到ListAndWatch,上面的list获取到后,直接全部更新掉fifo中的信息
我们继续ListAndWatch
下面轮到watch信息的获取和处理


我们看看watch的返回是什么(我们以service的watch为例)
代码在k8s.io\kubernetes\pkg\client\unversioned\ services.go


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




 
我们看看fifo中的add函数,update函数,delete函数


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

Controller的工作流程


我们回到Controller中,代码在k8s.io\kubernetes\pkg\controller\framework\controller.go



其中的queue就是fifo,从中获取到一个item
下图代码在k8s.io\kubernetes\pkg\client\cache\fifo.go


然后调用最上层传入的处理接口


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



下面是podController的处理接口


 


 上面的所有处理接口,最后都把serviceController和podController中的信息添加到了endpointController的queue中
下面我们看真正的处理work,这个是在func (e *EndpointController) Run(workers int, stopCh <-chan struct{}) 开启的


 继续跟踪处理






至此所有的处理流程都完成了
 

五、总结


整个流程为一个生产者与消费者模型
 
endpoint初始化了两个Controller(serviceController,podController)
然后这两个Controller通过listwatcher,通过kubeClient访问apiserver
获取到service和pod信息,然后将信息通过framework.controller的处理接口将信息上传到
endpointController中,然后endpointController中的work进行处理,然后又通过kubeClient将信息通过apiserver进行更新
 

 
龚浩华
qq 月牙寂 29185807
2016年3月30日
 

上一篇文章      下一篇文章      查看所有文章
2016-04-01 16:58:16  
360图书馆 论文大全 母婴/育儿 软件开发资料 网页快照 文字转语音 购物精选 软件 美食菜谱 新闻中心 电影下载 小游戏 Chinese Culture
生肖星座解梦 三沣玩客 拍拍 视频 开发 Android开发 站长 古典小说 网文精选 搜图网 天下美图 中国文化英文 多播视频 装修知识库
2017-1-23 14:34:01
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  软件世界网 --