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

浙公网安备 33010602011771号