k8s Client-go Informer源码分析(2)——初始化与启动详解
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
资源对象并将其缓存在本地,然后使用 Watch 机制来获取资源对象的增量变化,并更新本地缓存。 (2)ListerWatcher:ListerWatcher 是接口,用来获取某种资源对象的列表和监视该资源对象的变化。 (3)Indexer:Indexer 是对象的索引器,负责将获取的对象列表进行索引,以便后续的查询。 (4)Controller:Controller 负责监听 Indexer 中的对象变化,并调用注册的处理函数进行处理。 (5)Workqueue: Workqueue 是一个任务队列,用来接收 Indexer 对象变化的消息,并调用注册的处理函数进行处理。 informer 初始化和启动 接下来我们来看看 informer 的初始化和启动过程。 (1)NewSharedInformerFactory:informer 的初始化入口。该函数接收三个参数:clientset、resyncPeriod、stopCh。clientset 是用来访问 k8s 资源的客户端,resyncPeriod 表示全量对象列表定期重新同步的时间间隔,stopCh 是停止 informer 的信号。该函数返回一个 SharedInformerFactory 对象。 (2)SharedInformerFactory:SharedInformerFactory 封装了一组 informer。该对象提供一个 ForXXX 方法来创建指定资源对象的 informer,例如 ForPod、ForNode 等等。 (3)ForXXX 方法:ForXXX 方法根据特定的资源对象类型创建一个 informer,并注册相应的 InformerHandler 处理该资源对象的增删改查事件。 (4)Informer:informer 包含了一个 Reflector、一个 Indexer 和一个 Controller 对象。在 informer 初始化的时候,会先创建一个 Reflector 对象,然后创建一个 Indexer 对象,并将它注册到 Reflector 中,最后创建一个 Controller 对象并将它注册到 Indexer 中。 (5)Start 方法:informer 的启动函数。在 informer 启动的时候,会先调用 Reflector 的 ListAndWatch 方法获取全量对象列表,并将其缓存在 Indexer 中,然后调用 Controller 的 Run 方法监听 Indexer 对象的变化。当 Indexer 对象发生变化时,会调用相应的 InformerHandler 处理该变化。 最后,在 informer 停止的时候,会调用 Reflector 和 Controller 的 Stop 方法来停止对 apiserver 的请求以及停止对 Indexer 对象的监听。 总结 k8s client-go informers 是 k8s 中重要组件之一,该组件能够持续获取集群的所有资源对象并监听资源对象的变化,同时在本地维护了全量资源对象的内存缓存,以减少对 apiserver 和 etcd 的请求压力。在初始化和启动过程中,主要涉及到 Reflector、Indexer、Controller 等对象的创建和注册,以及 ListAndWatch、Run、Stop 等方法的调用。因此,通过对 informer 的初始化与启动进行分析,有助于我们更加深入地了解 k8s 中 informer 的内部原理和工作机制,从而更好地使用和理解 k8s 中的 informers。
剩余15页未读,继续阅读