reflector 起到一个承上启下的作用,它通过 List & Watch kubernetes api 中的指定资源类型
与 index 有关的有三个概念
KeyFunc
- runtime.Object
经过 keyFunc
的处理之后拿到 objectKey
,通常是 namespace/name
IndexFunc
- runtime.Object
经过 indexFunc 的处理之后,拿到一系列 indexValue
Index
: 通过 indexValue
可以拿到 object key 的 set同时有两个 map 用来管理一组 index
Indexers
- 对应 name 到 IndexFunc
的映射关系Indices
- 对应 name 到 Index
的映射关系正常的 Index 流程如下
KeyFunc
获取到 object 的 objectKey
Indexers
Indexer
的 name
和 IndexFunc
IndexFunc
计算 object 的 indexValue
name
确定 Index
,然后将 objectKey
加入到 indexValue 对应的 Set 中去