目录
[一、etcd 备份操作](#一、etcd 备份操作)
[1. 前置准备:安装 etcd 客户端](#1. 前置准备:安装 etcd 客户端)
[2. 执行备份命令](#2. 执行备份命令)
[二、etcd 数据恢复操作](#二、etcd 数据恢复操作)
[1. 停止集群服务](#1. 停止集群服务)
[2. 恢复 etcd 数据](#2. 恢复 etcd 数据)
[3. 恢复集群服务并验证](#3. 恢复集群服务并验证)
[4. 校验恢复结果](#4. 校验恢复结果)
etcd 是 Kubernetes 集群的核心键值存储,承载着所有集群状态数据,是集群稳定性的基石。做好 etcd 的定期备份与恢复预案,是保障集群数据安全的关键运维工作。
一、etcd 备份操作
1. 前置准备:安装 etcd 客户端
首先在控制平面节点安装 etcd 客户端工具,用于执行备份操作:
apt install etcd-client -y
2. 执行备份命令
通过 etcdctl snapshot save 命令创建集群数据快照,需指定 etcd 端点与 TLS 证书:
ETCDCTL_API=3 \
--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 etcdbackupfile.db
备份完成后,可通过 ls 命令验证备份文件生成:
ll etcdbackupfile.db
二、etcd 数据恢复操作
恢复操作需严格按流程执行,避免影响集群状态。
1. 停止集群服务
首先移动 etcd 静态 Pod 清单,停止 kubelet 调度,避免恢复过程中 etcd 服务自启动:
mv /etc/kubernetes/manifests /etc/kubernetes/manifests.bak
2. 恢复 etcd 数据
重命名现有 etcd 数据目录,执行快照恢复:
mv /var/lib/etcd /var/lib/etcd.bak
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 \
--data-dir /var/lib/etcd \
snapshot restore etcdbackupfile.db
3. 恢复集群服务并验证
恢复 etcd 静态 Pod 清单,重启 kubelet 服务:
mv /etc/kubernetes/manifests.bak /etc/kubernetes/manifests
systemctl restart kubelet.service
4. 校验恢复结果
-
查看集群节点状态,确认所有节点正常运行:
kubectl get node
-
检查 etcd 健康状态:
ETCDCTL_API=3 etcdctl --endpoints=https://192.168.30.130:2379
--cacert=/etc/kubernetes/pki/etcd/ca.crt
--cert=/etc/kubernetes/pki/etcd/server.crt
--key=/etc/kubernetes/pki/etcd/server.key endpoint health
输出显示 healthy: successful 即为恢复成功。
三、问答题
Q:解释 etcd 及其备份和恢复的过程。
**A:**etcd 是一个一致且高度可用的键值存储,用作 Kubernetes 所有集群数据的后备存储。
备份过程:
- 申明 etcd API 版本;
- 使用
etcdctl snapshot save命令创建数据快照; - 验证备份文件生成,确认备份有效性。
恢复过程:
- 停止 kubelet 服务(移动 etcd 静态 Pod 清单);
- 重命名现有 etcd 数据目录,执行快照恢复;
- 恢复 etcd 静态 Pod 清单,重启 kubelet 服务;
- 检查 etcd 健康状态与集群节点状态,确认恢复成功。
Q:为什么 etcd 备份和恢复操作必须使用 ETCDCTL_API=3?
A: Kubernetes 集群默认使用 etcd v3 API 存储数据,v2 API 已不再使用。因此备份和恢复必须指定 ETCDCTL_API=3,否则会因 API 版本不匹配导致快照备份失败或恢复后数据不可用。
Q:执行 etcd 恢复前,为什么要移动 /etc/kubernetes/manifests 目录?
**A:**etcd 是通过静态 Pod 方式由 kubelet 管理的。移动 manifests 目录后,kubelet 会自动停止 etcd 静态 Pod,防止恢复过程中 etcd 服务自动启动,避免新数据写入与恢复操作冲突,保障恢复流程安全。
Q:如何验证 etcd 备份文件的有效性?
A: 备份完成后,可以直接查看备份文件是否生成:ll etcdbackupfile.db。也可以在测试环境执行一次恢复流程,验证备份数据可正常恢复,以此确认备份有效性。
Q:恢复 etcd 后,如何确认集群已恢复正常?
**A:**可以通过以下两步验证:
- 查看集群节点状态:
kubectl get node,确认所有节点状态为 Ready; - 检查 etcd 健康状态:使用
etcdctl endpoint health命令,输出显示healthy: successful即为恢复成功。