K8S Etcd备份与恢复

【Etcd备份】

Jenkins自动化备份Etcd请查看(https://www.cnblogs.com/Hannibal-/articles/18308602)

一、安装etcdctl命令

1、查看集群对应的etcd版本
    cat /etc/kubernetes/manifests/etcd.yaml |grep  image:
    
2、下载对应的etcd包并解压
    wget https://github.com/etcd-io/etcd/releases/download/v3.5.1/etcd-v3.5.1-linux-amd64.tar.gz
    tar xf etcd-v3.5.1-linux-amd64.tar.gz

3、移动二进制文件全局生效
    mv etcd-v3.5.1-linux-amd64/etcdctl /usr/local/bin/
    etcdctl version

二、设置ETCDCTL_API环境变量

ETCDCTL_API环境变量用于指定etcdctl与etcd集群交互时使用的API版本。从etcd v3开始,etcdctl默认使用v3 API。但如果你需要与旧版本的etcd集群交互,可能需要设置此环境变量

echo "ETCDCTL_API=3" >> ~/.bashrc 
bash
echo "$ETCDCTL_API"

三、执行备份

1、创建一个用于存放备份文件的目录
   mkdir /opt/etcd-backup -p        
    
2、执行备份命令
   下面命令中,--endpoints指定etcd的访问地址,--cacert、--cert、--key分别指定etcd的CA证书、客户端证书和私钥
   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 /opt/etcd-backup/etcdbackup.db

3、查看备份文件
   ll -h /opt/etcd-backup/etcdbackup.db

4、验证快照
   ETCDCTL_API=3 etcdctl --write-out=table snapshot status /opt/etcd-backup/etcdbackup.db

 

 

【Etcd恢复】

一、停止etcd服务和K8s集群的相关组件

 mkdir /opt/k8s-backup/ -p
 ls /opt/k8s-backup/
 mv /etc/kubernetes/manifests/*  /opt/k8s-backup/
 kubectl get pod -n kube-system    

二、备份当前etcd数据

mv /var/lib/etcd /var/lib/etcd.bck

三、恢复数据

ETCDCTL_API=3 etcdctl snapshot restore /opt/etcd-backup/etcdbackup.db --name etcd-k8s-master01 --data-dir /var/lib/etcd --initial-cluster etcd-k8s-master01=https://192.168.90.90:2380 --initial-cluster-token etcd-cluster-token --initial-advertise-peer-urls https://192.168.90.90:2380
以下是每个参数的解释详解:

#命令用于从 etcd 的快照文件中恢复数据
etcdctl snapshot restore         

#这个环境变量告诉 etcdctl 使用 etcd API 的第 3 版本。通常,你可以直接在命令行前设置这个环境变量,或者在你的 shell 配置文件中设置它。
ETCDCTL_API=3

#/opt/etcd-backup/etcdbackup.db 是你要从中恢复数据的 etcd 快照文件的路径。确保这个路径是正确的,并且文件是可读的。
etcdctl snapshot restore /opt/etcd-backup/etcdbackup.db

#--name 参数定义了 etcd 实例的名称。在你的例子中,它被设置为 etcd-k8s-master01。这通常与集群中的特定节点相关联。
--name etcd-k8s-master01

#--data-dir 参数指定了 etcd 存储其数据的目录。在恢复过程中,这个目录将被用于存储恢复的数据。确保这个目录是可写的,并且没有重要的数据,因为恢复过程可能会覆盖它。 
--data-dir /var/lib/etcd

#--initial-cluster 参数定义了 etcd 集群的初始成员列表。在恢复过程中,你需要指定集群中所有节点的名称和它们的客户端 URL。 
--initial-cluster etcd-k8s-master01=https://192.168.90.90:2380

#--initial-cluster-token 参数用于 etcd 集群中的节点在初次启动时相互发现。它应该是一个唯一的字符串,用于你的 etcd 集群。确保所有节点在启动时都使用相同的集群令牌。 
--initial-cluster-token etcd-cluster-token

#--initial-advertise-peer-urls 参数指定了 etcd 节点在集群中用于通信的 URL。这通常是节点的对等体(peer)URL。 
--initial-advertise-peer-urls https://192.168.90.90:2380

注意:
如果你有多个 etcd 节点,你需要确保 --initial-cluster 参数包含所有节点的信息,并且每个节点的 --name、--initial-advertise-peer-urls 和其他相关参数都是正确配置的。
在恢复数据之前,最好先备份现有的 etcd 数据目录(如果有的话),以防万一恢复过程出现问题。
确保 etcd 集群中的所有节点都已正确配置,并且网络是通畅的,以便节点之间可以相互通信。

四、重启服务

将集群备份的必要文件移动到/etc/kubernetes/manifests/

mv /opt/k8s-backup/*  /etc/kubernetes/manifests/

五、验证、清理残留文件夹

kubectl get pod -n kube-system
rm -rf /opt/k8s-backup

 

posted @ 2024-07-23 02:55  吕钦扬  阅读(17)  评论(0)    收藏  举报