本文共 1520 字,大约阅读时间需要 5 分钟。
本人空间链接
源码为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)
龚浩华
qq 月牙寂 道长 29185807
2016年4月7日
(版权声明:本文为作者原创,如需转载请通知本人,并标明出处和作者。擅自转载的,保留追究其侵权的权利。)
如果你觉得本文对你有帮助,可以转到你的朋友圈,让更多人一起学习。
第一时间获取文章,可以关注本人公众号:月牙寂道长,也可以扫码关注