【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 即为恢复成功。
相关推荐
2401_834636992 小时前
保姆级 Kubernetes 部署教程|从原理到三节点集群落地
云原生·容器·kubernetes
陌路203 小时前
Docker教程从入门到精通(0基础)
运维·docker·容器
初级炼丹师(爱说实话版)4 小时前
Ubuntu24.04 Docker+vLLM+qianwen2.5-coder-32B部署文档
docker·容器·vllm
ᥬ 小月亮9 小时前
SonarQube使用教程(Docker安装)
运维·docker·容器
空谷有来人13 小时前
docker安装redis
redis·docker·容器
运维大师13 小时前
【K8S 运维实战】39-etcd脑裂故障复盘
运维·kubernetes·etcd
Ai拆代码的曹操14 小时前
K8s 实战:CrashLoopBackOff 状态下 kubectl logs 拿不到日志的三层排查方案
linux·docker·kubernetes
ZJNF200314 小时前
EC节能风机厂家直销,如何避开选型误区?——从效率实测到服务保障的全面解读
人工智能·容器
爱吃蔬菜091315 小时前
一键部署K8s v1.30.14全离线解决方案
云原生·容器·kubernetes
XR风云15 小时前
docker buildx 忽略容器镜像服务的证书校验的方法
运维·docker·容器