【原创】k8s源码分析-----kubelet(1)主要流程

 

本人空间链接http://user.qzone.qq.com/29185807/blog/1460015727

源码为k8s v1.1.1稳定版本

kubelet代码比较复杂,主要是因为其担负的任务比较多。下面我们将慢慢的分析

一、主要流程

1、main入口

k8s.io\kubernetes\cmd\kubelet\kubelet.go

依旧是这种风格的main

【原创】k8s源码分析-----kubelet(1)主要流程_第1张图片

继续看app

NewKubeletServer 主要是一些参数的初始化

【原创】k8s源码分析-----kubelet(1)主要流程_第2张图片

【原创】k8s源码分析-----kubelet(1)主要流程_第3张图片

然后在后面也有一些flag参数的获取,就不贴图了。

2、进入KubeletServer.Run

代码比较长。其从整个Run代码来看,整个过程都是一个前期的准备工作,比如一些参数的准备。真正的运行还不是在这里。

【原创】k8s源码分析-----kubelet(1)主要流程_第4张图片

上面的代码中,准备了一个KubeletConfig,这个是主要的配置参数

【原创】k8s源码分析-----kubelet(1)主要流程_第5张图片

上面的代码中RunKubelet是下一个入口

【原创】k8s源码分析-----kubelet(1)主要流程_第6张图片

上面图中的代码就简单了不做解释

 

3、 RunKubelet

代码太长,就截取其中比较重要的

func RunKubelet(kcfg *KubeletConfig, builder KubeletBuilder) error {

【原创】k8s源码分析-----kubelet(1)主要流程_第7张图片

以上有个createAndInitKubelet,这个很重要

我们看看先

【原创】k8s源码分析-----kubelet(1)主要流程_第8张图片

从上面可以看到pc,有个NewMainKubelet

下面进入startKubelet

【原创】k8s源码分析-----kubelet(1)主要流程_第9张图片

我们看到Kubelet.Run。这个才是真正的入口

 

4、Kubelet,真正入口

k8s.io\kubernetes\pkg\kubelet\ kubelet.go

4.1、NewMainKubelet

func NewMainKubelet(

【原创】k8s源码分析-----kubelet(1)主要流程_第10张图片

dockerclient初始化

【原创】k8s源码分析-----kubelet(1)主要流程_第11张图片

serviceLister 和nodeLister初始化(这个和前面几篇文章分析中的很类似,具体里面就不再做分析了)

【原创】k8s源码分析-----kubelet(1)主要流程_第12张图片

containerGC

imageManager

diskSpaceManager

statusManager

readinessManager

containerRefManager

volumeManager

oomWatcher

我们看到了这么多的manager

【原创】k8s源码分析-----kubelet(1)主要流程_第13张图片

然后就是容器的类型,这里我们就看docker

再接着

【原创】k8s源码分析-----kubelet(1)主要流程_第14张图片

【原创】k8s源码分析-----kubelet(1)主要流程_第15张图片

containerManager

containerRuntime

podManager

runtimeCache

等等

 

我们现在回想下就会豁然开朗,在k8s.io\kubernetes\cmd\kubelet\app\ 中主要是做一些参数的简单处理,具体的初始化其实是在k8s.io\kubernetes\pkg\kubelet\ kubelet.go中的NewMainKubelet。其构建的模块数量之多,也是其功能强大之处。

 

4.2 func (kl *Kubelet) Run

真正的Run入口,这个是在之前的k8s.io\kubernetes\cmd\kubelet\app\中的startKubelet中执行的

【原创】k8s源码分析-----kubelet(1)主要流程_第16张图片

我们看到了熟悉的

imageManager.Start()

cadvisor.Start()

containerManager.Start

【原创】k8s源码分析-----kubelet(1)主要流程_第17张图片

还有

oomWatcher.Start

updateRuntimeUp

podKiller

statusManager.Start()

最后的kl.syncLoop(updates, kl)

 

 

 

 

龚浩华

qq 月牙寂 道长 29185807

2016年4月7日

(版权声明:本文为作者原创,如需转载请通知本人,并标明出处和作者。擅自转载的,保留追究其侵权的权利。)

如果你觉得本文对你有帮助,可以转到你的朋友圈,让更多人一起学习。

第一时间获取文章,可以关注本人公众号:月牙寂道长,也可以扫码关注

 

你可能感兴趣的:(golang,容器,容器云,golang,容器,k8s)