【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 即为恢复成功。
相关推荐
运维开发故事20 小时前
基于 Arthas 的多集群在线诊断系统设计与实现
kubernetes
Patrick_Wilson3 天前
从「改个端口」到 502:Next.js on k8s 的容器端口、Service 映射与 env 覆盖
docker·kubernetes·next.js
探索云原生3 天前
K8s 1.36 这个 GA 特性,把 initContainer 拉模型的 hack 干掉了
ai·云原生·kubernetes
云恒要逆袭3 天前
运行你的第一个Docker容器
后端·docker·容器
Java之美4 天前
一次k8s升级引发的DevicePlugin注册失败
云原生·kubernetes
程序员老赵5 天前
10 分钟部署 OpenCode:Docker 一键安装,浏览器打开就能用 AI 写代码(附完整命令与排错)
docker·容器·ai编程
武子康8 天前
调查研究-183 Apple container:Mac 上用轻量 VM 跑 Linux 容器,Swift 会改写本地容器体验吗?
docker·容器·apple
2601_9618752411 天前
决战申论100题2026|最新|范文
linux·容器·centos·debian·ssh·fabric·vagrant
java_cj11 天前
深入kube-apiserver认证机制:从Bearer Token到mTLS的完整认证链解析
linux·运维·服务器·云原生·容器·kubernetes