【原创】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管理相关推荐
- .net core i上 K8S(四).netcore程序的pod管理,重启策略与健康检查
目录 1.pod管理 2.重启策略 3.健康检查 4.进入容器 正文 上一章我们已经通过yaml文件将.netcore程序跑起来了,但还有一下细节问题可以分享给大家. 1.pod管理 1.1创建pod ...
- lua源代码分析02:内存管理
lua虚拟机之间的工作线程非常安全,因为: 一切与lua虚拟机相关的内存操作被关联到虚拟机对象中,没有利用任何共享变量: lua虚拟机核心部分没有任何系统调用: lua让用户自行定义内存管理器,在创建 ...
- GoAhead2.5源代码分析之1-用户管理(um.c)
Um.c(用户管理) umconfig.txt ---------------------------------------- TABLE=users ROW=0 name=admin passwo ...
- k8s集群部署——Pod管理和资源清单
文章目录 一.Pod管理 二.资源清单 三.Pod生命周期 四.今日报错 一.Pod管理 Pod是可以创建和管理Kubernetes计算的最小可部署单元,一个Pod代表着集群中运行的一个进程,每个po ...
- kubelet启动pod源码分析(三)
之前的blog分析了kubelet启动pod的流程,那么pod一旦启动了,谁去上报状态呢?还是回到之前代码syncLoopIteration,这个里面有四个输入源,第一次创建接受到configch a ...
- K8s常见问题分析解决(基础问题)
1:部分工作节点pod无法启动 详细描述:部分工作节点pod无法启动(处于ContainerCreateing状态)日志: failed to set up ..... Network: failed ...
- k8s集群核心概念pod
文章目录 k8s集群核心概念pod 1.pod介绍 什么是pod 网络: 存储: pod的使用 2.pod的生命周期 了解 Init 容器 使用 Init 容器 状态和策略 容器探针的类型 3.查看p ...
- LINUX学习------Linux自动化运维——Kubernetes的pod管理
一.Pod管理 Pods Pod是可以创建和管理Kubernetes计算的最小可部署单元,一个Pod代表着集群中运行的一个进程,每个pod都有一个唯一的ip. Pod (就像在鲸鱼荚或者豌豆荚中)是一 ...
- 《LINUX3.0内核源代码分析》第一章:内存寻址
https://blog.csdn.net/ekenlinbing/article/details/7613334 摘要:本章主要介绍了LINUX3.0内存寻址方面的内容,重点对follow_page ...
最新文章
- sql 存储过程和函数
- CentOS 5 全攻略 -- 一步一步配置详解
- wordpress引入php文件,WordPress主题制作之模板文件的引入方法,wordpress模板
- 常见的14种异常心电图的波形特点
- 虚拟化与云计算(一)之 Lab1 使用 Hadoop Mapreduce 进行数据处理
- Linux 系统服务管理器(初始化系统/init system) -- systemd 及命令 systemctl 的详细介绍
- html定义页脚有什么用,HTML5中footer标签的用法你知道吗?,HTML5中的footer标签是什么意思?...
- python在数字后添加字符_用python生成数字、字母和特殊字符混合的字符串
- 为什么要有handler机制
- Linux批量文件名大小写转换,Linux中批量把文件名大小写转换
- 用Python实现一个简单的批量无水印快手抖音批量下载器
- 微信小程序的微信开发者工具的快捷键查找和设置
- 那些年,我们一起追过的球队
- 如何有效地进行资料整理?
- linux lzma c语言接口,编译squashfs和lzma
- TypeScript 初学者指南
- JavaScript-筑基(二十五)navigator对象(判断页面打开终端)、history对象
- 计算机软件系统举例,什么是系统软件应用软件举例说明
- 达芬奇密码 第七十一章
- c++中赋值运算符重载