跳到主要内容

数据流

读取路径

Browser → Handler → Service → K8sRepo

┌────────────┴────────────┐
│ │
Informer Cache API Server
(sub-ms, 8 types) (fallback, all types)
  1. Handler 接收 GET 请求
  2. Service 将请求委托给 K8sRepo
  3. K8sRepo 优先查询 Informer 缓存(8 种核心资源)
  4. 若缓存未命中或该资源未被缓存,则回退到 API Server
  5. 响应中包含 meta.source(值为 "cache" 或 "apiserver")及 meta.stale 标志

写入路径

Browser → Handler → Service → K8sRepo → API Server

Informer Watch

EventListener

WS Hub

All Browsers
  1. Handler 接收 POST/PUT/DELETE 请求
  2. Service 校验后将请求委托给 K8sRepo
  3. K8sRepo 直接调用 API Server
  4. API Server 应用变更
  5. Informer Watch 检测到变更
  6. EventListener 通知 WS Hub
  7. Hub 向所有已连接的浏览器广播消息
  8. 浏览器自动更新(无需轮询)

实时推送

实时系统完全解耦:

// EventListener interface — Hub implements this
type EventListener interface {
OnResourceEvent(event ResourceEvent)
}

// Hub: non-blocking receive, drop if channel full
// (frontend has 30s fallback polling)
func (h *Hub) OnResourceEvent(event ResourceEvent) {
select {
case h.broadcast <- marshal(event):
default: // drop, don't block Informer
}
}

Informer 缓存策略

已缓存(8 种)按需查询不缓存
PodsJobsSecrets(安全考量)
DeploymentsCronJobsEvents(数据量过大)
StatefulSetsConfigMaps
DaemonSetsPVs, PVCs
ServicesStorageClasses
IngressesNetworkPolicies
NodesRoles, RoleBindings
NamespacesServiceAccounts