说明:此文章为腾讯云机器自动从本人csdn博客搬迁过来。是本人授权操作。
申明:无本人授权,不可转载本文。如有转载,本人保留追究其法律责任的权利。
龚浩华,QQ 29185807,月牙寂 道长
第一时间获取文章,可以关注本人公众号 月牙寂道长 yueyajidaozhang
源码为k8s v1.1.1稳定版本
kubelet代码比较复杂,主要是因为其担负的任务比较多。下面我们将慢慢的分析
k8s.io\kubernetes\cmd\kubelet\kubelet.go
依旧是这种风格的main
继续看app
NewKubeletServer 主要是一些参数的初始化
然后在后面也有一些flag参数的获取,就不贴图了。
代码比较长。其从整个Run代码来看,整个过程都是一个前期的准备工作,比如一些参数的准备。真正的运行还不是在这里。
上面的代码中,准备了一个KubeletConfig,这个是主要的配置参数
上面的代码中RunKubelet是下一个入口
上面图中的代码就简单了不做解释
代码太长,就截取其中比较重要的
func RunKubelet(kcfg *KubeletConfig, builder KubeletBuilder) error {
以上有个createAndInitKubelet,这个很重要
我们看看先
从上面可以看到pc,有个NewMainKubelet
下面进入startKubelet
我们看到Kubelet.Run。这个才是真正的入口
k8s.io\kubernetes\pkg\kubelet\ kubelet.go
func NewMainKubelet(
dockerclient初始化
serviceLister 和nodeLister初始化(这个和前面几篇文章分析中的很类似,具体里面就不再做分析了)
containerGC
imageManager
diskSpaceManager
statusManager
readinessManager
containerRefManager
volumeManager
oomWatcher
我们看到了这么多的manager
然后就是容器的类型,这里我们就看docker
再接着
containerManager
containerRuntime
podManager
runtimeCache
等等
我们现在回想下就会豁然开朗,在k8s.io\kubernetes\cmd\kubelet\app\ 中主要是做一些参数的简单处理,具体的初始化其实是在k8s.io\kubernetes\pkg\kubelet\ kubelet.go中的NewMainKubelet。其构建的模块数量之多,也是其功能强大之处。
真正的Run入口,这个是在之前的k8s.io\kubernetes\cmd\kubelet\app\中的startKubelet中执行的
我们看到了熟悉的
imageManager.Start()
cadvisor.Start()
containerManager.Start
还有
oomWatcher.Start
updateRuntimeUp
podKiller
statusManager.Start()
最后的kl.syncLoop(updates, kl)