【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 即为恢复成功。
相关推荐
汪汪大队u2 小时前
基于 K8s 的物联网平台运维体系:Ansible+Zabbix 自动化监控与故障自愈(一)—— 环境准备与 Zabbix Server 部署
运维·kubernetes·自动化·ansible·zabbix
learning-striving3 小时前
华为云欧拉操作系统的服务器实例中手工部署 Docker
linux·运维·服务器·docker·容器·华为云
布吉岛的石头14 小时前
Docker Compose编排实战:多容器应用从开发到生产
运维·docker·容器
SPC的存折17 小时前
19-2、K8s 三种 QoS 等级 & 与 Resources(requests_limits)的核心关联
云原生·容器·kubernetes
SPC的存折17 小时前
1、K8S-组件介绍
云原生·容器·kubernetes
SPC的存折18 小时前
20、K8S-Pod驱逐
java·docker·kubernetes
sbjdhjd1 天前
02 (中)| K8s Pod 生产化落地:从配置到优化全流程
linux·运维·云原生·kubernetes·开源·podman·kubelet
皓月盈江1 天前
Linux Ubuntu系统如何编辑Docker容器内的文件
linux·ubuntu·docker·容器·靶场·vulhub·编辑docker内文件
珂玥c1 天前
添加node节点到k8s集群+配置网络插件flannel
云原生·容器·kubernetes