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 控制台验证

通过控制台,查看各个功能是否恢复正常,之前创建的服务状态是否正常。

posted @ 2020-09-04 14:22  梧桐花落  阅读(1629)  评论(0编辑  收藏  举报