type
status
date
slug
summary
category
tags
create_time
Aug 11, 2025 09:34 PM
icon
password
my_create_time

📝 前言

在 Kubernetes 的控制平面中,有一个低调但至关重要的组件 —— etcd
它是集群的大脑,存储了所有集群的状态信息与配置数据。
本文是云原生之旅第三部分的第三篇,将深入介绍 etcd 的定义、工作原理、在 Kubernetes 中的角色,以及在生产环境下的优化建议。

🧭 背景介绍

etcd 由 CoreOS 开发(已被 Red Hat 收购并捐献给了 CNCF),是一个分布式键值(Key-Value)存储系统,采用 Raft 共识算法来保证数据一致性。
作为 Kubernetes 的数据存储后端,它承担了存储和维护集群配置、节点状态、资源对象定义等关键任务。
一旦 etcd 出现问题,整个集群的稳定性将面临巨大风险。
比如某次真实的运维事故:
一家互联网公司在凌晨进行例行 Kubernetes 升级时,没有提前做 etcd 数据快照。
升级过程中,由于磁盘 I/O 突然飙高,etcd 节点写入延迟剧增,导致集群的 Leader 无法及时提交事务,触发了频繁的 Leader 选举。
短短几分钟内,所有 API 请求都出现超时,CI/CD 流水线中断,线上 Pod 也无法进行调度。
最终,运维团队不得不紧急从三天前的 etcd 快照中恢复数据,但由于快照过旧,部分业务的最新配置丢失,导致恢复过程拖延了 4 小时以上。
这个案例很好地说明了:
  • etcd 不仅是 Kubernetes 的“数据库”,更是整个集群的“生命线”。
  • 在生产环境中,必须定期备份、监控健康状态,并在变更前做好应急预案。

🧠 本章知识卡片

notion image

🚀 本章小节

1️⃣ 什么是 etcd ?

etcd 是一个强一致性分布式键值存储,为需要被分布式系统或机器集群访问的数据提供了一种可靠存储方式。
它在网络分区期间优雅地处理领导者选举,即使在领导者节点也能容忍机器故障。
它的主要特性:
  • 简洁接口:使用标准 HTTP 工具(如 curl)读写值。
  • 键值存储:将数据存储在分层组织的目录中,如同标准文件系统。
  • 监控变更:监控特定键或目录的变更,并对值的变化做出反应。
— 来源:https://etcd.io/

2️⃣ etcd 的工作原理

etcd 采用 Raft 共识算法 来实现分布式数据一致性,主要机制如下:
  • Leader 选举:在集群中选出一个 Leader 负责处理写请求,其他节点为 Follower。
  • 日志复制:Leader 将写入操作转换为日志条目并复制到 Follower。
  • 数据提交:当大多数节点确认日志条目时,数据才会被提交,确保一致性。
  • 快照与压缩:定期生成快照,清理旧日志,减少存储压力。
大致流程图如下所示:
notion image

3️⃣ etcd 在 kubenetes 中的作用

在 Kubernetes 中,几乎所有资源对象(Pod、Deployment、Service 等)的定义都存储在 etcd 中,并通过 API Server 与其交互,除此之外还有以下主要任务:
  • 存储集群状态:保存所有资源对象的定义和运行状态。
  • 提供事务保证:API Server 依赖 etcd 的事务能力保证更新操作的原子性。
  • 回滚与恢复:通过 etcd 数据快照实现集群状态的快速恢复。
  • 事件通知:支持 Watch 机制,Kubernetes 组件可以实时感知数据变化。

4️⃣ 常见启动参数

在生产环境中,etcd 的启动参数会直接影响性能和稳定性,常见参数包括:
参数
说明
--name
节点名称
--data-dir
数据存储目录
--listen-peer-urls
节点间通信地址
--listen-client-urls
客户端访问地址
--initial-advertise-peer-urls
对外通告的节点间通信地址
--initial-cluster
集群节点列表
--initial-cluster-state
初始集群状态(new/exists)
--snapshot-count
触发快照的事务数
--auto-compaction-retention
自动压缩历史数据的保留时间

4️⃣ 生产环境 etcd 优化

在大规模 Kubernetes 集群中,etcd 性能优化至关重要,主要建议包括:
  • 硬件层面优化
    • 使用 SSD 提升 I/O 性能(至关重要,etcd 对磁盘 I/O 要求较高)
    • 增加内存,减少磁盘访问
    • 网络延迟低于 1ms
  • 参数调优
    • 设置 -auto-compaction-retention 定期清理历史数据
    • 调整 -snapshot-count 控制快照频率
    • 启用 -quota-backend-bytes 限制存储空间防止爆满
  • 运维策略
    • 定期做快照备份(如每日一次)
    • 在升级 Kubernetes 之前先升级并验证 etcd
    • 使用 etcdctl 工具监控健康状态
  • 高可用部署
    • 推荐部署奇数个节点(3 或 5 个)以保证选举稳定
    • 分布在不同物理主机或可用区

✅ 总结

etcd 是 Kubernetes 控制平面的数据中枢,负责存储和管理集群的所有状态信息。
理解它的工作原理和在 Kubernetes 中的作用,对于保障集群稳定运行至关重要。
生产环境中,必须对 etcd 做好高可用部署、硬件优化和数据备份,才能在关键时刻确保数据安全与一致性。
💡
有关文章的任何疑问,欢迎您在底部评论区留言,一起交流~
若文章对您有帮助,欢迎 请我喝杯咖啡~
 
上一篇
Workday alarm in Calendar 功能规划
下一篇
第三部分:控制平面组件 kube-apiserver 介绍

评论
Loading...