最近,我研究了kubelet如何将事件同步到apiserver,但是我找不到代码在哪里。
答案 0 :(得分:1)
kubelet的来源可用here。
Kubelet可以通过多种方式获得本地节点所需的Pod配置。最重要的方法是 Apiserver 。 Kubelet还可以通过指定文件目录或访问指定的HTTP端口来获得Pod配置。
在启动Kubelet时,将创建一个PodConfig
对象。
代码kubernetes/blob/master/pkg/kubelet/config/config.go#L58:
type PodConfig struct {
pods *podStorage
mux *config.Mux
// the channel of denormalized changes passed to listeners
updates chan kubetypes.PodUpdate
...
}
PodConfig
本质上是Pod配置的多路复用器。内置的mux
可以侦听各种Pod配置的源(包括apiserver,文件和http),并定期同步源的Pod配置状态。
代码kubernetes/blob/master/pkg/kubelet/types/pod_update.go#L80:
type PodUpdate struct {
Pods []*v1.Pod
Op PodOperation
Source string
}
Op
定义Pod更改类型。例如,这些值可以是ADD
或REMOVE
之类的值。最后,所有类型的PodUpdate
将注入到updates
的{{1}}中。因此,只需收听podConfig
频道即可获取本地节点的Pod配置更新。
一旦Kubelet启动完成,就会执行update
函数。
代码kubernetes/blob/master/pkg/kubelet/kubelet.go#L180:
syncLoop
以下文章详细介绍了整个过程:Understanding the Kubelet Core Execution Frame。