6 Informer 的 controller
DeltaFIFO 是一个非常重要的组件,真正让他发挥价值的,便是 Informer 的 controller。
虽然 Kubernetes 源码中的确用的是 controller 这个词,但是此 controller 并不是 Deployment Controller 这种资源控制器。而是一个承上启下的事件控制器(从 API Server 拿到事件,下发给 Informer 进行处理)。
controller 的职责就两个:
- 通过 List-Watch 从 Api Server 获得事件、并将该事件推入 DeltaFIFO 中
- 将 sharedIndexInformer 的 HandleDeltas 方法作为参数,来调用 DeltaFIFO 的 Pop 方法
controller 的定义非常简单,它的核心就是 Reflector:
type controller struct {
config Config
reflector *Reflector
reflectorMutex sync.RWMutex
clock clock.Clock
}
Reflector 的代码比较繁琐但是功能比较简单,就是通过 sharedIndexInformer 里定义的 listerWatcher 进行 List-Watch,并将获得的事件推入 DeltaFIFO 中。