源码分析:kubelet启动流程

调用栈概览

main()                                                                         // cmd/kubelet/kubelet.go
 |- app.NewKubeletCommand()                                                    // cmd/kubelet/app/server.go
 |    |- kubeletFlags.KubeletConfigFile()
 |    |- UnsecuredDependencies()
 |    |- Run()                                                                 // cmd/kubelet/app/server.go
 |       |- run()                                                              // cmd/kubelet/app/server.go
 |           |- options.ValidateKubeletServer(s)
 |           |- initConfigz(&s.KubeletConfiguration)
 |           |- cadvisor.New()
 |           |- cm.NewContainerManager()
 |           |- oomAdjuster.ApplyOOMScoreAdj()
 |           |- kubelet.PreInitRuntimeService()
 |           |- RunKubelet(s, kubeDeps, s.RunOnce)                            // cmd/kubelet/app/server.go
 |                |- createAndInitKubelet()                                   // cmd/kubelet/app/server.go
 |                     |- kubelet.NewMainKubelet()                            // pkg/kubelet/kubelet.go
 |                         |- watch k8s Nodes
 |                         |- init kubeDeps.PodConfig
 |                         |- watch k8s Services
 |                         |- klet := &Kubelet{}
 |                         |- init klet.podWorkers
 |                         |- init klet runtime
 |                         |- init klet pleg
 |                         |- setup containerGC
 |                         |- setup imageManager
 |                         |- init klet.probeManager
 |                         |- init klet.volumePluginMgr
 |                         |- setup volumeManager
 |                         |- setup eviction manager
 |                         |- setup node shutdown manager
 |                     |- k.StartGarbageCollection()
 |                |- startKubelet()                                            // cmd/kubelet/app/server.go
 |                     |- go k.Run(podCfg.Updates())                           // pkg/kubelet/kubelet.go
 |                          |- kl.initializeModules()
 |                          |- go kl.volumeManager.Run()
 |                          |- go kl.nodeLeaseController.Run()
 |                          |- kl.updateRuntimeUp
 |                          |- kl.initNetworkUtil()
 |                          |- kl.statusManager.Start()
 |                          |- kl.pleg.Start()
 |                          |- kl.syncLoop(updates, kl)
 |                     |- go k.ListenAndServe()
 |           |- http.ListenAndServe()
 |- command.Execute()

调用过程

kubelet命令行入口

初始化命令行参数、kubelet启动

kubelet核心配置初始化

初始化nodeInformer、kubeDeps.PodConfig、containerGCPolicy、daemonEndpoints、imageGCPolicy、evictionConfig、初始化serviceInformer、初始化podWorker、初始化runtime、初始化pleg、初始化imageManager、probeManager、pluginManager、volumePluginMgr、volumeManager、evictionManager、nodeLeaseController、shutdownManager等等

kubelet配置已经基本初始化,后续进入相关组件启动逻辑

Last updated