返回顶部
首页 > 资讯 > 精选 >Kubernetes Informer的示例分析是怎样的
  • 869
分享到

Kubernetes Informer的示例分析是怎样的

2023-06-19 10:06:06 869人浏览 八月长安
摘要

kubernetes InfORMer的示例分析是怎样的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。熟悉Kubernetes的小伙伴们想必会有一窥源码的动机,领略大师的设

kubernetes InfORMer的示例分析是怎样的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

熟悉Kubernetes的小伙伴们想必会有一窥源码的动机,领略大师的设计和实现,从官方开放出来的Go-sdk来切入Kubernetes应该是个不错的选择。在client-go的工具包里面,informer是一个主要的工具,下文是小编对inform组件的主要功能和部分代码的简单介绍,若有错误之处,欢迎指出,小编果然献出铁头,供大家轻拍。

主要功能:

  1. List和Watch方法,从apiServer同步/解码对象到本地缓存,另外提供本地缓存的访问入口,减少对APIServer的访问压力。

  2. AddEventHandler方法,handler注册的入口,用户变更对象之后触发handler对应的函数,将对象状态信息写到workqueue,供worker消费。

逻辑关系图(引用徐超大神的分享):

Kubernetes Informer的示例分析是怎样的

代码结构浅析:

sharedInformerFactory

  • infomers成员:维护Type接口到SharedIndexInformer的map,此处映射到sharedIndexInformer struct指针变量,工厂设计模式

  • startedInformers成员:维护Type接口到BOOL值的映射,启动informer之前在此判断,避免重复启动infromer。

  • Start方法:迭代informers成员,调用informer.run方法启动informer。

  • InformerFor方法:为informers成员持续增加entry。

  • ...

deploymentInformer

  • factory成员:实现SharedInformerFactory接口的结构变量,此处赋值为sharedInformerFactory struct指针变量。

  • Informer方法:调用factory的InformerFor方法,返回sharedIndexInformer指针对象。

  • Lister方法:返回informer的indexer成员,用以读取本地缓存。

  • ...

sharedIndexInformer

  • indexer成员:实现Indexer接口,维护本地缓存(map[string]interface{}),此处赋值为cache struct指针变量。

  • controller成员:实现Controller接口,维护APIServer到本地缓存的同步机制,同时保持与processor的通讯,此处赋值为controller struct指针对象。

  • processor成员:保持与controller的通讯,触发handler对应的方法,此处赋值为sharedProcessor struct 指针对象。

  • AddEventHandler方法:创建processorListener struct值对象,append到processor成员的listeners和syncinglisteners。

  • HandleDelta方法:迭代controller.config.Queue.items[key](Delta切片),调用indexer.Add/Delete/Update更新本地缓存,同时调用processor.distribute方法,按需迭代processor的listeners和syncinglisteners,下发消息到listener的消息队列

  • ...

indexer

  • cacheStorage成员:实现ThreadSafeStore接口,维护本地线程安全的缓存map[string]interface{},此处赋值为threadSafeMap struct指针变量。

  • keyFunc成员:维护本地缓存key的函数。

  • Add/Delete/Update/List方法:支撑对本地缓存的常用操作。

  • ...

controller

  • reflector成员:利用resourceVersion机制衔接调用listerWatcher.List/Watch方法,从APIServer同步/解码对象到config.Queue.items(map[string]Deltas)中,此处赋值为Reflect struct指针对象。

  • config成员:维护链队列和对象操作映射(map[string]Deltas),此处赋值为Config struct值对象。

  • processloop方法:传入config.Process成员,循环调用config.Queue.Pop方法。

  • ...

processor

  • listeners成员:processorListener struct指针变量的切片。

  • run方法:迭代listeners,调用processorListener.run/pop方法,触发processorListener.handler.OnAdd/OnUpdate/OnDelete方法。

  • ...

reflector

  • store成员:实现Store接口,此处赋值为DeltaFIFO struct指针对象。

  • listerWatcher成员:实现ListerWatcher的List/Watch方法,从APIServer同步/解码对象,此处赋值为ListWatch struct指针变量。

  • ListAndWatch方法:调用listerWatcher成员的List/Watch方法,完成对象从APIServer的同步/解码,然后调用syncWith和watchHandler方法,把事件和对象同步到store的存储成员中。

  • syncWith方法:调用Store接口的Replace方法,同步事件和对象信息。

  • watchHandler方法:调用Store接口的Add/Update/Delete方法,同步事件和对象信息。

  • ...

config

  • Queue成员:实现Queue接口,此处赋值为DeltaFIFO struct指针对象。

  • Process成员:值为sharedIndexInformer.HandleDelta方法。

  • ...

DeltaFIFO

  • items成员:map[string]Deltas,存储对象和操作信息。

  • queue成员:[]string,简单的链队列。

  • knownObjects成员:实现KeyListerGetter接口,此处赋值为cache struct指针对象。

  • Pop方法:从queue成员pop,调用config.Process方法。

  • Add/Delete/Update/Replace方法:调用queueActionLocked方法。

  • queueActionLocked方法:维护items和queue成员。

  •  ...

processorListener

  • nextCh成员:从本地pendingNotifications或者addCh生产消息,run方法消费消息。

  • addCh成员:从调用add方法生产消息,写入本地pendingNotifications或者传递给nextCh。

  • pendingNotifications成员:维护本地缓冲消息,此处赋值为RingGrowing struct值对象。

  • pop方法:维护nextCh和addCh的消息传递。

  • run方法:消费nextCh消息,按需调用processorListener.OnAdd/OnUpdate/OnDelete方法。

  • ...

熟悉Informer实现的主要策略和机制之后,会对后续开发controller带来很多的信心和好处,方便大家持续工作在Kubernetes平台上。简单描述informer的主要结构,还有一些需要研究的地方,比如说缓存压缩,protobuf decode/encode机制,processListener的消息缓存机制,通知机制等等,谢谢。

关于Kubernetes Informer的示例分析是怎样的问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注编程网精选频道了解更多相关知识。

--结束END--

本文标题: Kubernetes Informer的示例分析是怎样的

本文链接: https://lsjlt.com/news/295365.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Kubernetes Informer的示例分析是怎样的
    Kubernetes Informer的示例分析是怎样的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。熟悉Kubernetes的小伙伴们想必会有一窥源码的动机,领略大师的设...
    99+
    2023-06-19
  • Kubernetes架构的示例分析
    这篇文章主要介绍Kubernetes架构的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!首先,为什么要用Kubernetes 使用一个工具先要梳理下使用这个工具的目标,我们不是为了工具而用工具。Kuberne...
    99+
    2023-06-19
  • kubernetes中Service的示例分析
    这篇文章主要介绍了kubernetes中Service的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一:体系结构图二:yaml举例apiVersion: v1kin...
    99+
    2023-06-04
  • kubernetes概述的示例分析
    这篇文章主要为大家展示了“kubernetes概述的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“kubernetes概述的示例分析”这篇文章吧。一:kubernetes集群的架构一个k...
    99+
    2023-06-04
  • kubernetes中Istio的示例分析
    这篇文章主要介绍kubernetes中Istio的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一:简介随着微服务架构的普及,越来越多的应用已经拆分成了微服务的架构。而微服务架构落地的一个难点,就是如何让服务...
    99+
    2023-06-04
  • kubernetes API Server原理分析是怎样的
    这篇文章将为大家详细讲解有关kubernetes API Server原理分析是怎样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一:简介k8s API Server提供了k8s各类资源对...
    99+
    2023-06-04
  • kubernetes原生pipeline的示例分析
    kubernetes原生pipeline的示例分析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Tekton Pipeline,是一个k8s native的pipeline, ...
    99+
    2023-06-05
  • Kubernetes资源类型的示例分析
    这篇文章给大家分享的是有关Kubernetes资源类型的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Kubernetes是一个开源的容器管理平台,用于部署和管理容器化的...
    99+
    2024-04-02
  • Kubernetes-dashboard+Heapster+InfluxDB+Grafana的示例分析
    这篇文章将为大家详细讲解有关Kubernetes-dashboard+Heapster+InfluxDB+Grafana的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一:前言1.kubernet...
    99+
    2023-06-04
  • kubernetes中云原生的示例分析
    这篇文章主要为大家展示了“kubernetes中云原生的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“kubernetes中云原生的示例分析”这篇文章吧。一: 云原生云原生包含了一组应用...
    99+
    2023-06-04
  • kubernetes中网络原理的示例分析
    小编给大家分享一下kubernetes中网络原理的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一:体系结构图二:说明1.网络命名空间处于不同命名空间的网...
    99+
    2023-06-04
  • kubernetes中Service Account与Secret的示例分析
    这篇文章主要介绍kubernetes中Service Account与Secret的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一:Service Account与Secret数据结构二:Service A...
    99+
    2023-06-04
  • kubernetes中网络模型的示例分析
    这篇文章主要介绍kubernetes中网络模型的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Kubernetes从Docker默认的网络模型中独立出来形成一套自己的网络模型。模型的基础原则是:每个Pod都拥...
    99+
    2023-06-04
  • kubernetes中kubelet运行机制的示例分析
    这篇文章给大家分享的是有关kubernetes中kubelet运行机制的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一:简介在Kubernetes集群中,每个Node节点上都会启动一个Kubelet服务...
    99+
    2023-06-04
  • kubernetes中控制器和标签的示例分析
    小编给大家分享一下kubernetes中控制器和标签的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!01 k8s中的常用控制器      之前我们了解了Pod是k8s集群中调度的最小单...
    99+
    2023-06-14
  • Kubernetes中存储卷PV和PVC的示例分析
    这篇文章主要为大家展示了“Kubernetes中存储卷PV和PVC的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Kubernetes中存储卷PV和PVC的示例分析”这篇文章吧。一:体系...
    99+
    2023-06-04
  • kubernetes中垃圾回收机制的示例分析
    这篇文章主要介绍了kubernetes中垃圾回收机制的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一:前言Kubernetes系统在长时间运行后,Kubernete...
    99+
    2023-06-04
  • kubernetes中负载均衡机制Ingress的示例分析
    这篇文章将为大家详细讲解有关kubernetes中负载均衡机制Ingress的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一:前言Kubernetes在设计之初就充分考虑了针对容器的服务发现与负...
    99+
    2023-06-04
  • layer中Icon样式的示例分析
    小编给大家分享一下layer中Icon样式的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、layer的icon样式以...
    99+
    2024-04-02
  • HTML5样式控制的示例分析
    小编给大家分享一下HTML5样式控制的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! 1.请使用 span 元素对行内...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作