深入源码分析kubernetes informer机制(零)简单了解informer


[阅读指南]
基于kubernetes 1.27 stage版本
为了方便阅读,后续所有代码均省略了错误处理及与关注逻辑无关的部分。


文章目录

  • 关于client-go
  • Informer是什么
  • 为什么需要informer
  • Informer工作流程
  • 后续分析计划

关于client-go

client-go是kubernetes节点与服务端进行资源交互的客户端库,提供了非常多的功能与组件,用来与Kubernetes API 进行交互与操作。常见的功能有管理和同步kubernetes资源、管理本地kubernetes资源缓存、认证和授权等。

Informer是什么

Informer 是一种建立在client-上的资源同步和事件监听的机制。它可以监控集群中的资源变化,并在资源发生变化时触发事件通知。他用到了Informer 通过与 Kubernetes API Server 进行交互,获取资源的最新状态,再将这些状态同步到本地缓存中。

为什么需要informer

当涉及大规模、高性能的系统时,直接与 API Server 通信可能会导致一些挑战和性能问题,而 Informer 的引入可以有效地减少 API Server 的压力,降低网络开销,实现响应式事件监听,提高应用程序的性能和响应速度,以及处理资源同步和冲突问题。这使得系统更加高效、稳定和可靠。

举个栗子。公司举办团建,如果通过私聊每个人来通知活动地点和活动,需要花费非常多的时间和精力。而将参与活动的人拉群并发一条公告,就能快速地同步团建信息了。informer就像是给clients拉了个群,将api-server的信息通过公告进行同步。

Informer工作流程

informer用到client-go的几个关键组件

  • reflecter 负责监听特定的kubernetes资源变化事件。
  • informer 负责从delta FIFO队列中取出资源变化事件,并进行缓存与索引的操作。
  • indexer 负责管理存储资源对象的索引。
  • custom controller 根据资源变化实现本地节点的一些管理操作,本地的kubernetes应用可以通过实现controller监控服务端资源的变化。

下面的图介绍了各个模块之间是怎么交互和工作的。
在这里插入图片描述

根据这个关系图,可以了解到客户端的整个资源同步流程。简单地看就是如下几步,

  1. reflecter通过list/watch方法监听kubernetes api的资源变化 ->1
  2. reflecter将监听到的资源变化对象添加到fifo队列中 ->2
  3. informer从队列取出资源变化对象,并将取出的对象同步到本地缓存 ->3,4,5
  4. 同步缓存时,也会将资源对象回调至custom handler -> 6
  5. custom handler将资源对象加入到workqueue中等待处理 ->7
  6. work进程从workqueue中取出资源对象,再进行额外的处理操作 ->8,9

后续分析计划

后续将会按照这个同步流程的顺序来详细分析每个模块的代码和设计逻辑。
分析计划:

  1. Informer
  2. Refletor
  3. Resync机制
  4. DeltaFIFO
  5. Indexer
  6. Informer
  7. stream list VS list

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/39254.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

揭秘热门工作秘籍:ChatGPT大显身手!轻松提升工作效率的高效Prompt技巧曝光!

目录 01 背景 福利:文末有chat-gpt纯分享,无魔法,无限制 02 AI 可以帮助程序员做什么? 2.1 技术知识总结 2.2 拆解任务 2.3 阅读代码/优化代码 2.4 代码生成 2.5 生成单测 2.6 更多 AI 应用/插件 AIPRM Voice Control for Ch…

2023企业微信0day漏洞复现以及处理意见

2023企业微信0day漏洞复现以及处理意见 一、 漏洞概述二、 影响版本三、 漏洞复现小龙POC检测脚本: 四、 整改意见 免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#x…

论文阅读:《Waymo Public Road Safety Performance Data》

文章目录 1 背景2 方法2.1 数据来源2.2 碰撞数据 3 碰撞事件分析4 讨论 1 背景 这篇文章是讲waymo道路安全性能数据分析的,主要想表达的是waymo自动驾驶系统在安全上面的出色表现,以向政府、大众提高自己产品的公信力。 这篇文章分析的数据是自从2019年到…

MBR400100CT-ASEMI肖特基模块MBR400100CT

编辑:ll MBR400100CT-ASEMI肖特基模块MBR400100CT 型号:MBR400100CT 品牌:ASEMI 封装:M2 正向电流:400A 反向电压:100V 引线数量:2 芯片个数:2 芯片尺寸:102MIL…

OpenCV-Python中的图像处理-霍夫变换

OpenCV-Python中的图像处理-霍夫变换 霍夫变换霍夫直线变换霍夫圆环变换 霍夫变换 霍夫(Hough)变换在检测各种形状的技术中非常流行,如果要检测的形状可以用数学表达式描述,就可以是使用霍夫变换检测它。即使要检测的形状存在一点破坏或者扭曲也是可以使…

(7)(7.1) 使用航点和事件规划任务

文章目录 前言 7.1.1 设置Home位置 7.1.2 视频:制作并保存多路点任务 7.1.3 视频:加载已保存的多航点任务 7.1.4 使用说明 7.1.5 提示 7.1.6 自动网格 7.1.7 任务指令 7.1.8 任务结束 7.1.9 任务重置 7.1.10 MIS_OPTIONS 7.1.11 任务再出发 …

04 - 分离头指针情况、理解HEAD和branch

查看所有文章链接:(更新中)GIT常用场景- 目录 文章目录 1. 分离头指针2. HEAD和branch2.1 branch的一些操作2.2 HEAD 1. 分离头指针 分离头指针detached HEAD是一种HEAD指针指向了某一个具体的 commit id,而不是分支的情况。 切换…

服务器如何防止cc攻击

对于搭载网站运行的服务器来说,cc攻击应该并不陌生,特别是cc攻击的攻击门槛非常低,有个代理IP工具,有个cc攻击软件就可以轻易对任何网站发起攻击,那么服务器如何防止cc攻击?请看下面的介绍。 服务器如何防止cc攻击&a…

希尔排序【Java算法】

文章目录 1. 概念2. 思路3. 代码实现 1. 概念 希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序。希尔排序在数组中采用跳跃式分组的策略,通过某个增量将数组元素划分为若干组,然后分…

Java:PO、VO、BO、DO、DAO、DTO、POJO

💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! Java:PO、VO、BO、DO、DAO、DTO、POJO PO持久化对象(Persistent Object) PO是持久化对象,用于表示数据库中的实体或表…

tauri-vue:快速开发跨平台软件的架子,支持自定义头部UI拖拽移动和窗口阴影效果

Tauri Vue Typescript 一个使用 taurivuets 开发跨平台软件的模板,支持窗口头部自定义 UI 和拖拽和窗口阴影,不用再自己做适配了,拿来即用,非常 nice。而且已经封装好了 tauri 的 http 请求工具,省去很多弯路。开源…

分布式 - 消息队列Kafka:Kafka消费者分区再均衡(Rebalance)

文章目录 01. Kafka 消费者分区再均衡是什么?02. Kafka 消费者分区再均衡的触发条件?03. Kafka 消费者分区再均衡的过程?04. Kafka 如何判定消费者已经死亡?05. Kafka 如何避免消费者的分区再均衡?06. Kafka 消费者分区再均衡有什…

UglifyJS 和JShaman相比有什么不同?都可以进行js混淆加密吗?

UglifyJS 和JShaman相比有什么不同? UglifyJS主要功能是压缩JS代码,减小代码体积;JShaman是专门用于对JS代码混淆加密,目的是让JS代码变的不可读、混淆功能逻辑、加密代码中的隐秘数据或字符,是用于代码保护的。 因此…

java.lang.NoClassDefFoundError: org/apache/tez/dag/api/TezConfiguration

错误: java.lang.NoClassDefFoundError: org/apache/tez/dag/api/TezConfigurationat org.apache.hadoop.hive.ql.exec.tez.TezSessionPoolSession$AbstractTriggerValidator.startTriggerValidator(TezSessionPoolSession.java:74)at org.apache.hadoop.hive.ql.e…

音视频技术开发周刊 | 306

每周一期,纵览音视频技术领域的干货。 新闻投稿:contributelivevideostack.com。 人工智能研究人员声称,通过Zoom音频检测击键的准确率为93% 通过记录按键并训练深度学习模型,三位研究人员声称,基于单个按键的声音特征…

eclipse 导入项目js报错问题

eclipse 导入项目后会出现项目中的js文件报错(红叉),如下图所示,有时候报错的文件很多,需要集中处理。 解决办法: 右键项目名称》Properties》MyEclipse》JavaScript》Include Path,在右侧选择“…

vim键盘图

国外:http://www.viemu.com/a_vi_vim_graphical_cheat_sheet_tutorial.html,原创,有SVG图,有分步骤的图。 国内翻译:[https://blog.csdn.net/qq_41052753/article/details/101031847 有几个配色,很高清&…

【华为Datacom 综合拓扑案例—分享篇】

拓扑图 题目要求 实验要求: 1、PC1\PC2\PC3\PC4采用DHCP自动获取IP地址,SW5作为服务器,SW3和SW4作为中继 创建地址池ip pool huawei1和ip pool huawei2,租期都为2天 2、SW3与SW4做链路聚合,采用LACP模式。SW3作为主…

【Java 集合框架API接口】Collection,List,Set,Map,Queue,Deque

博主:_LJaXi Or 東方幻想郷 专栏: Java | 从跨行业到跨平台 开发工具:IntelliJ IDEA 2021.1.3 Java集合框架 API接口 Collection接口List接口HashSet, TreeSetSet接口使用 HashSet 实现使用 TreeSet 实现 HashMap、TreeMapMap接口…

SQL-每日一题【1341. 电影评分】

题目 表:Movies 表:Users 请你编写一个解决方案: 查找评论电影数量最多的用户名。如果出现平局,返回字典序较小的用户名。查找在 February 2020 平均评分最高 的电影名称。如果出现平局,返回字典序较小的电影名称。 …