【原創】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


繼續看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日

(版權聲明:本文為作者原創,如需轉載請通知本人,並標明出處和作者。

擅自轉載的,保留追究其侵權的權利。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM