etcd 指南

etcd 指南:Kubernetes 数据心脏的运维秘籍

真实生产警报:某公司曾因 etcd 磁盘写满导致整个集群瘫痪12小时!本文将揭秘 etcd 的核心机制,并给出生产环境硬核实践方案。


一、etcd 核心定位:K8s 的"记忆中枢"

1.1 三大核心职责

  • 集群状态存储器:保存所有 API 对象(Pod/Service/Deployment 等)
  • 分布式协调器:实现领导者选举、分布式锁等机制
  • 配置信息数据库:存储 kube-apiserver 的所有配置数据

1.2 数据存储结构示例

# 查看 etcd 中存储的 Pod 信息
ETCDCTL_API=3 etcdctl get /registry/pods/default/myapp \
--prefix --keys-only \
--endpoints=https://127.0.0.1:2379 \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key

二、生产环境六大核心特性

2.1 强一致性保障

  • Raft 算法实战
    • 领导者选举:节点故障时秒级切换
    • 日志复制:所有写入操作需多数节点确认
    • 术语图解:
      Follower -> Candidate -> Leader
      (跟随者)   (候选人)    (领导者)
      

2.2 高可用架构

  • 集群部署方案
    节点数 容错能力 推荐场景
    1 绝对禁止生产使用
    3 1节点故障 中小型集群
    5 2节点故障 大型金融集群

2.3 高性能设计

  • 压测指标参考
    • 写入延迟:<50ms(SSD 磁盘)
    • 读取吞吐:10,000+ QPS
    • 推荐硬件:
      CPU: 4核+ 
      内存: 8GB+ 
      磁盘: SSD(建议 IOPS >5000)
      网络: 万兆互联
      

2.4 安全加固方案

# 生产环境 TLS 配置示例
peer-transport-security:
  client-cert-auth: true
  cert-file: /etc/etcd/peer.crt
  key-file: /etc/etcd/peer.key
client-transport-security:
  require-client-auth: true

2.5 实时变更监听

# 监控 Pod 创建事件
etcdctl watch --prefix /registry/pods \
--rev=$(etcdctl get / --prefix --write-out=json | jq '.kvs[0].mod_revision')

2.6 数据版本控制

  • 多版本管理
    # 查看 key 的历史版本
    etcdctl get --rev=1523 /registry/services
    # 压缩旧版本释放空间
    etcdctl compact 2000
    

三、生产运维实战手册

3.1 备份恢复流程

# 每日快照备份
etcdctl snapshot save backup.db \
--endpoints=https://etcd1:2379 \
--cacert=/etc/etcd/ca.crt \
--cert=/etc/etcd/server.crt \
--key=/etc/etcd/server.key

# 灾难恢复步骤
etcdctl snapshot restore backup.db \
--data-dir /var/lib/etcd \
--initial-cluster-token=etcd-cluster-1 \
--initial-advertise-peer-urls https://etcd1:2380

3.2 性能优化参数

# /etc/etcd/etcd.conf 关键参数
# 提升写入性能
max-wals: 8
max-request-bytes: 157286400 # 150MB
# 控制内存增长
auto-compaction-retention: "24h"
quota-backend-bytes: 8589934592 # 8GB

3.3 监控告警指标

指标名称 健康阈值 告警动作
etcd_disk_wal_fsync_duration_seconds <0.5s 检查磁盘IO
etcd_server_leader_changes_seen_total <5/小时 检查网络稳定性
etcd_debugging_mvcc_db_total_size_in_bytes <80%配额 触发压缩

四、血泪故障案例库

4.1 案例1:磁盘空间耗尽

  • 现象:集群无法写入,kube-apiserver 503报错
  • 应急处理
    # 临时扩容
    etcdctl --endpoints=$ENDPOINTS alarm disarm
    # 紧急清理
    etcdctl defrag --cluster
    

4.2 案例2:网络分区导致脑裂

  • 解决方案
    # 强制重置集群
    etcdctl --endpoints=healthy-endpoint member remove <ID>
    etcdctl member add etcd-new --peer-urls=https://new-ip:2380
    

五、etcd 3.5+ 新特性实践

5.1 分层存储(实验性)

# 启用分层存储
experimental-enable-lease-storage-prefix: true
experimental-compaction-batch-limit: 1000

5.2 日志优化

# 结构化日志输出
ETCD_LOG_FORMAT=json
ETCD_LOG_LEVEL=debug

生产环境黄金法则

  1. 永远保持奇数节点数量
  2. 定期测试备份恢复流程
  3. 监控磁盘空间和IO延迟
  4. 生产集群禁用自动压缩
  5. 使用专用物理机部署 etcd 节点

下期预告:《百万级集群 etcd 调优:从参数优化到内核级改造》

posted on 2025-03-09 09:55  Leo-Yide  阅读(77)  评论(0)    收藏  举报