備份和恢復Kubernetes集群中的Etcd數據
Kubernetes作為目前最炙手可熱的容器編排軟件,受到越來越多互聯網公司的喜愛,之所以會出現這樣的現象,主要還是因為這套編排軟件不僅功能強大,還非常方便進行二次開發,整個Kubernetes的生態圈非常活躍。有了Kubernetes這套“骨架”,可以在上面運行非常多的中間件和應用程序。Apiserver,Controller Manager,Scheduler,Proxy可以認為是這套“骨架”的組成部分,而Etcd便是這套系統的底座,整個系統的數據都存儲在它當中,保證了Etcd的穩定性整個容器編排系統的穩定性就有了保證。
在正式開始之前,說明下實驗環境,五臺主機組成Kubernetes集群。
- 控制平面主機:p1.xufu.xyz、p2.xufu.xyz、p3.xufu.xyz
- 工作主機:p4.xufu.xyz、p5.xufu.xyz
- 主機系統:CentOS Linux release 7.9.2009 (Core)
- Etcd版本:3.5.1
Etcd
- 簡介
它是一種鍵值數據庫,Kubernetes將自身的狀態數據都存儲在Etcd中,這些數據包含deployment,pod,daemonset等各種對象。整個集群組件中只有Apiserver會直接和Etcd通信,其他組件都是直接和Apiserver通信。在生產環境中,最好以集群的方式運行Etcd,官方建議運行五個節點組成集群,這樣可以在丟失兩個節點的情況下, 保證數據的可用性。
- 訪問
Etcd中存放有不少敏感數據,所以對它的訪問需要使用公鑰和私鑰。為了方便訪問,在家目錄文件“.bashrc”配置如下命令別名。
alias ectl='etcdctl --endpoints p1.xufu.xyz:2379 \ --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key \ --cacert=/etc/kubernetes/pki/etcd/ca.crt'
顯示當前Etcd存儲的所有Key。
ectl get / --prefix --keys-only
- 備份
使用kubeadm部署的集群,Etcd默認將數據存放在宿主機的目錄/var/lib/etcd下。
Etcd數據目錄
Etcd的版本2和3差別很大,因筆者使用的是3版本,備份命令是這樣(在任一控制平面主機操作均可),命令執行不用對Etcd做關閉操作。
ectl snapshot save snapshot-$(date +%F)
查看備份的快照。
快照信息
- 恢復
恢復操作相比較備份操作有稍許麻煩。下面步驟需要在三臺控制平面主機上都操作。
1,關閉kubelet,否則它會自動重啟apiserver。
systemctl stop kubelet.service
2,關閉apiserver容器,使用docker命令找到容器,直接stop。
docker stop apiservername
3,重命名目錄/var/lib/etcd,創建新的,并修改目錄權限。
mv /var/lib/etcd /var/lib/etcd_oldmkdir /var/lib/etcdchmod 700 /var/lib/etcd
4,使用備份的快照,恢復數據。
ectl snapshot restore /data/etcd_backup/etcd-snapshot-2022-08-03.db \ --name p1.xufu.xyz \ --initial-cluster "etcd-0=https://p1.xufu.xyz:2380,etcd-1=https://p2.xufu.xyz:2380,etcd-2=https://p3.xufu.xyz:2380" \ --initial-advertise-peer-urls https://p1.xufu.xyz:2380 \ --data-dir=/var/lib/etcd
p2和p3節點類似。
5,啟動三臺etcd,確認下集群是否健康。
[root etcd]# ectl --endpoints=https://p1.xufu.xyz:2379,https://p2.xufu.xyz:2379,https://p3.xufu.xyz:2379 endpoint healthhttps://p2.xufu.xyz:2379 is healthy: successfully committed proposal: took = 100.193247msp1.xufu.xyz:2379 is healthy: successfully committed proposal: took = 111.234607mshttps://p1.xufu.xyz:2379 is healthy: successfully committed proposal: took = 113.788721mshttps://p3.xufu.xyz:2379 is healthy: successfully committed proposal: took = 118.403445ms
確認沒問題后,啟動apiserver容器。
至此,整個恢復備份過程操作完畢。