k8s集群數據的備份和恢復


以阿里雲ACK集群為例進行說明:

備份

通過ack-etcd-backup-operator進行備份,這里對備份不做過多說明。

模擬故障

1停止ETCD服務

在3台master幾點即etcd服務所在節點,將etcd服務關停

~]$	systemctl stop etcd
~]$ systemctl status etcd

2 破壞數據

因為是模擬故障,所以先備份,然后在銷毀數據

~]$ cp -rf /var/lib/etcd{,.bak}
~]$ rm -rf /var/lib/etcd/data.etcd

數據恢復

1 從oss上獲取備份數據

~]$ wget ${oss_data_url}

2 執行恢復操作

分別在3台主機上執行數據恢復,這里需要替換--name,--initial-cluster-token,--initial-advertise-peer-urls,--initial-cluster 的值,這些值可以通過cat /usr/lib/systemd/system/etcd.service查看到。同時替換最后面的數據文件為oss下載的得到的文件。

### 舉例說明

# 主機 172.16.1.59:
ETCDCTL_API=3 etcdctl \
--name=172.16.1.59-name-1 \
--endpoints="https://172.16.1.59:2379" \
--cacert=/var/lib/etcd/cert/ca.pem \
--cert=/var/lib/etcd/cert/etcd-server.pem \
--key=/var/lib/etcd/cert/etcd-server-key.pem \
--initial-cluster-token 6f2b2a6c-8470-423d-81f9-ed4698da8de6 \
--initial-advertise-peer-urls https://172.16.1.59:2380 \
--initial-cluster 172.16.1.59-name-1=https://172.16.1.59:2380,172.16.1.60-name-2=https://172.16.1.60:2380,172.16.1.61-name-3=https://172.16.1.61:2380 \
--data-dir=/var/lib/etcd/data.etcd snapshot restore etcd_snapshot.db_v1201729_2020-05-12-11:10:54

# 主機 172.16.1.60:
ETCDCTL_API=3 etcdctl \
--name=172.16.1.60-name-2 \
--endpoints="https://172.16.1.60:2379" \
--cacert=/var/lib/etcd/cert/ca.pem \
--cert=/var/lib/etcd/cert/etcd-server.pem \
--key=/var/lib/etcd/cert/etcd-server-key.pem \
--initial-cluster-token 6f2b2a6c-8470-423d-81f9-ed4698da8de6 \
--initial-advertise-peer-urls https://172.16.1.60:2380 \
--initial-cluster 172.16.1.59-name-1=https://172.16.1.59:2380,172.16.1.60-name-2=https://172.16.1.60:2380,172.16.1.61-name-3=https://172.16.1.61:2380 \
--data-dir=/var/lib/etcd/data.etcd snapshot restore etcd_snapshot.db_v1201729_2020-05-12-11:10:54

# 主機 172.16.1.61:
ETCDCTL_API=3 etcdctl \
--name=172.16.1.61-name-3 \
--endpoints="https://172.16.1.61:2379" \
--cacert=/var/lib/etcd/cert/ca.pem \
--cert=/var/lib/etcd/cert/etcd-server.pem \
--key=/var/lib/etcd/cert/etcd-server-key.pem \
--initial-cluster-token 6f2b2a6c-8470-423d-81f9-ed4698da8de6 \
--initial-advertise-peer-urls https://172.16.1.61:2380 \
--initial-cluster 172.16.1.59-name-1=https://172.16.1.59:2380,172.16.1.60-name-2=https://172.16.1.60:2380,172.16.1.61-name-3=https://172.16.1.61:2380 \
--data-dir=/var/lib/etcd/data.etcd snapshot restore etcd_snapshot.db_v1201729_2020-05-12-11:10:54

3 數據目錄權限更改

etcd服務是通過etcd用戶來啟動的,我們在恢復數據時用的是root用戶,所以需要修改一下數據目錄的權限。

~]$ chown -R etcd:etcd /var/lib/etcd/

4 啟動etcd服務

~]$ systemctl start etcd
~]$ systemctl status etcd

恢復驗證

1 手動驗證服務是否恢復

使用kubelet命令獲取集群信息,看看是否恢復。

~]$ kubectl get node  # 查看各個節點狀態是否都是Ready
~]$ kubectl get po --all-namespaces

2 手動觸發kubelet重啟

如果步驟1遇到問題。需要我們手動重啟kubelet。分別在3台主機上執行,執行完需要等待一會兒。

```shell

~]$ systemctl restart kubelet
```

3 控制台驗證

通過控制台,查看各個功能是否恢復正常,之前創建的服務狀態是否正常。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM