如何分析Controller Manager 中的SharedInformer结构

发布时间:2021-12-15 18:52:45 作者:柒染
来源:亿速云 阅读:103

如何分析Controller Manager 中的SharedInformer结构,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

绝大多数Controller的实现都依赖一种特殊结构-SharedInformer,它主要负责订阅etcd上资源的变更并调用注册的Handlers。

SharedInformer相关的类结构如下图:

SharedInformer是一个复杂的嵌套结构,自底向上总共包含四层

Queue

DeltaFIFO结构实现了Queue(以及Store)接口,在内部使用一个叫做items的map来存储Delta数据。items的key是通过一个预先传入的keyFunc对每个入队的object计算出来的。

基于map的存储结构能够使得DeltaFIFO快速检索到任意一个内部元素(这也是为了实现Store接口),同时queue存储了元素的进入顺序。

Reflector

Reflector结构能够通过listWatcher监控etcd上的变更,实时同步到本地的store结构中。

Controller

Controller初始化了一个DeltaFIFO结构,并将它作为store创建了一个Reflector结构,用来监控特定的etcd资源的变更。listWatcher观察到的变更会被存储到DeltaFIFO中,同时Controller会不断消费DeltaFIFO中的元素,将它作为入参call构造时传入的Process Func。

sharedIndexInformer

sharedIndexInformer实现了SharedInformer接口,它用自己的HandleDeltas()方法作为Process Func来构造Controller。Controller检测到的所有资源变更都会回调sharedIndexInformer.HandleDeltas()。

indexer是一种cache结构,它存储了监控资源的最新数据。当Controller接收到变更的时候,可以通过indexer来获取变更数据在变更前的值。

sharedProcessor用来存储所有注册的Listener。当HandleDeltas被回调时,会触发sharedProcessor上的distribute()方法,来最终调用所有注册的Listeners。

通过以上四种数据结构的配合使用,最终实现了从资源监控到Listener回调的整个数据链路。

如何分析Controller Manager 中的SharedInformer结构

关于如何分析Controller Manager 中的SharedInformer结构问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。

推荐阅读:
  1. 如何在k8s中安装部署controller-manag
  2. Kubernetes Replication Controller的结构定义是什么

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

controller manager

上一篇:如何实现Pod的创建和管理

下一篇:linux如何修改path环境变量

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》