【Kubernetes】(二十)ETCD 备份与恢复

目录

[一、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 所有集群数据的后备存储。

备份过程:

  1. 申明 etcd API 版本;
  2. 使用 etcdctl snapshot save 命令创建数据快照;
  3. 验证备份文件生成,确认备份有效性。

恢复过程:

  1. 停止 kubelet 服务(移动 etcd 静态 Pod 清单);
  2. 重命名现有 etcd 数据目录,执行快照恢复;
  3. 恢复 etcd 静态 Pod 清单,重启 kubelet 服务;
  4. 检查 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:**可以通过以下两步验证:

  1. 查看集群节点状态:kubectl get node,确认所有节点状态为 Ready;
  2. 检查 etcd 健康状态:使用 etcdctl endpoint health 命令,输出显示 healthy: successful 即为恢复成功。
相关推荐
Thneonl14 小时前
照着 CKS 教材做实验,把 apiserver 干瘫了 7 分钟
安全·kubernetes
名字还没想好☜16 小时前
Kubernetes 用 kubectl port-forward 和 proxy 调试集群内服务:两者区别、断连自动重连与为什么别用在生产
运维·docker·kubernetes
武汉唯众智创1 天前
云计算实训室建设指南(2026版):从技能大赛赛项标准反推架构、课程与落地路径
云原生·kubernetes·云计算·云计算实训室·云计算教学平台·职业技能大赛
wdfk_prog1 天前
ROS教程:01 搭建 ROS1 Noetic Docker 开发环境
运维·缓存·docker·容器·ros
szephyr1 天前
Docker + Compose 实战:把本地项目一键搬到云服务器,附完整配置
运维·docker·容器·部署·云服务器
wdfk_prog1 天前
ros教程02:创建 catkin Workspace、Package 与第一个 ROS1 C++ Node
运维·缓存·docker·容器·ros
名字还没想好☜1 天前
Docker 网络实战:bridge/host/none/自定义网络、容器互通与端口映射踩坑
运维·docker·kubernetes
探索云原生1 天前
KubeClipper 1.7.0 发布:Operation 优化与 Kubernetes 1.37 支持
linux·docker·云原生·kubernetes·go
fengkai45451 天前
八、Docker详解1-3
运维·docker·容器
MrSYJ2 天前
Veth pair 细讲
docker·云原生·容器