DeltaFIFO和workqueue有较大不同,他的设计主要为了:

  1. 聚合同一个item的变化
  2. 支持全量替换
  3. 从queue中pop出来的时候,会遍历对应items中的Deltas对象,生成多个事件 k8s.io/client-go/tools/cache/controller.go (newInformer)

整体的存储结构:

image.png


DeletedFinalStateUnknown(tombstone) 对象是从这样产生的,表示该对象已经不存在了,但是删除前的状态是未知的。是在Replace是产生的 (relist),是通过比较 和 Replace的对象全量数据:如果在knownObject中存在,但是relist结果里没有,则认定为DeletedFinalStateUnknown对象。

knownObject的作用:

knownObjects 中有的对象就是使用者知道的所有对象(已经经过了DeltaFIFO的数据)。主要是在Delete和Replace时用到。

从DeltaFIFO的queue中pop出来之后,会先更新Indexer(knownObject),然后回调用户定义在informer中的函数。