🏪k8s informer 架构

type
status
date
slug
summary
category
tags
icon
password
AI summary
Blocked by
Blocking
Category
 

整体视角

notion image
informer 架构由 Reflector、DeltaFIFO、Indexer、EventHandler 和 WorkQueue 构成。
Reflector 负责 List+Watch API Server,所有变化进入 DeltaFIFO 队列。
Informer 从队列 Pop 事件更新到本地缓存 Indexer,并触发事件回调。
事件回调把 key 入队到 WorkQueue,Controller 的 worker 再处理调谐逻辑。
通过缓存减少 API Server 压力,通过队列保证事件顺序,通过事件驱动实现最终一致性。
 

Reflector

Reflector 是 Informer 的最上游数据采集器,它使用 ListAndWatch 拉取和监听资源变化,并把每次变化(Delta)压入 DeltaFIFO。它不缓存数据,只负责同步事件
 

ListAndWatch实现原理

List 本质就是:

  • 标准 HTTP/1.1
  • 一次性返回所有对象
  • 响应体是 JSON,包含 items + resourceVersion

Watch 是:

这不是 WebSocket,也不是 gRPC。而是 HTTP/1.1 + Chunked Transfer Encoding 形成的流式接口,一种基于HTTP server push的方式。
功能
技术
建立连接
HTTP/1.1 GET
保持连接
keep-alive
推送数据
chunked transfer encoding(流式响应)
事件格式
JSON per line
断线处理
客户端自动重连 + ResourceVersion
选择HTTP1.1的原因
  1. HTTP/1.1 长连接兼容性好
  1. 无需升级协议
  1. 更易于做代理、审计、RBAC、认证
  1. gRPC 出现之前,最容易实现的服务端推送方式
APIServer 有大量代理和负载均衡,WebSocket 在早期并不可靠
 
Kubernetes 的 Watch 本质是使用 HTTP/1.1 的 chunked transfer encoding 实现的长连接流式响应。客户端发起 GET watch=true 后,APIServer 不关闭连接,而是不断通过 HTTP 流推送 JSON 事件。客户端通过 resourceVersion 来保证断线续传
 
 
 

Delta fifo queue

DeltaFIFO 是 Informer 事件处理的第一站,它接收 Reflector 发来的 Add/Update/Delete/Sync 事件;
它为每个 key 合并事件(防抖、去重),并用 FIFO 维护事件处理顺序;
Informer 的 Controller 会从 DeltaFIFO.Pop 中取出事件,更新 Indexer,再把事件分发给 Processor 和 Handler。
因此 DeltaFIFO 是保证 Informer 高效、无重复地处理资源变化的关键组件。
 

indexer

notion image
Indexer 是 Informer 的本地缓存,它存储所有从 APIServer 同步下来的对象。
除了基本的 key-value 存储,它还支持按任意维度构建索引,比如 namespace、ownerRef、node 等。
Controller 在处理调谐逻辑时,大部分查询都依赖 Indexer 而不是访问 API Server,因此效率极高,也减轻了集群压力。
items 是存对象的,indexers 是生成索引值的规则,而 indices 是真正加速查询的索引表。对象进入 items 后,通过 indexers 计算索引,并写入 indices,从而使 ByIndex 查询非常高效。
 

Resource event handler

几乎所有控制器中的 Handler 都做一件事:
把对象 key(namespace/name)放入 workqueue
ResourceEventHandler 是 Informer 在资源发生变化时调用的回调。
它将 Add/Update/Delete 事件转化为 Controller 可处理的逻辑。
实际项目中,这些 Handler 通常把对象 key 加入工作队列,由 Reconcile 循环从缓存读取最新对象状态执行调谐。
Event Handler 是 Informer → Controller 之间的桥梁。
 
 

workQueue

Workqueue 是 Kubernetes Controller 的任务调度队列,它支持去重、限流、延迟和自动重试。
Informer 的事件处理器只负责将对象的 key 放入 Workqueue;
Workers 从队列取 key,执行 Reconcile,并从缓存(Indexer)读取对象最新状态。
Workqueue 提供失败重试机制(AddRateLimited),成功后 Forget 清除计数。
因为使用 key 而不是对象本身,保证了调谐逻辑总是基于最新缓存状态,实现最终一致性。
 
Prev
分词
Next
服务网格 | istio
Loading...
Article List
如果去做,还有一丝希望;但是不去做,就毫无希望
技术分享
个人总结
转发