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

时间:2022-07-06 16:48:50

本人空间链接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)主要流程

继续看app

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

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

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

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

2、进入KubeletServer.Run

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

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

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

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

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

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

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

 

3、 RunKubelet

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

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

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

以上有个createAndInitKubelet,这个很重要

我们看看先

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

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

下面进入startKubelet

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

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

 

4、Kubelet,真正入口

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

4.1、NewMainKubelet

func NewMainKubelet(

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

dockerclient初始化

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

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

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

containerGC

imageManager

diskSpaceManager

statusManager

readinessManager

containerRefManager

volumeManager

oomWatcher

我们看到了这么多的manager

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

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

再接着

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

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

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)主要流程

我们看到了熟悉的

imageManager.Start()

cadvisor.Start()

containerManager.Start

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

还有

oomWatcher.Start

updateRuntimeUp

podKiller

statusManager.Start()

最后的kl.syncLoop(updates, kl)

 

 

 

 

龚浩华

qq 月牙寂 29185807

2016年4月7日

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