以阿里雲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 控制台驗證
通過控制台,查看各個功能是否恢復正常,之前創建的服務狀態是否正常。