Reflector: 定义在 cache 包的 Reflector 类中,它监听特定资源类型(Kind)的 Kubernetes API,在ListAndWatch
方法中执行。监听的对象可以是 Kubernetes 的内置资源类型或者是自定义资源类型。当 reflector 通过 watch API 发现新的资源实例被创建,它将通过对应的 list API 获取到新创建的对象并在watchHandler
方法中将其加入到Delta Fifo
队列中。
Informer: 定义在 cache 包的 base controller 中,它从Delta Fifo
队列中 pop 出对象,在processLoop
方法中执行。base controller 的工作是将对象保存一遍后续获取,并调用 controller 将对象传给 controller。
Indexer: 提供对象的 indexing 方法,定义在 cache 包的 Indexer中。一个典型的 indexing 的应用场景是基于对象的 label 创建索引。Indexer 基于几个 indexing 方法维护索引,它使用线程安全的 data store 来存储对象和他们的key。在 cache 包的 Store 类中定义了一个名为MetaNamespaceKeyFunc
的默认方法,可以为对象生成一个<namespace>/<name>
形式的key。
client-go 中的 base controller 提供了NewIndexerInformer
来创建 Informer 和 Indexer。在你的代码中,你可以直接使用 此方法,或者使用 工厂方法 创建 informer。
work queue
队列,等待进一步的处理(Proceess item)。work queue
。work queue
中的对象做对应处理,可以有一个或多个其他的方法实际做处理,这些方法一般会使用Indexer reference
,或者 list 方法来获取 key 对应的对象。原文:https://www.cnblogs.com/wuchangblog/p/14353351.html