kubelet如何将事件同步到apiserver?

时间:2019-01-07 09:06:02

标签: kubernetes kubelet kubernetes-apiserver

最近,我研究了kubelet如何将事件同步到apiserver,但是我找不到代码在哪里。

1 个答案:

答案 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更改类型。例如,这些值可以是ADDREMOVE之类的值。最后,所有类型的PodUpdate将注入到updates的{​​{1}}中。因此,只需收听podConfig频道即可获取本地节点的Pod配置更新。

一旦Kubelet启动完成,就会执行update函数。 代码kubernetes/blob/master/pkg/kubelet/kubelet.go#L180

syncLoop

以下文章详细介绍了整个过程:Understanding the Kubelet Core Execution Frame