Informer

image.png
Indexer(informer中的Store对象)是存储的信息是:

  1. map[主键]对象
  2. 索引函数map[string]IndexFunc
  3. 索引->主键

Indexer是在process中更新的

DeltaFIFO是存储的:

  1. 队列,队列中存储的是主键
  2. map[主键]Deltas (Deltas是Delta数组,每个Delta对应一个变更事件,Delta中包含k8s资源对象)


从reflector的channel到DeltaFIFO的处理逻辑:*
k8s.io/client-go/tools/cache/reflector.go
func (r
Reflector) watchHandler

process的处理逻辑:
k8s.io/client-go/tools/cache/shared_informer.go
func (s sharedIndexInformer) HandleDeltas(obj interface{})
这里根据indexer内的数据决定action是:Add、Update、Delete,*同时更新indexer的数据

DeltaFIFO

image.png