1. 课程导论:etcd在K8s中的核心地位、IO性能对集群稳定性的影响、压测沙盘的价值与课程目标
1.1 etcd:Kubernetes 控制平面的“状态中枢”
在 Kubernetes 集群架构中,etcd 是唯一保存所有集群状态数据的分布式键值存储系统。无论是 Pod 调度、Service 发现、ConfigMap 更新,还是 RBAC 权限变更,最终都会转化为对 etcd 的读写请求。etcd 的健康状况直接决定了控制平面的可用性。
| 组件 | 与 etcd 的关系 | 典型操作 |
|---|---|---|
| kube-apiserver | 唯一直接读写 etcd 的组件 | Watch、List、Create、Update、Delete |
| kube-scheduler | 通过 apiserver 间接读写 | 绑定 Pod 到 Node |
| kube-controller-manager | 通过 apiserver 间接读写 | Deployment 副本数调节、Node 状态更新 |
| kubelet | 通过 apiserver 间接读写 | Pod 状态上报、Volume 挂载信息 |
关键认知:etcd 不是缓存,而是权威数据源。一旦 etcd 响应变慢或不可用,整个集群的调度、扩缩容、服务发现都将停滞。
1.2 IO 性能:决定集群稳定性的“隐形瓶颈”
etcd 对磁盘 IO 的敏感度极高。Raft 日志持久化、WAL 写入、snapshot 落盘、boltdb 事务提交,每一步都依赖底层存储的 IO 延迟与吞吐。当 IO 性能劣化时,etcd 会出现以下连锁反应:
- Leader 选举频繁:磁盘 fsync 延迟超过 Raft 心跳超时(通常 50ms),触发 Leader 重新选举,导致集群短暂不可用。
- 请求超时与重试风暴:apiserver 的 etcd 请求超时(默认 30s)后重试,进一步加剧 IO 负载。
- Watch 事件堆积:IO 瓶颈导致事件推送延迟,控制器和调度器基于过期状态做出错误决策。
- Snapshot 阻塞:大集群下 snapshot 写入耗时过长,阻塞后续事务提交。
| IO 指标 | 健康阈值 | 风险阈值 | 影响 |
|---|---|---|---|
| WAL fsync 延迟 (p99) | < 10ms | > 50ms | Leader 选举风险 |
| DB 事务提交延迟 (p99) | < 20ms | > 100ms | API 请求超时 |
| 磁盘 IOPS (4k 随机写) | > 500 | < 200 | 吞吐量下降 |
| 磁盘带宽 (顺序写) | > 50 MB/s | < 20 MB/s | Snapshot 阻塞 |
生产教训:某在线业务集群因底层存储从 NVMe 降级为共享 SAN,WAL fsync 延迟从 2ms 飙升至 200ms,导致 3 节点 etcd 在 5 分钟内连续发生 4 次 Leader 切换,集群控制面瘫痪 12 分钟。
1.3 压测沙盘:从“被动救火”到“主动防御”
传统 IO 性能验证依赖生产环境“试错”,风险极高。压测沙盘提供了一种隔离、可复现、可量化的验证环境,其核心价值体现在:
- 风险前置:在沙盘中模拟高 IO 压力、磁盘故障、网络延迟等场景,提前暴露 etcd 性能瓶颈。
- 曲线复核:对比压测 IO 曲线与生产基线,识别异常抖动和趋势劣化。
- 配置验证:测试不同磁盘类型(NVMe、SSD、云盘)、Raft 参数、内核 IO 调度策略对 etcd 稳定性的影响。
- 容量规划:基于压测结果推算集群规模增长后的 IO 需求,避免资源超分。
1.4 课程目标与学习路径
本课程旨在帮助 SRE 和 K8s 运维人员建立一套完整的 etcd IO 性能评估与风险控制体系。完成学习后,你将能够:
- 独立搭建压测沙盘:使用 fio、etcd-benchmark、自定义故障注入工具构建隔离测试环境。
- 解读 IO 曲线:从延迟分布、IOPS 趋势、吞吐量变化中识别性能拐点和异常模式。
- 制定风险控制策略:基于压测结果设定告警阈值、配置限流、规划存储资源。
- 输出复核报告:将压测数据与生产基线对比,形成可执行的优化建议。
| 模块 | 核心内容 | 产出物 |
|---|---|---|
| 基础篇 | etcd 存储架构、Raft IO 模型、磁盘性能指标 | IO 性能基线模板 |
| 工具篇 | 压测工具选型、沙盘环境搭建、自动化脚本 | 可复用的沙盘部署方案 |
| 分析篇 | IO 曲线绘制、异常检测、根因定位 | 曲线复核检查清单 |
| 控制篇 | 限流配置、存储选型、Raft 参数调优 | 风险控制策略文档 |
学习建议:建议在非生产环境搭建一套最小沙盘(1 节点 etcd + 1 台压测机),边学边练。本课程所有压测脚本和配置模板均可在沙盘中直接运行。