k8s之informer简单理解

k8s之informer简单理解,第1张

k8s之informer简单理解

informer简介
Informer是一个能够缓存apiserver的对象到本地、具有索引机制、并可以注册 EventHandler 的 client。使用 informer 的目的是为了减轻 apiserver 数据交互的压力,其中本地缓存被称为 Store,索引被称为 Index。

Informer流程:informer的listandwatch机制,默认是每10h从apiserver中整体list一次,有add、delete等事件时会通过watch机制把这个事件+对象放到deltaFIFO中,然后根据deltaFIFO中的内容会先到localstore中更新,之后也会触发controller。并且LocalStore会每隔30s把所有的对象重新放到DeltaFIFO中,从而触发controller。

Informer的详细工作流程
(1)Informer 首先会 list/watch apiserver,Reflector 包使用 ListAndWatch 的方法从 apiserver 中 list短连接 该资源的所有实例,list 会拿到该对象最新的 resourceVersion,然后使用 watch长连接监听该 resourceVersion 之后的所有变化,一旦该对象的实例有创建、删除、更新动作,Reflector 都会收到"事件通知",这时该事件及它对应的API 对象这个组合被称为增量(Delta),它会被放进 DeltaFIFO 中。
(2)Informer 会不断地从这个 DeltaFIFO 中读取增量,每拿出一个对象,Informer 就会判断这个增量的类型并创建或更新本地的缓存store。
如果事件类型是 Added(添加对象),那么 Informer 会通过 Indexer库把这个增量里的 API 对象保存到本地的缓存中,并为它创建索引,若为删除 *** 作,则在本地缓存中删除该对象。
(3)DeltaFIFO 再 pop 这个事件到 controller 中,controller 会根据事先注册的 ResourceEventHandler 回调函数进行处理。在回调函数中其实只是做了一些简单的过滤,然后将关心变更的Object放到workqueue里。
(4)Controller从workqueue里面取出Object,启动一个worker来执行自己的业务逻辑,业务逻辑通常是计算目前集群的状态和用户期望的状态。在worker中也可以使用lister来获取resource,而不用频繁的访问apiserver,因为 apiserver中resource的变更都会反映到本地的cache中。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5707955.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-18

发表评论

登录后才能评论

评论列表(0条)

保存