Kubelet需要在每个minion结点上运行。他负责维护在特定主机上的容器。
Kubelet的代码架构与kube-proxy类似,cmd部分组织代码调用(cmd/kubelet/kubelet.go),kubelet的功能实现在pkg/kubelet包中。
apiServer负责接收server发过来的Pod管理信息,通过channel推送到PodConfig。PodConfig的mux使用Storage的Merge方法,Merge方法又会通过Updates 这个channel将Pod数据推给Kubelet,真正的Pod处理在Kubelet包中。Kubelet通过syncLoop监听channel,收到数据后就执行关于Pod和容器的处理,真正操作容器的方法调用dockertools包中的方法。总体组件图如下:
Kubelet的cmd主函数在cmd/kubelet/kubelet.go文件中。他调用NewKubeletServer函数创建一个server对象并Run起来。其中调用的比较重要函数是RunKubelet,里面的CreateAndInitKubelet创建了管理Pod的Config对象,处理信息的kubelet对象。这些方法都在pkg/kubelet/config包里面。
比较重要的函数有:
func NewPodConfig(mode PodConfigNotificationMode, recorder record.EventRecorder) *PodConfig {