Kubernetes ETCD的恢复与备份

在 Kubernetes 中,ETCD 扮演着至关重要的角色:

1. 集群状态存储 2. 服务发现 3. 配置管理 4. 分布式锁和协调 5. 故障恢复

ETCD 存储了 Kubernetes 集群中所有的状态信息,包括节点、Pod、Service、ConfigMap、Secrets 等。ETCD 支持服务发现机制,帮助 Kubernetes 组件找到彼此并进行通信。Kubernetes API Server 会通过 ETCD 存储和检索集群的配置信息和状态数据。ETCD 还用于存储和管理 Kubernetes 集群的配置数据,包括网络配置、存储配置等,确保集群能够根据最新的配置进行调整和优化。使用 Raft 一致性算法来确保数据的一致性和高可用性,这使得它可以用于实现分布式锁和协调机制,确保在多节点环境下的操作一致性。当集群中的某个节点发生故障时,ETCD 中存储的数据可以用于快速恢复该节点的功能。


下面介绍如何对ETCD进行恢复与备份:

首先,如果集群中正在运行任何 API 服务器,则不应尝试还原 etcd 的实例。相反,请按照以下步骤还原 etcd:

  • 停止所有API 服务器实例
  • 为所有 etcd 实例恢复状态
  • 重启所有 API 服务器实例

建议重启所有组件(例如 kube-schedulerkube-controller-managerkubelet), 以确保它们不会依赖一些过时的数据。


列出 etcdctl 可用的各种选项。可以通过指定端点、证书和密钥来制作快照。

XML 复制代码
ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 \
  --cacert=<trusted-ca-file> \
  --cert=<cert-file> \
  --key=<key-file> \
  snapshot save <backup-file-location>

将现有的 Kubernetes 配置和 ETCD 数据目录重命名为备份目录,以便在恢复过程中不被覆盖。

XML 复制代码
mv /etc/kubernetes/manifests /etc/kubernetes/manifests.bak
mv /var/lib/etcd /var/lib/etcd.bak

etcd 支持从 major.minor 或其他不同 patch 版本的 etcd 进程中获取的快照进行恢复。 还原操作用于恢复失败的集群的数据。在启动还原操作之前,必须有一个快照文件。它可以是来自以前备份操作的快照文件, 也可以是来自剩余数据目录的快照文件。

XML 复制代码
ETCDCTL_API=3 etcdctl \
  --endpoints=https://127.0.0.1:2379 \
  --cacert=<trusted-ca-file> \
  --cert=<cert-file> \
  --key=<key-file> \
  --data-dir <data-dir-location> \
snapshot restore snapshot.db

**如果 <data-dir-location> 与之前的文件夹相同,请先删除此文件夹并停止 etcd 进程,再恢复集群。 否则,在恢复后更改 etcd 配置并重启 etcd 进程将使用新的数据目录: 首先将 /etc/kubernetes/manifests/etcd.yamlname: etcd-data 对应条目的 volumes.hostPath.path 改为 <data-dir-location>, 然后执行 kubectl -n kube-system delete pod <name-of-etcd-pod>systemctl restart kubelet.service(或两段命令都执行)。

然后将 Kubernetes 配置恢复到原始位置,并重启 kubelet 服务以应用更改。

XML 复制代码
mv /etc/kubernetes/manifests.bak /etc/kubernetes/manifests
systemctl restart kubelet.service

注意事项

验证备份和恢复:在执行这些操作之前,确保备份文件的完整性和可用性。

服务中断:在生产环境中执行这些操作时,可能会导致服务中断,请提前做好准备。

权限:确保执行这些命令的用户具有足够的权限。

结束

相关推荐
bjzhang751 小时前
CentOS下安装MySQL详解
linux·mysql·centos
鹤落晴春3 小时前
【K8s】Pod调度、configMaps
云原生·容器·kubernetes
Jason_chen3 小时前
Linux 6.2 音频机制深度解析:AI驱动的低延迟音频与零信任音频安全架构
linux
下午写HelloWorld3 小时前
Linux系统及Ubuntu常用指令
linux·ubuntu·操作系统
张忠琳3 小时前
【runc 1.4.2】(Part 2)runc 1.4.2 超深度分析 — CLI层:main.go、命令文件、runner、信号处理、TTY
云原生·kubernetes·runc
weixin_523185324 小时前
Collections.unmodifiableMap详解:真的不可修改吗?
java·linux·前端
凡人叶枫5 小时前
Effective C++ 条款04:确定对象被使用前已先被初始化
java·linux·开发语言·c++·嵌入式开发
云栖梦泽5 小时前
玩转RK3506SDK
linux·嵌入式硬件
Java面试题总结6 小时前
Linux-Ubantu-贴士-apt的地盘
linux·运维·服务器
kong@react6 小时前
Rocky Linux 10.2 全面解析:企业级 CentOS 替代方案及保姆级docker安装
java·linux·运维·docker