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