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 控制台验证
通过控制台,查看各个功能是否恢复正常,之前创建的服务状态是否正常。