etcd / 生产内核 已把
单 Raft 组 → WAL/MVCC → Watch/Lease
钉到五轴排障;etcd/13
钉过 apiserver↔︎etcd 分层、resourceVersion 与
Node Lease,但写明 apiserver
实现全书不在此展开。分布式系统百科 ·
etcd 与 Kubernetes
网络 分别覆盖协调层百科与 Pod
数据面。中间仍缺一层:一次 Create/Update 卡在
Admission 还是 storage.Interface、504 是 APF 排队还是 etcd
ReadIndex、410 Gone 是 cacher bookmark 还是 etcd
ErrCompacted、Webhook 503 与 storage
超时如何分列,以及何时不该直连 etcd 排障
apiserver。
本系列回答:kube-apiserver 生产路径里 REST 请求失败落在哪一层,watch cache 相对 etcd 直读换来了什么排障坐标,以及控制面 504 如何与 etcd 五轴分列。
写:
- generic apiserver 与 HandlerChain;storage.Interface + etcd3。
- resourceVersion / bookmark;watch cache / cacher。
- List/Pagination、Watch 服务端路径、Admission/Webhook、AuthN/AuthZ/Audit、APF。
- CRD/aggregation 边界、运维升级、排障五轴、相对直连 etcd/Kine 的选型。
不写:Helm 安装全书、scheduler/controller/kubelet 内核重讲、CRD codegen 全书、CNI/mesh 数据面、未实测 P99 排行。不把 apiserver 写成透明 etcd 代理。 持久化层见 etcd/;Pod 网络见 k8s-network/、cilium/。
系列状态:01–16 已发布(2026-08-28)。 规划见 PLAN.md。机制结论钉源码 tag
v1.30.3(Kubernetes v1.30.3),不以kubernetes.io/docs/最新版冒充该版本。etcd 后端对照钉 etcd v3.5.33。无真实 K8s 集群则不粘贴伪造kubectl输出 / apiserver metrics。实验台账未跑。
版本锚定:Kubernetes v1.30.3(源码 tag
v1.30.3;与 istio-xds 对照锚一致)。etcd 后端常见为 3.5.x——存储耦合机制以 v1.30.3 apiserver 源码为准,etcd 侧五轴见 etcd 系列。
适合谁看
- 平台 / SRE,要把「apiserver 504 / controller 不同步」推进到「能归因 Storage/Watch/Admission/Auth/APF 五轴」。
- 读过 etcd/ 或 etcd/13,需要 apiserver 侧机制全书的读者。
- 在原生 etcd 栈、Kine、events 分集群之间做控制面架构选型的架构师。
与已有系列的分工
| 维度 | etcd/ / etcd/13 | 本系列 |
|---|---|---|
| 定位 | 持久化层五轴;K8s 耦合边界 | apiserver 生产内核 + 504 分列 |
| 深度 | Raft→MVCC→Watch;apiserver 指针 | storage→cacher→admission→APF 链 |
| 对照 | TiKV/FDB 选型 | 直连 etcd vs apiserver 排障;Kine 边界 |
| 症状 / 问题 | 去看 |
|---|---|
| no leader / quota / ErrCompacted / Lease TTL | etcd/15 |
| Raft / MVCC / bbolt / etcd Watch | etcd/ |
| xDS / istiod / mesh | istio-xds/ |
| CNI / Pod 网络 / Service | k8s-network/、cilium/ |
| 504 / 410 / webhook 慢 / APF 排队 / rv 落后 | 本系列 15 |
| 该不该直连 etcd 排障 apiserver | 本系列 16 |
读法:只要「只有 apiserver 连 etcd」→ etcd/13 足够;要「storage vs cacher vs admission vs APF 分列、504 归因」→ 本系列 01 → 03 → 05 → 12 → 15。
一、这个领域最值得关注的 5 个问题
- 一次 Create/Update/Patch 从 REST 到 etcd,失败落在哪一层? → 第 2–4、8–9、15 篇。
- resourceVersion、bookmark、410 与 etcd ErrCompacted 如何分列? → 第 4–7、15 篇。
- watch cache 如何改变 etcd 负载?List 风暴从哪触发? → 第 5–7、15 篇。
- Webhook 慢、APF 排队、504 与 etcd 指标如何分列? → 第 9、12、15 篇。
- 何时查 etcd 系列、何时查 apiserver?Kine/events 分集群边界? → 第 16 篇。
二、篇目依赖关系与推荐阅读路径
flowchart TD
overview["01 Overview"] --> reqpath["02 Request Path"]
reqpath --> storage["03 storage etcd3"]
storage --> rv["04 resourceVersion"]
rv --> cacher["05 Watch Cache"]
cacher --> list["06 List Pagination"]
list --> watch["07 Watch Server"]
watch --> adm["08 Admission"]
adm --> webhook["09 Webhooks"]
webhook --> authn["10 Authentication"]
authn --> authz["11 AuthZ Audit"]
authz --> apf["12 APF"]
apf --> ext["13 CRD Boundary"]
ext --> ops["14 Ops Upgrade"]
ops --> trouble["15 Troubleshoot"]
trouble --> select["16 Selection"]
overview --> select
| 路径 | 篇目 | 适合 |
|---|---|---|
| 必读核心 | 1 → 3 → 5 → 12 → 15 | 快速建立五轴 |
| 504 归因 | 1 → 5 → 9 → 12 → 15 | apiserver 超时分列 |
| 读写与 Watch | 4 → 6 → 7 → 15 | 410 / List 风暴 |
| 安全与准入 | 8 → 10 → 11 | 403/503 分列 |
| 完整通读 | 1 → … → 16 | 系统掌握 |
三、目录与每篇价值点
第一部分:模型与存储(01–05)
- 控制面全景
- 相对 etcd/13、distributed/50 的缺口;五轴与 16 篇路线。
- apiserver
进程与请求路径
- generic apiserver、HandlerChain、REST 路由。
- storage.Interface
与 etcd3
- codec、prefix、CRUD/Watch 到 etcd。
- resourceVersion
与 Revision 映射
- mod revision、continue、一致性读期望。
- Watch cache /
cacher 架构
- dispatch、bookmark、cache miss 穿透。
第二部分:读写、准入与身份(06–11)
- List /
Pagination / 一致性 List
- continue token、etcd Range 成本。
- Watch
路径(服务端视角)
- 长连接、410/timeout。
- Admission
链概览
- 准入顺序、插件与 webhook 边界。
- Mutating / Validating
Webhook
- timeout、failurePolicy。
- Authentication
- SA、Bearer、OIDC 边界。
- Authorization 与
Audit
- RBAC、SAR、audit 分列。
第三部分:流控、运维与收束(12–16)
- APF 与
max-in-flight
- 公平排队、504 与 etcd lag 分列。
- CRD
/ aggregation / 扩展边界
- API 扩展停损线。
- 运维与升级
- HA、flags、与 etcd 联检。
- 排障五轴
- Storage/Watch/Admission/Auth/APF 口令表。
- 选型收束与开放问题
- 排除树;回收 etcd/13 apiserver 停损线。
参考
- PLAN.md — 逐章大纲、来源/实验/研究台账
- etcd / 生产内核
- etcd/13 · K8s 控制面耦合
- Kubernetes 官方文档
返回 全部系列索引
读完这篇,下一步读什么
优先读同系列或同问题的下一篇,把单篇消费变成主题集群。
【kube-apiserver】控制面全景:缺口、五轴坐标系与 16 篇路线
相对 etcd/13、distributed/50、k8s-network 补齐 kube-apiserver 生产内核缺口;以 Storage/Watch/Admission/Auth/APF 五轴为坐标系定义 16 篇阅读路线;版本锚定 Kubernetes v1.30.3。
【kube-apiserver】Watch cache / cacher:dispatch、bookmark 与穿透 etcd
钉 Kubernetes v1.30.3 cacher 对 storage.Interface 的包装:watchCache 滑动窗口与 Ready 门、bookmark 推送路径、cache miss 打穿 etcd 的触发条件,以及 List 风暴成因与 watch cache SLO 与 compaction 间隔之间的开放问题。
【kube-apiserver】排障五轴:Storage、Watch、Admission、Auth、APF
按 Storage/Watch/Admission/Auth/APF 五轴做症状否证;给出完整五轴命令表与症状→轴映射(504、410、401、403、webhook 超时、List 风暴、OOM);说明 apiserver_request_duration_seconds 等核心 metrics 语义;并提供决策树:何时穿透到 etcd/15,何时留在 apiserver 轴。
【kube-apiserver】storage.Interface 与 etcd3:codec、prefix 与 CRUD 路径
拆解 kube-apiserver 的 storage.Interface 契约与 etcd3 实现:codec 序列化、pathPrefix/resourcePrefix、value.Transformer 加密边界、GuaranteedUpdate 乐观并发,以及 Watch 到 etcd3 的完整路径。版本锚定 Kubernetes v1.30.3 / etcd v3.5.33。