ETCD备份还原

环境准备:

master 192.168.8.128

node1 192.168.8.129

k8s版本:

一:安装etcdctl工具

1.1下载安装包:

wget https://github.com/etcd-io/etcd/releases/download/v3.4.13/etcd-v3.4.13-linux-amd64.tar.gz

1.2解压:

tar xf etcd-v3.4.13-linux-amd64.tar.gz

1.3移动到sbin下:

mv etcd-v3.4.13-linux-amd64/etcdctl /usr/local/sbin/

1.4查看版本:

etcdctl version

二:开始备份

2.1首先查看所需要的认证文件:

kubectl describe pod etcd-k8smaster -n kube-system #查看etcd pod的详细信息

2.2备份命令:

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 snapshot save /etcd-backup/etcddata_$(date +%F-%T).db

/etcd-backup/etcddata_$(date +%F-%T).db #指向备份到哪里以及定义名字

--cacert= 后面的文件就是上面截图中--trusted-ca-file=后面的文件

--cert=后面的文件就是上面截图中--cert-file=后面的文件

#--key=后面的文件就是上面截图中--key-file=后面的文件

  • /etc/kubernetes/pki/ca.crt:CA 证书,用于验证 etcd 服务器的身份。
  • /etc/kubernetes/pki/etcd/server.crt:etcd 服务器的客户端证书。
  • /etc/kubernetes/pki/etcd/server.key:etcd 服务器的私钥。

可以看到已经备份成功。

三:恢复

3.1恢复之前先查看一下现有的pod:

kubectl get pod

删除这三个pod,模拟意外丢失

kubectl delete deploy test #这三个pod是由deployment控制器创建的所以直接删除test控制器

已经删除。

3.2开始恢复

恢复之前要停止apiserver controller-manager scheduler etcd这些组件

原因:可以防止在恢复操作期间对 etcd 进行的任何写入操作,从而确保恢复过程的准确性和完整性。

由于etcd是通过静态Pod方式部署的,你可以通过重命名/etc/kubernetes/manifests/目录来停止所有由该目录下的YAML文件启动的服务

mv /etc/kubernetes/manifests/* /opt/backup/ #移动到其他目录

这时显示无法和apiserver建立连接了说明已经停止了。

将etcd的数据目录改名备份一下:

root@k8smaster1 etcd-backup\]# mv /var/lib/etcd /var/lib/etcd-bakcup 原因: 一会恢复的话会指定恢复的目录,以防止会冲突 #### 现在我们就可以进行恢复了 ETCDCTL_API=3 etcdctl snapshot restore /etcd-backup/etcddata_2024-12-19-16\\:43\\:45.db --name etcd-master01 --data-dir /var/lib/etcd --initial-cluster etcd-master01=https://192.168.8.128:2380 --initial-cluster-token etcd-cluster-token --initial-advertise-peer-urls https://192.168.8.128:2380 * `/etcd-backup/etcddata_2024-12-19-16:43:45.db`:这是备份文件的路径。 * `--name etcd-master01`:指定 etcd 实例的名称。 * `--data-dir /var/lib/etcd`:指定 etcd 数据存储的目录,就是我们上面改名的目录。 * `--initial-cluster etcd-master01=https://192.168.8.128:2380`:设置 etcd 的初始集群集信息,包括 etcd 服务器的地址。 * `--initial-cluster-token etcd-cluster-token`:指定用于加入集群集的令牌(token)。这个令牌用于验证加入集群的 etcd Pod。 * `--initial-advertise-peer-urls https://192.168.8.128:2380`:设置 etcd Pod 作为集群集成员时,其他 etcd Pod 如何发现并与之通信的初始对等 URL。 执行完之后需要将之前转移走的yaml文件转移回之前的目录: mv /opt/backup/\* /etc/kubernetes/manifests/ 查看pod kubectl get pod ![](https://i-blog.csdnimg.cn/direct/cc4958440b5645a590fe65adc0b76ca9.png) 可以看到已经恢复成功了,原先我们删除的pod也回来了

相关推荐
2401_835956818 分钟前
Golang怎么写基准测试benchmark_Golang基准测试教程【完整】
jvm·数据库·python
阿杰学AI1 小时前
AI核心知识129—大语言模型之 向量数据库(简洁且通俗易懂版)
数据库·人工智能·ai·语言模型·自然语言处理·向量数据库·vector database
SPC的存折1 小时前
D在 Alpine 容器中手动搭建 Discuz 全攻略(包含镜像一键部署脚本,可直接用)
linux·数据库·mysql·缓存
李兆龙的博客1 小时前
从一到无穷大 #67 大查询根因分析 - 从 PinSQL 到 RCRank
数据库·时序数据库
AgCl231 小时前
MYSQL-6-函数与约束-3/17
android·数据库·mysql
junqiduhang1 小时前
Win11 MySQL 8.0 安装八步走
数据库·mysql
zhangchaoxies1 小时前
golang如何使用SQLx原生SQL查询_golang SQLx原生SQL查询使用方法
jvm·数据库·python
m0_743623921 小时前
mysql如何优化InnoDB缓冲池大小_mysql缓冲池内存调优
jvm·数据库·python
孟意昶1 小时前
Doris专题31-SQL手册-基础元素
大数据·数据库·数据仓库·分布式·sql·知识图谱·doris
m0_617881421 小时前
如何操作 XML 数据_XMLTYPE 与 EXTRACT 函数解析节点
jvm·数据库·python