原创声明
本文主要翻译自官方文档。
1. 简介
client-go 库包含开发自定义处理器(custom controller)时可以使用的多种机制。这些机制被定义在库的 tools/cache folder。
下图展示了 client-go 库中的多个组件如何工作,以及它们与自定义控制器代码的交互点。
2. client-go 组件
3. 自定义控制器组件
- Informer reference:这是对 Informer 实例的引用,它知道如何使用自定义资源对象。自定义控制器代码需要创建合适的 Informer。
- Indexer reference:这是对 Indexer 实例的引用,它知道如何使用自定义资源对象。自定义控制器代码需要创建它。在后面的处理中,将使用该引用获取对象。
在 client-go 中,基础控制器提供 NewIndexerInformer 函数来创建 Informer 和 Indexer。在你的代码中,你既可以直接调用该函数,也可以使用工厂方法创建 Informer。
- 资源事件处理器(Resource Event Handlers):这些是回调函数,当 Informer 想向控制器传送对象时,Informer 会调用它们。编写这些函数的典型模式是获取已分派对象的键,然后将该键放进工作队列(work queue),供进一步处理。
- 工作队列(Work queue):这是控制代码中创建的队列,它将对象的发送与处理解耦。资源事件处理函数提取已发送的对象的键,然后把它添加到队列中。
- 处理项(Processing Item):这是代码中创建的函数,它处理来自工作队列的项。可以有一个或多个执行真正的处理的其它函数。这些函数通常使用 Indexer reference,或 Listing 包装器来来检索与键对应的对象。