【原创】k8s源代码分析-----kubelet(8)pod管理
本文QQ空间链接:http://user.qzone.qq.com/29185807/blog/1460540474
本文csdn博客链接:http://blog.csdn.net/screscent/article/details/51145382
源代码为k8s v1.1.1稳定版本号
3、Pod管理
前面的7篇文章都是为这篇文章做准备的。最终要进入到正题中,pod的管理
3.1 pod清单
1、參数
代码在k8s.io\kubernetes\cmd\kubelet\app中
结构体变量
type KubeletServer struct {
...
Config string
FileCheckFrequency time.Duration
ManifestURL string
ManifestURLHeader string
HTTPCheckFrequency time.Duration
...
}
默认參数
func NewKubeletServer() *KubeletServer {
return &KubeletServer{
...
FileCheckFrequency: 20 * time.Second,
HTTPCheckFrequency: 20 * time.Second,
...
}
}
flag參数
func (s *KubeletServer) AddFlags(fs *pflag.FlagSet) {
...
fs.StringVar(&s.Config, "config", s.Config, "Path to the config file or directory of files")
fs.DurationVar(&s.FileCheckFrequency, "file-check-frequency", s.FileCheckFrequency, "Duration between checking config files for new data")
fs.StringVar(&s.ManifestURL, "manifest-url", s.ManifestURL, "URL for accessing the container manifest")
fs.StringVar(&s.ManifestURLHeader, "manifest-url-header", s.ManifestURLHeader, "HTTP header to use when accessing the manifest URL, with the key separated from the value with a ':', as in 'key:value'")
fs.DurationVar(&s.HTTPCheckFrequency, "http-check-frequency", s.HTTPCheckFrequency, "Duration between checking http for new data")
...
}
Config:配置的文件路径或文件夹
FileCheckFrequency:文件定期检查文变化间隔
ManifestURL:获取pod定义的url地址
ManifestURLHeader:头部定义
HTTPCheckFrequency:url定期获取时间间隔
2、构建
我们看看生产者的构建
入口是在createAndInitKubelet中
继续makePodSourceConfig
这里构建了一个chan,并作为返回值返回给了上一级调用者。
然后生产方式一共同拥有三种
1、文件方式
代码在k8s.io\kubernetes\pkg\kubelet\config\file.go
初始化了文件路径。nodename,另一个updates的chan
然后开起了一个定期运行的run
从上图我们看到,检測文件文件夹,然后将pod信息通过chan发送出去
2、url方式
代码在k8s.io\kubernetes\pkg\kubelet\config\http.go
初始化了url路径,header。还有定期时间间隔。最后也有一个chan
上图中构建了一个http Client,然后进行了http get请求
上图中,将获取到的信息解码,然后将解析出来的pod信息发送给chan
3、Api server方式
代码在k8s.io\kubernetes\pkg\kubelet\config\apiserver.go
这个比較简单,构建了一个listwatcher。然后将获取到的pod信息发送到chan
4、小结
通过三种方式进行pod信息的获取,也就是生产者,通过chan的方式法送给消费者。
3.2 pod管理
上一节中,我们已经知道了生产者,通过chan的方式发送给消费者
1、传递管道
在makePodSourceConfig中初始化了一个cfg
我们来看看cfg是什么
代码在k8s.io\kubernetes\pkg\kubelet\config\config.go
然后三种方式分别注冊了不同的chan
传送给消费者的接口
注:这里的代码事实上须要深入的话,须要去分析config.Mux,这个代码比較简单,这里篇幅关系就不做分析了。
2、构建与工作流程
构建
代码在k8s.io\kubernetes\cmd\kubelet\app中
podcfg就是上面构建的传送管道,最后启动了kubelet的Run函数
工作流程
代码在k8s.io\kubernetes\pkg\kubelet\kubelet.go
run中的manager我们在之前的文章中基本都有介绍。最后进行syncLoop。其參数updates就是传送的管道
我们继续跟踪
当中的update被传递下来了。handler事实上就是kubelet自身
再继续跟踪
最终到了处理地方。
从传送管道中,获取到pod信息,然后依据pod的类型,分别调用了不同的处理接口。
我们也说了handler事实上就是kubelet自身
1、add
调用了func (kl *Kubelet) HandlePodAdditions(pods []*api.Pod) {
2、update
调用了func (kl *Kubelet) HandlePodUpdates(pods []*api.Pod) {
3、remove
调用了func (kl *Kubelet) HandlePodDeletions(pods []*api.Pod) {
调用了deletepod
通过chan把pod传送给了podkillingch
从上面能够看到。接收到须要kill的pod然后终于调用了killpod。
而从下图。我们看到事实上终于调用了containerrumtime的killpod,这个我们在上一篇文章中已经解说过了。
4、set
临时不支持
5、定时sync
调用了func (kl *Kubelet) HandlePodSyncs(pods []*api.Pod) {
我们看到add update sync都最后调用了dispatchWork。下一篇我们就来分析podwork
龚浩华
QQ 月牙寂 29185807
2016年4月13日
(版权声明:本文为作者原创,如需转载请通知本人,并标明出处和作者。擅自转载的。保留追究其侵权的权利。)
【原创】k8s源代码分析-----kubelet(8)pod管理的更多相关文章
- kubernetes/k8s CRI分析-kubelet删除pod分析
关联博客<kubernetes/k8s CRI 分析-容器运行时接口分析> <kubernetes/k8s CRI分析-kubelet创建pod分析> 之前的博文先对 CRI ...
- kubernetes/k8s CRI分析-kubelet创建pod分析
先来简单回顾上一篇博客<kubernetes/k8s CRI 分析-容器运行时接口分析>的内容. 上篇博文先对 CRI 做了介绍,然后对 kubelet CRI 相关源码包括 kubele ...
- 【原创】k8s源代码分析-----kubelet(1)主要流程
本人空间链接http://user.qzone.qq.com/29185807/blog/1460015727 源代码为k8s v1.1.1稳定版本号 kubelet代码比較复杂.主要是由于其担负的任 ...
- .net core i上 K8S(四).netcore程序的pod管理,重启策略与健康检查
上一章我们已经通过yaml文件将.netcore程序跑起来了,但还有一下细节问题可以分享给大家. 1.pod管理 1.1创建pod kubectl create -f netcore-pod.yaml ...
- 【原创】k8s源代码分析-----EndpointController
转自本人空间 http://user.qzone.qq.com/29185807/blog/1459325937 一.controller manager创建endpointController 代码 ...
- Linux-0.11内核源代码分析系列:内存管理get_free_page()函数分析
Linux-0.11内存管理模块是源码中比較难以理解的部分,如今把笔者个人的理解发表 先发Linux-0.11内核内存管理get_free_page()函数分析 有时间再写其它函数或者文件的:) /* ...
- 12.深入k8s:kubelet创建pod流程源码分析
转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com 源码版本是1.19 在上一篇中,我们知道在kubelet中,工作核心就是围绕着整个syn ...
- cocos2d-x 源代码分析 : Ref (CCObject) 源代码分析 cocos2d-x内存管理策略
从源代码版本号3.x.转载请注明 cocos2d-x 总的文件夹的源代码分析: http://blog.csdn.net/u011225840/article/details/31743129 1.R ...
- hostapd源代码分析(三):管理帧的收发和处理
hostapd源代码分析(三):管理帧的收发和处理 原文链接:http://blog.csdn.net/qq_21949217/article/details/46004379 这篇文章我来讲解一下h ...
随机推荐
- 数据库系统入门 | Oracle Linux上部署Oracle 11g服务,并实现SSH远程登录管理
文章目录 写在前面 一.实验内容 二.实验前期准备 1.软件目录 2.准备一些配置文件.脚本文件 三.实验方案(具体步骤) (一)在虚拟机上安装Oracle Linux (二)在Linux上安装Ora ...
- 16、Xtrabackup备份与恢复
XTRABACKUP xtrabackup是percona公司开发的第三方备份软件,只备份innodb引擎表的ibd文件(frm不备份),不备份myisam引擎表.备份性能很高,备份期间没有任和锁,d ...
- 将具有特殊class名img标签替换成[img][/img]标签--javascript正则表达式实践
在项目中,可能有时候需要将一些特殊的东西加一个特别的属性,或者一个特殊的Class.如下: <!-- 第一种写法 --> <img src="abc.jpg" f ...
- http://blog.csdn.net/zxl315/article/details/10830105
http://blog.csdn.net/zxl315/article/details/10830105
- springMVC配置静态资源访问的<mvc:resources>标签的使用
在springmvc中,为了引用资源的访问不会类似Controller一样被拦截,区分出关注的资源的访问,一般我们在springMVC里面的拦截都会配置为"/",拦截所有的.但是这 ...
- Spring框架学习(8)spring mvc上传下载
内容源自:spring mvc上传下载 如下示例: 页面: web.xml: <?xml version="1.0" encoding="UTF-8"?& ...
- android APK反编译及代码混淆
反编译.查看源代码,需要用到两个工具:dex2jar 和 jdgui dex2jar(google code) jdgui(google code),最新版本请见 官方 操作很简单,步骤如下: 1.将 ...
- 云计算之路-试用Azure:一次失败的SQL Server向SQL Azure的迁移尝试
如果数据库用的是SQL Server,那SQL Azure无疑是最吸引人的地方之一.在测试了虚拟机磁盘IO之后,我们迫不急待地进行了SQL Azure的测试. (一) 首先进入manage.windo ...
- RocketMq通信协议格式及编解码 (源码分析)
一.RocketMq broker服务器与客户端的网络通信是基于netty4.x实现的,重点分析 RocketMq设计的通信协议及对应的编解码 开发. 名字解释 ...
- 算法笔记_061:蓝桥杯练习 字串统计(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 给定一个长度为n的字符串S,还有一个数字L,统计长度大于等于L的出现次数最多的子串(不同的出现可以相交),如果有多个,输出最长的,如果仍然 ...