etcd备份需定期快照并安全存储,使用etcdctl snapshot save命令配合正确证书;恢复前须停用控制平面、清空数据目录、确保版本与拓扑一致,单节点可通过snapshot restore重建。

Etcd 备份:定期快照 + 安全存储
Etcd 是 Kubernetes 的核心数据存储,所有集群状态(如 Pod、Service、ConfigMap)都持久化其中。备份本质是创建 etcd 数据快照(snapshot),推荐使用 etcdctl snapshot save 命令。需在任一 etcd 成员节点上执行,且确保使用与 etcd 服务匹配的证书和端点:
- 命令示例:ETCDCTL_API=3 etcdctl --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 snapshot save /backup/etcd-snapshot-$(date +%Y%m%d).db
- 快照文件是二进制,不可直接编辑,但可校验完整性:etcdctl --write-out=table snapshot status /backup/etcd-snapshot-20241001.db
- 备份应定时执行(如 cron 每日一次),并同步至异地或对象存储(如 S3、MinIO),避免单点故障
Etcd 恢复前提:停用控制平面 + 确保环境一致
恢复不是热操作,必须先停止所有 kube-apiserver 实例(否则会写入冲突数据)。同时确认以下三点:
- 目标节点已卸载旧 etcd 数据目录(默认 /var/lib/etcd),清空后才能安全恢复
- 恢复所用的 etcd 版本必须与原集群完全一致(含 patch 版本),否则 snapshot 可能不兼容
- 新 etcd 成员的 --initial-cluster、--name 和证书须与原集群拓扑严格对齐,尤其多节点场景下不能混淆 peer URL
单节点恢复:从快照重建 etcd 实例
适用于开发或单控制平面集群。在清空数据目录后,用 etcdctl snapshot restore 生成新数据目录:
- 命令示例:ETCDCTL_API=3 etcdctl --write-out=table snapshot restore /backup/etcd-snapshot-20241001.db --data-dir=/var/lib/etcd-restored --name=etcd-node-1 --initial-cluster=etcd-node-1=https://10.0.0.10:2380 --initial-advertise-peer-urls=https://10.0.0.10:2380 --advertise-client-urls=https://10.0.0.10:2379
- 完成后替换原 /var/lib/etcd 为新目录,更新 systemd 服务中 --data-dir 参数,再启动 etcd 与 kube-apiserver
- 验证:kubectl get nodes 应返回原有节点列表,/var/lib/etcd,用 snapshot restore 生成新数据目录(注意 --name 和 --initial-cluster 保持原名与集群配置)
- 启动该节点 etcd,检查是否成功加入集群:etcdctl --endpoints=https://127.0.0.1:2379 member list 中状态应为 started
- 重复上述步骤,每次只操作一个节点;若原集群有 3 节点,最多允许 1 个离线,其余 2 个必须持续提供读写服务
- 全部恢复完成后,用 etcdctl endpoint health 和 kubectl get cs(如启用)确认整体健康










