Kubernetes ETCD 工作原理详解:为什么说 ETCD 是整个集群的大脑?¶
文章摘要¶
ETCD 是 Kubernetes 控制平面的核心组件之一。
集群中的 Pod、Node、Deployment、Service、ConfigMap、Secret 等几乎所有资源信息,最终都会存储在 ETCD 中。
可以说:
没有 ETCD,就没有 Kubernetes。
本文将详细讲解 ETCD 的工作原理、数据存储机制、Raft 一致性算法、Leader 选举以及生产环境中的备份恢复方案。
学习目标¶
阅读完本文后,你将掌握:
- ETCD 是什么
- ETCD 在 Kubernetes 中的作用
- Kubernetes 数据存储流程
- Key-Value 存储机制
- Raft 一致性算法
- Leader 选举原理
- 数据备份与恢复
- 生产环境最佳实践
适用人群¶
本文适合:
- Kubernetes 初学者
- Linux 运维工程师
- DevOps 工程师
- 云计算学习者
- Kubernetes 面试准备人员
什么是 ETCD?¶
ETCD 是一个:
由:
CoreOS 公司的 李响、Brandon Philips、Alex Polvi
发起的开源项目,后来成为:
CNCF(云原生计算基金会) 的托管项目
简单理解:
例如:
当我们执行:
实际上:
最终被保存到了 ETCD。
ETCD 在 Kubernetes 中的位置¶
这里有一个非常重要的知识点:
Kubernetes 只有 API Server 可以直接访问 ETCD。
其它组件:
- Scheduler
- Controller Manager
- Kubelet
- Kube-Proxy
都不会直接访问 ETCD。
必须经过 API Server。
为什么 Kubernetes 需要 ETCD?¶
假设没有 ETCD。
当 API Server 重启后:
整个集群将无法运行。
因此 Kubernetes 需要:
的数据中心。
这就是 ETCD 的职责。
ETCD 存储了什么?¶
很多新人认为:
实际上远不止这些。
例如:
Node¶
Pod¶
Deployment¶
Service¶
ConfigMap¶
Secret¶
RBAC¶
几乎所有 Kubernetes 资源都会存储到 ETCD。
ETCD 的 Key-Value 结构¶
ETCD 本质是:
结构。
例如:
再例如:
可以理解成:
Kubernetes 数据写入流程¶
例如:
执行后:
第一步¶
请求到达:
第二步¶
API Server 校验:
第三步¶
写入:
第四步¶
返回成功。
流程如下:
Kubernetes 数据读取流程¶
例如:
流程:
因此:
ETCD 是 Kubernetes 唯一可信数据源。
什么是 Raft 一致性算法?¶
ETCD 最核心的技术之一。
为什么需要它?
假设:
组成集群。
如果:
写入数据。
如何保证:
数据也一致?
Raft 就是解决这个问题的。
ETCD 集群架构¶
生产环境通常:
三节点部署。
结构:
任何时刻:
Leader 选举¶
例如:
突然宕机:
剩余节点:
开始选举。
最终:
成为新 Leader。
整个过程通常:
写入为什么必须经过 Leader?¶
例如:
请求到达:
Leader:
完成后:
这称为:
什么是 Quorum?¶
三节点集群:
至少需要:
存活。
因为:
五节点:
存活。
因此:
实际上是不推荐的。
为什么生产环境推荐奇数节点?¶
推荐:
不推荐:
例如:
允许损坏:
而:
同样允许损坏:
资源浪费。
如何查看 ETCD 数据?¶
查看所有 Key:
查看具体资源:
生产环境一般不建议直接修改。
ETCD 数据备份¶
这是最重要的运维工作之一。
创建快照:
查看状态:
建议:
ETCD 数据恢复¶
恢复:
恢复后:
即可。
生产环境最佳实践¶
使用独立 ETCD 集群¶
大型生产环境推荐:
SSD 存储¶
ETCD 对磁盘延迟非常敏感。
推荐:
定期压缩数据¶
查看:
执行:
避免数据库膨胀。
定期备份¶
这是最重要的一条。
常见故障排查¶
ETCD 空间不足¶
查看:
Leader 频繁切换¶
检查:
API Server 无法启动¶
优先检查:
集群资源全部消失¶
优先检查:
是否损坏。
运维排查命令¶
查看成员:
查看健康状态:
查看状态:
查看告警:
面试常见问题¶
ETCD 的作用是什么?¶
存储 Kubernetes 集群状态数据。
哪个组件直接访问 ETCD?¶
API Server。
为什么使用 Raft?¶
保证数据强一致性。
为什么推荐 3 节点 ETCD?¶
满足高可用且资源利用率最佳。
为什么必须定期备份 ETCD?¶
因为 Kubernetes 的核心数据都存储在其中。
FAQ¶
删除 ETCD 会怎样?¶
整个 Kubernetes 控制面将无法正常工作。
ETCD 可以用 MySQL 替代吗?¶
不能。
Kubernetes 仅支持 ETCD。
ETCD 存储容器镜像吗?¶
不存储。
仅存储元数据。
生产实践¶
在一次 Kubernetes 1.34→1.35 升级过程中,由于 kubelet 参数异常,导致 ETCD Static Pod 无法正常重建,最终出现:
这说明 ETCD 是控制平面升级过程中最敏感的组件。总结¶
ETCD 是 Kubernetes 最核心的数据存储组件。
它负责:
- 存储集群状态
- 保证数据一致性
- 提供高可用能力
- 支撑整个控制平面运行
可以记住一句话:
API Server 是 Kubernetes 的入口,而 ETCD 是 Kubernetes 的记忆库。