etcd备份


因为我的k8s集群是用kubeadm装的单master集群,所以etcd只存在master节点,

备份之前需要先下载etcdctl工具

https://github.com/etcd-io/etcd/releases

[root@master ~]# wget https://github.com/etcd-io/etcd/releases/download/v3.5.1/etcd-v3.5.1-linux-amd64.tar.gz

[root@master ~]# tar -xzvf etcd-v3.5.1-linux-amd64.tar.gz

[root@master ~]# cd etcd-v3.5.1-linux-amd64/

[root@master ~/etcd-v3.5.1-linux-amd64]# cp etcdctl /usr/local/bin/


使用etcdctlv3的版本时,需设置环境变量ETCDCTL_API=3

export ETCDCTL_API=3

# 或者在`/etc/profile`文件中添加环境变量
vi /etc/profile
...
export ETCDCTL_API=3
...
source /etc/profile

# 或者在命令执行前加 ETCDCTL_API=3
ETCDCTL_API=3 etcdctl --endpoints=$ENDPOINTS member list

 

查看当前etcdctl的版本信息etcdctl version

[root@master ~/etcd-v3.5.1-linux-amd64]# etcdctl version
etcdctl version: 3.5.1
API version: 3.5

 

好啦,工具下载完了,开始备份吧!!!

说明:执行etcd备份数据的恢复的机器必须和原先etcd所在机器一致

 

1、etcd备份(备份文件到/data 目录)

[root@master ]# ETCDCTL_API=3 etcdctl --cacert=/etc/kubernetes/pki/etcd/ca.crt  --cert=/etc/kubernetes/pki/etcd/peer.crt  --key=/etc/kubernetes/pki/etcd/peer.key snapshot save /data/20211203.db

 

 

 

 

2、etcd恢复

注意
数据恢复操作,会停止全部应用状态和访问!!!

首先需要分别停掉三台Master机器的kube-apiserver,确保kube-apiserver已经停止了。

[root@master ~]# mv /etc/kubernetes/manifests   /etc/kubernetes/manifests.bak

[root@master ~]# docker ps |grep k8s_ #查看etcd,api是否up,等待全部停止

[root@master ~]# mv /var/lib/etcd  /var/lib/etcd.bak

etcd恢复用之前备份好的snapshot文件 (这里一定要指定data-dir,不然恢复不了

[root@master ~]# ETCDCTL_API=3 etcdctl --cacert=/etc/kubernetes/pki/etcd/ca.crt  --cert=/etc/kubernetes/pki/etcd/peer.crt  --key=/etc/kubernetes/pki/etcd/peer.key --data-dir=/var/lib/etcd snapshot restore /data/20211203.db

 数据恢复之后,需要启动apiserver跟etcd

[root@master ~]# mv /etc/kubernetes/manifests.bak   /etc/kubernetes/manifests

[root@master ~]# kubectl get pod -A

然后发现服务正常运行

 

不管是二进制还是kubeadm安装的Kubernetes,其备份主要是通过etcd的备份完成的。而恢复时,主要考虑的是整个顺序:停止kube-apiserver,停止etcd,恢复数据,启动etcd,启动kube-apiserver。

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM