etcd RangeStream在Kubernetes v1.37中升级为beta,配合etcd v3.7,通过流式分块读取减少API服务器和etcd的内存占用,使峰值使用更可预测。它替代分页Range,按字节而非键数限制块大小,边读边释放内存。默认启用,若etcd较旧则自动回退。
> 本文是写作规划,不是可发布正文。拆解对象:etcd 在 Kubernetes 控制面与生产协调场景下的服务器内核——以 etcd v3.5.33(2026-07-23 补丁线;源码 tag v3.5.33)为主线,把一次写入/读取/Watch/Lease 从 gRPC → Raft propose → WAL →…
本文介绍Kubernetes v1.30.3中kube-apiserver的watch cache机制,核心是Cacher组件:它通过watchCache环形缓冲存储事件,用Ready门控制启动同步,dispatch实现内存多路分发,bookmark维持资源版本推进。当缓存未命中或未就绪时回退到etcd,可能引发List风暴,需调整缓存容量和bookmark频率优化。
本文分析Kubernetes中`kubectl get pods -A`在大集群下变慢的原因,指出常见误判为etcd慢,实际可能是cacher或etcd3的List路径问题。文章详解了`resourceVersion`语义(`rv=""`走etcd强一致,`rv="0"`走缓存)、continue token的编码结构、分页成本模型,以及label selector在etcd侧无索引导致的全量扫描放大问题,并给出优化建议。
本文介绍Kubernetes v1.30中kube-apiserver的过载保护机制,包括旧的max-in-flight全局并发限制和新的API Priority and Fairness(APF)公平排队系统。APF通过FlowSchema和PriorityLevel配置,使用SFVR算法实现流量分类和公平调度。文章详细区分429、504等超载症状的排查路径,强调先检查APF等待指标,再排查etcd或Webhook,并提供默认配置和调参建议。
kube-apiserver无leader选举,多实例并发运行共享etcd,与controller-manager等不同。运维要点包括:滚动升级逐实例替换、处理409冲突、APF容量为各实例之和。核心flag有--etcd-servers、--etcd-servers-overrides(分集群events)、--request-timeout、--shutdown-delay-duration(需≥LB健康检查间隔×失败阈值)、--encryption-provider-config。升级顺序:etcd→apiserver→controller-manager→scheduler→kubelet,版本偏差不超过2个minor。健康检查中/readyz反映etcd连通性,/healthz不等价于etcd健康。
本文介绍Kubernetes控制面内核系列文章,聚焦kube-apiserver与etcd间的存储层。文章指出当前知识缺口,定义五条排障坐标系:Storage/etcd耦合、Watch/cache、Admission、AuthN/AuthZ、流控。版本锚定v1.30.3,提供16篇阅读路线,强调通过分层定位504、410等故障,而非简单直连etcd排查。
本文拆解kube-apiserver请求路径,从TLS终止到etcd写入,需经过APF流控、认证、授权、Admission等拦截点。APF在认证前,Admission在REST handler内。请求失败时需区分是Webhook拒绝、APF排队还是etcd问题,不能简单归因于etcd慢。GVR路由将请求映射到对应storage实现。
kube-apiserver通过storage.Interface与etcd交互,存储protobuf序列化数据,key由前缀拼接,value经Transformer加密。GuaranteedUpdate用etcd Txn实现乐观并发写,Create/Delete/Watch各有路径。排障需关注etcd延迟、转换失败等指标,区分apiserver与etcd问题。
本文解析Kubernetes中resourceVersion字段的语义与常见误用。该字段源自etcd的mod_revision,仅对同一对象有单调性,跨对象比较无意义。文章详述了Watch起点、continue token分页机制及一致性保证,指出不同读路径的一致性差异,并解释了410 Gone错误的来源与处理方式。
本文总结kube-apiserver排障系列终章,提出机制排除树,按症状(401/403、webhook 503、APF 429、etcd延迟、Watch错误等)定位至Auth、Admission、APF、Storage或Watch轴。回收etcd系列停损线,明确Kine SQL后端Watch语义差异及events分集群边界。列出三个开放问题(watch cache SLO、线性读一致性、Lease fencing),强调以实测关闭,并给出ADR友好收束建议。
本文介绍etcd生产内核系列文章,聚焦Raft共识、WAL持久化、MVCC存储、Watch同步和Lease TTL五条排障坐标系。文章指出常见问题如proposal卡顿、follower读stale、Watch追赶OOM等,并规划16篇阅读路线,强调K8s apiserver与etcd的耦合关系,为运维排障提供系统化框架。
etcd集群采用单一Raft组管理所有键值数据,与TiKV的Multi-Raft形成对比。EtcdServer负责状态机,raftNode适配Raft库。Leader处理写请求,Follower转发,Learner不参与投票。写路径经Raft提交,读路径可本地或ReadIndex,Watch和Lease各有独立机制。
本文介绍etcd v3.5.33中WAL日志与快照的实现机制。WAL通过CRC保护的64MB段文件持久化Raft日志,快照在applied index每增10万时触发并截断旧日志。崩溃恢复按WAL重放、加载快照、追赶日志顺序进行。committedIndex与appliedIndex分离,前者由Raft推进,后者由apply协程推进,二者差值过大时可能导致Watch延迟或重启后未就绪。
本文介绍etcd v3.5.33的MVCC数据模型,核心是Revision(main/sub)全序、keyIndex的generation生命周期,以及内存treeIndex与bbolt后端的职责分工。相比ZooKeeper的覆盖写和一次性Watch,etcd v3保留历史版本直到compaction,支持持久Watch和Txn compare可见性。文章还涉及与Watch、Txn、K8s resourceVersion的接口,以及历史保留与磁盘占用的权衡。
etcd v3.5.33将MVCC映射至bbolt,采用mmap预分配与批量提交(100ms或10000条)优化fsync。单写者约束使写路径串行,读路径并发。delete操作立即提交保证线性一致。bucket布局以revision为键,treeIndex管理逻辑映射。
本文介绍etcd v3.5.33中Raft提交条目如何通过apply管道转为MVCC revision并触发Watch。核心是区分committed index与applied index:commit仅表示日志复制完成,apply才更新MVCC状态。applyAll循环处理快照和条目,treeIndex内存索引过滤revision后批量读bbolt。Watch在事务End时同步通知。apply滞后会通过ErrTooManyRequests背压客户端,排障需区分Raft复制慢还是apply慢。
本文介绍etcd v3.5.33的写入路径与容量管理。写入经gRPC→Propose→Raft提交→quota检查→MVCC apply,ModRevision在事务内共享。当后端大小超配额时触发NOSPACE alarm,拒绝写操作但允许读和删除,需defrag恢复。还涉及apply积压导致的ErrTooManyRequests错误,以及K8s控制面相关故障排查。
etcd v3.5.33 读路径分三种:默认线性一致读用 ReadIndex 确认 Leader 并等待 apply;Serializable 读本地执行,可能读到旧数据;Lease 读不经 Raft,直接访问 Leader 的 lessor。混用易致排障混淆。线性读等待 apply 后走 MVCC,历史读超 compact 返回 ErrCompacted。选型建议:控制面用线性读,扩展用 Serializable,锁用线性加版本比较。
本文介绍etcd v3.5.33的Watch机制核心实现。watchableStore将watcher分为synced和unsynced两组:synced接收新事件,unsynced由后台循环从bbolt追赶历史。当channel满时,事件进入victims队列重试。compaction会触发ErrCompacted错误,客户端需重建缓存。Watch事件按revision严格有序,但可能早于Put响应到达,且不替代线性一致读。
完成下面两步后,将自动完成登录并继续当前操作。