【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 即为恢复成功。
相关推荐
潘正翔19 小时前
docker核心概念
linux·运维·服务器·docker·容器·centos·运维开发
刘马想放假1 天前
Docker 从入门到进阶:一篇写给工程师的系统化实战指南
运维·docker·容器
zjun30211 天前
如何搭建TRAE IDE 连接到容器开发环境
docker·容器·ascend·trae
寒冰碧海1 天前
大模型部署从0到1(一):通用环境全流程准备|NVIDIA驱动+Docker+NVIDIA Container Toolkit
运维·docker·容器
hj2862511 天前
K8S 核心组件与资源概念 + 带注释命令 + 实操案例版笔记
笔记·容器·kubernetes
nece0011 天前
Kubernetes v1.36.0 + Ubuntu24.04 + containerd 2.x WordPress 完整部署文档
云原生·容器·kubernetes
你想考研啊1 天前
七、Docker 容器 + Docker Compose单机部署理发店系统
docker·容器·composer
AOwhisky2 天前
下一代容器来了?Docker 宣布原生支持 WebAssembly
java·运维·docker·容器·rust·wasm
众人皆醒我独醉2 天前
OpenShift RBAC 与平台安全策略:比 K8s 多出来的那几道锁,每道都是为了堵一个曾经发生过的事故
面试·kubernetes
众人皆醒我独醉2 天前
为什么你的 RBAC 配了还是 403?—— 一套可以复现的排障方法论
面试·kubernetes