【Kubernetes从入门到精通】第63篇:Informer机制——K8s高性能事件驱动的核心,没有它控制器早累死了
上一篇【第62篇】Controller Manager——K8s的自动驾驶仪下一篇【第64篇】Scheduler深度解析——Pod调度算法的高考阅卷摘要上篇我们讲了控制器的协调循环提到它靠Informer第一时间知道资源变了。但Informer到底怎么做到的为什么几十个控制器并发跑API Server没被查爆答案藏在两个设计里List-Watch先全量列一遍再增量监听变化和本地缓存每个组件在内存里存一份资源副本查状态不用打API Server。这篇文章拆开Informer的内部架构——Reflector侦察兵、DeltaFIFO变化队列、Indexer本地索引缓存三大件讲清增量同步和Resync兜底机制以及SharedInformerFactory怎么让多个控制器共用一份缓存。一、为什么需要Informer1.1 没有Informer的灾难【如果控制器直接查API Server】 50个控制器每个每秒查一次: GET /api/v1/pods → API Server GET /api/v1/services → API Server GET /api/v1/endpoints → API Server ... → API Server被轮询打死 → 网络带宽爆炸 → 延迟高、吞吐低 而且每次都返回全量列表(可能几千个对象) → 极其浪费1.2 Informer的解法【Informer 本地缓存 增量通知】 每个组件(controller/kubelet)启动一个Informer: 1. List: 一次性拉全量(sync cache) 2. Watch: 之后只收变化事件(ADDED/MODIFIED/DELETED) 3. 本地维护一份缓存(Indexer) 控制器查状态 → 直接读本地缓存(不打API Server!) 资源变化 → Watch事件秒级通知 → 触发调谐 → API Server压力骤降 → 控制器响应飞快要点Informer的核心价值是**“把读压力从API Server转移到本地内存”**。全量List只在启动时做一次之后全是轻量的Watch增量事件。这就是为什么K8s能轻松支撑成百上千个控制器和数以万计的Pod——它们大部分读操作都命中本地缓存。二、Informer内部架构2.1 三大件【Informer 内部流水线】 API Server │ │ List-Watch ▼ ┌─────────────────────────────────────────┐ │ 1. Reflector (侦察兵) │ │ • List: 拉全量 → 存Indexer │ │ • Watch: 收增量事件 │ │ • 把事件投进 DeltaFIFO │ └─────────────────┬───────────────────────┘ ▼ ┌─────────────────────────────────────────┐ │ 2. DeltaFIFO (变化队列) │ │ • 存放发生了什么变化 │ │ • 类型: Added/Updated/Deleted/Sync │ │ • FIFO: 先来先处理 │ └─────────────────┬───────────────────────┘ ▼ ┌─────────────────────────────────────────┐ │ 3. Indexer (本地索引缓存) │ │ • 内存里存对象(按namespace/name索引) │ │ • 控制器查状态从这里读(不打API Server) │ └─────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────┐ │ 4. EventHandler (你的回调) │ │ • OnAdd / OnUpdate / OnDelete │ │ • 把 key 塞进 WorkQueue → 触发Reconcile│ └─────────────────────────────────────────┘2.2 代码视角// 一个典型的Informer使用(伪代码)informer:cache.NewSharedIndexInformer(cache.ListWatch{// Reflector用的List/Watch函数ListFunc:func(){returnclient.List(...)},WatchFunc:func(){returnclient.Watch(...)},},v1.Pod{},// 关心Podtime.Minute*30,// resync周期cache.Indexers{cache.NamespaceIndex:cache.MetaNamespaceIndexFunc},)// 注册事件回调informer.AddEventHandler(cache.ResourceEventHandlerFuncs{AddFunc:func(obj){key:getKey(obj)workqueue.Add(key)// 塞进工作队列},UpdateFunc:func(old,new){workqueue.Add(getKey(new))},DeleteFunc:func(obj){workqueue.Add(getKey(obj))},})informer.Run(stopCh)// 启动开始List-Watch三、List-Watch与增量同步3.1 全量增量的配合【List-Watch 时序图】 T0: Informer启动 ├─ List /pods → 拿到全部1000个Pod │ → 写入Indexer缓存 │ → 注意记住 resourceVersion1000 │ T1: Watch /pods?resourceVersion1000 (从此版本开始监听) ├─ 收到 ADDED pod-1001 → 缓存1, 通知handler ├─ 收到 MODIFIED pod-5 → 缓存更新, 通知handler ├─ 收到 DELETED pod-3 → 缓存-1, 通知handler │ (后续只收增量永远不拉全量了) ⚠️ 如果Watch连接断了: 从断点resourceVersion重新Watch 若断太久(etcd已压缩旧历史) → 重新List要点resourceVersion是这里的灵魂——它像数据库的日志偏移量。List时记下当前的resourceVersionWatch从那个点继续保证不丢事件、不重复。如果连接断了从断点续传断太久etcd的历史被压缩了就重新List一把。这套机制保证了最终一致性——缓存最终和etcd完全一致。四、Resync兜底纠正4.1 为什么需要Resync【Resync 解决事件丢了的问题】 场景某个UPDATE事件因为网络抖动丢了 → Indexer缓存和实际状态不一致 → 但没人通知handler去调谐 Resync机制: • 每隔一段时间(如30分钟)定时触发 • 把Indexer里所有对象假装成Updated事件 • 重新塞进WorkQueue → 重新调谐 • 即使没真的变化也强制重新核对一遍 → 保证即使丢了事件最终也会纠正 → 这是K8s最终一致性的保险丝五、SharedInformerFactory共享缓存5.1 多个控制器共用一份【SharedInformerFactory——别各搞各的】 没有共享(浪费): Controller A 起一个 Pod Informer (一份缓存) Controller B 起一个 Pod Informer (又一份缓存) Controller C 起一个 Pod Informer (又又一份) → 3份相同缓存3次List-Watch浪费! 有共享(省): SharedInformerFactory 起一个 Pod Informer 多个控制器共用这一份缓存 这一个Watch → 1份缓存1次List-Watch所有控制器受益// 共享Informer工厂factory:informers.NewSharedInformerFactory(client,0)podInformer:factory.Core().V1().Pods()// 所有控制器共用这个// Controller A 注册handlerpodInformer.Informer().AddEventHandler(handlerA)// Controller B 注册handlerpodInformer.Informer().AddEventHandler(handlerB)// 只启动一次 Watch但两个handler都能收到事件factory.Start(stopCh)要点SharedInformerFactory是K8s性能优化的关键一招——让同一个进程里的多个控制器共享一份Informer一份缓存、一次Watch。controller-manager、kubelet、Operator框架(client-go)全都用它。既省API Server压力又省内存。理解Informer是读懂K8s源码和写Operator的必经之路。本篇小结Informer是K8s高性能事件驱动的核心用List-Watch启动全量之后增量维护本地缓存让控制器读状态不打API Server、变化秒级感知。内部三件套ReflectorList-Watch侦察兵把事件投进DeltaFIFO变化队列再更新Indexer本地索引缓存最后触发你的EventHandler把key塞进WorkQueue。resourceVersion保证增量不丢不重Resync定时兜底纠正丢事件保证最终一致。SharedInformerFactory让同进程多控制器共享一份缓存——既省API压力又省内存。下篇深入Scheduler——Pod调度算法的高考阅卷。上一篇【第62篇】Controller Manager——K8s的自动驾驶仪下一篇【第64篇】Scheduler深度解析——Pod调度算法的高考阅卷

相关新闻

项目经理的职业跃迁:从“将才”到“帅才”的破局之路

项目经理的职业跃迁:从“将才”到“帅才”的破局之路

摘要: 本文系统阐述了项目经理向项目总监、项目群经理、PMO负责人等中层管理岗位跃迁所需的系统性能力升级,涵盖理论视野、业务深度、人际关系与情商、心智模型四大维度。文章指出,这一跃迁是从“将才”到“帅才”的身份质变,并提…

2026/8/22 9:03:07 阅读更多 →
14.6万条假参考文献:AI正在污染学术知识基础设施

14.6万条假参考文献:AI正在污染学术知识基础设施

如果论文里引用的文献根本不存在,那这篇论文还能算"学术成果"吗? 一、一个令人不安的数字 2026年7月,康奈尔大学的一个研究团队发表了一项分析——他们研究了大约250万篇论文、1.11亿条参考文献后,得出了一个令人不安…

2026/8/22 9:14:59 阅读更多 →
C#对接本地大模型API实战:从LM Studio部署到流式对话开发

C#对接本地大模型API实战:从LM Studio部署到流式对话开发

之前在做本地AI应用开发时,发现很多教程要么只讲调用云端API,要么只讲模型部署,对于如何用C#这种主流后端语言去对接本地运行的模型API,资料总是零零散散。本文将提供一个完整的闭环方案,从启动LM Studio本地服务&…

2026/8/22 9:18:57 阅读更多 →

最新新闻

旅游业销售岗面试技巧与应答策略

旅游业销售岗面试技巧与应答策略

1. 旅游业销售岗面试的底层逻辑旅游业销售岗位的核心价值在于"连接供需"。与普通销售不同,旅游产品销售的是"体验预期",客户购买的不仅是机票酒店,更是对美好旅程的想象。这决定了面试考察的三大维度:产品理解…

2026/8/22 19:24:43 阅读更多 →
PDFgear:全功能免费PDF处理工具实测与使用指南

PDFgear:全功能免费PDF处理工具实测与使用指南

这次我们来看一个完全免费的 PDF 处理工具——PDFgear。对于经常需要处理 PDF 文档的用户来说,格式转换、压缩、编辑、合并、签名等操作是刚需,但市面上很多工具要么收费,要么功能受限,要么在输出文件上添加水印。PDFgear 的出现&…

2026/8/22 19:24:43 阅读更多 →
数模竞赛中的自助法实战:MATLAB与Python协同不确定性量化

数模竞赛中的自助法实战:MATLAB与Python协同不确定性量化

1. 自助法不是“随便抽样”,而是数模竞赛里最被低估的稳健性武器我带过七届数学建模国赛队伍,每年都有至少两支队伍在答辩环节被评委追问:“你这个显著性结论,有没有考虑样本量小带来的估计偏差?”——然后他们掏出t检…

2026/8/22 19:24:43 阅读更多 →
单摆建模实战:从理想假设到物理真实

单摆建模实战:从理想假设到物理真实

1. 单摆不是“理想模型”,而是建模能力的试金石你打开MATLAB,敲下ode45,画出一条光滑正弦曲线——恭喜,你完成了单摆运动的“教科书式”仿真。但真正拉开建模者差距的,从来不是能不能跑通代码,而是当真实单…

2026/8/22 19:24:43 阅读更多 →
Jamba实战指南:SSM+MoE混合架构的工业级部署与优化

Jamba实战指南:SSM+MoE混合架构的工业级部署与优化

1. 这不是又一个“Transformer平替”,而是SSM架构第一次真正扛起应用级大旗最近刷到AI21实验室发布的Jamba模型,标题里那个“首个应用级Mamba架构AI模型”的表述,我盯着看了三分钟——不是因为兴奋,而是因为心里咯噔一下&#xff…

2026/8/22 19:24:43 阅读更多 →
Python异常值处理实战:从IQR、Z-Score到高维检测算法

Python异常值处理实战:从IQR、Z-Score到高维检测算法

1. 从美赛C题到日常分析:为什么异常值处理是数据工作的“必修课”去年带队参加美赛,C题的数据集一打开,我就知道这又是一场硬仗。题目是关于某个复杂系统的评估,数据量不小,但更棘手的是,那些散落在各处的异…

2026/8/22 19:23:43 阅读更多 →

日新闻

沉金PCB工艺实战指南:从设计到SMT焊接的可靠性保障

沉金PCB工艺实战指南:从设计到SMT焊接的可靠性保障

在电子硬件开发领域,PCB(印制电路板)的沉金工艺是提升产品可靠性和焊接质量的关键环节。对于需要高密度互连、长期稳定运行或高频信号传输的板卡,如“黍姐仿通行证”这类可能涉及身份识别、数据交互的硬件项目,选择正确…

2026/8/22 0:00:11 阅读更多 →
电气考研电路八月强化四步法:从知识体系到真题实战的闭环攻略

电气考研电路八月强化四步法:从知识体系到真题实战的闭环攻略

这次我们来看一个针对电气考研电路科目的学习规划项目。它不是软件工具,而是一套聚焦于8月份关键节点的备考策略。对于电气工程考研的同学来说,电路分析是专业课的重中之重,也是拉开分差的关键。进入8月,复习进入强化阶段&#xf…

2026/8/22 0:00:11 阅读更多 →
消除AI代码的“AI味”:Claude Code设计优化技能配置与实战指南

消除AI代码的“AI味”:Claude Code设计优化技能配置与实战指南

大家好,我是专注于前端开发与AI工具实践的技术博主。在日常使用 Claude Code 等AI编程助手时,你是否也遇到过这样的困扰:生成的代码功能上没问题,但代码风格、组件设计、交互逻辑总透着一股“AI味”——布局单调、样式简陋、交互生…

2026/8/22 0:00:11 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/21 3:21:33 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/22 8:09:09 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/21 6:07:56 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/22 18:08:39 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/22 7:31:03 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/22 3:22:48 阅读更多 →