Kubernetes 源码剖析:client-go

目录


1. 模块总览与架构图

client-go 主要由以下子系统构成:

  • REST/Typed Client:基于 rest.Config 构造 RESTClient,再生成 Clientset 与各资源组的 typed clients。
  • Informer 架构:SharedInformerFactoryReflector(ListAndWatch)→ DeltaFIFOIndexer(Store)Processor(Listeners) → 回调/队列。
  • 缓存与只读访问:Lister 基于 Indexer 提供本地只读查询;Store 提供线程安全缓存。
  • 动态与发现:dynamic.Interface 操作 GVR,discovery.DiscoveryInterface 构建资源发现缓存。
  • 序列化:SchemeCodecsNegotiatedSerializer 负责编解码与版本协商。
flowchart LR
  subgraph API[Kube-APIServer]
  end

  subgraph Client[REST / Typed Clients]
    CFG[rest.Config]
    TR[transport.Transport\n(TLS/认证/限速/重试/Wrap)]
    RC[RESTClient]
    CS[Clientset\n(core/apps/...)]
  end

  subgraph Informer[Informer 架构]
    SIF[SharedInformerFactory]
    R[Reflector]
    Q[DeltaFIFO]
    IDX[Indexer/Store]
    P[Processor\n(Listeners)]
    H[Handlers\n(ResourceEventHandler)]
    L[Lister]
  end

  subgraph Ext[Dynamic/Discovery/Codec]
    DY[dynamic.Interface]
    DC[discovery.DiscoveryInterface]
    SC[Scheme/Codec/Serializer]
  end

  CFG --> TR --> RC --> CS
  CS -->|List/Watch| API
  SIF --> R --> Q --> IDX --> P --> H
  IDX --> L
  DY --> API
  DC --> API
  RC -. uses .- SC
  SIF -. uses .- DC