首页 > 其他 > 详细

K8S list&watch机制

时间:2021-01-31 21:13:51      阅读:83      评论:0      收藏:0      [点我收藏+]

一、流程图如下

技术分享图片

client-go 组件

  • 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。

自定义 controller 组件

  • Informer reference: 它是对 Informer 实例的引用,知道如何使用自定义资源对象。你编写的自定义 controller 需要创建正确的 Informer。
  • Indexer reference: 它是对 Indexer 实例的引用,你编写的自定义 controller 代码中需要创建它,在获取对象供后续使用时你会用到这个引用。

client-go 中的 base controller 提供了NewIndexerInformer来创建 Informer 和 Indexer。在你的代码中,你可以直接使用 此方法,或者使用 工厂方法 创建 informer。

  • Resource Event Handlers: 一些回调方法,当 Informer 想要发送一个对象给 controller 时,会调用这些方法。典型的编写回调方法的模式,是获取资源对象的 key 并放入一个 work queue队列,等待进一步的处理(Proceess item)。
  • Work queue: 在 controller 代码中创建的队列,用来解耦对象的传递和对应的处理。Resource Event Handlers 的方法就是用来接收对象并将其加入 work queue
  • Process Item: 在 controller 代码中创建的方法,用来对work queue中的对象做对应处理,可以有一个或多个其他的方法实际做处理,这些方法一般会使用Indexer reference,或者 list 方法来获取 key 对应的对象。

K8S list&watch机制

原文:https://www.cnblogs.com/wuchangblog/p/14353351.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!