本人空間鏈接http://user.qzone.qq.com/29185807/blog/1460015727
源代碼為k8s v1.1.1穩定版本號
kubelet代碼比較復雜。主要是由於其擔負的任務比較多。以下我們將慢慢的分析
一、主要流程
1、main入口
k8s.io\kubernetes\cmd\kubelet\kubelet.go
依然是這樣的風格的main
繼續看app
NewKubeletServer 主要是一些參數的初始化
然后在后面也有一些flag參數的獲取,就不貼圖了。
2、進入KubeletServer.Run
代碼比較長。其從整個Run代碼來看,整個過程都是一個前期的准備工作。比方一些參數的准備。真正的執行還不是在這里。
上面的代碼中,准備了一個KubeletConfig。這個是基本的配置參數
上面的代碼中RunKubelet是下一個入口
上面圖中的代碼就簡單了不做解釋
3、 RunKubelet
代碼太長,就截取當中比較重要的
func RunKubelet(kcfg *KubeletConfig, builder KubeletBuilder) error {
以上有個createAndInitKubelet,這個非常重要
我們看看先
從上面能夠看到pc。有個NewMainKubelet
以下進入startKubelet
我們看到Kubelet.Run。這個才是真正的入口
4、Kubelet,真正入口
k8s.io\kubernetes\pkg\kubelet\ kubelet.go
4.1、NewMainKubelet
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。其構建的模塊數量之多,也是其功能強大之處。
4.2 func (kl *Kubelet) Run
真正的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日
(版權聲明:本文為作者原創,如需轉載請通知本人,並標明出處和作者。
擅自轉載的,保留追究其侵權的權利。
)