Kubernetes 使用 Etcd 数据库实时存储集群中的数据,如何备份与恢复 Etcd 数据
备份 Etcd 数据
查询 ETCD 镜像
1 | $ docker images | grep etcd |
备份 Etcd 数据
运行 Etcd 镜像,并且使用镜像内部的 etcdctl 工具连接 etcd 集群,执行数据快照备份:
- /bin/sh -c:执行 shell 命令
- –env:设置环境变量,指定 etcdctl 工具使用的 API 版本
- -v:docker 挂载选项,用于挂载 Etcd 证书相关目录以及备份数据存放的目录
- –cacert:etcd CA 证书
- –key:etcd 客户端证书 key
- –cert:etcd 客户端证书 crt
- –endpoints:指定 ETCD 连接地址
- etcdctl snapshot save:etcd 数据备份
1 | $ docker run --rm \ |
恢复 ETCD 数据
在 Etcd 数据损坏时,可以通过 Etcd 备份数据进行数据恢复,先暂停 Kubernetes 相关组件,然后进入 Etcd 镜像使用 etcdctl 工具执行恢复操作。
暂停 Kube-Apiserver 与 Etcd 镜像
在恢复 Etcd 数据前,需要停止 kube-apiserver 与 etcd 镜像,因为当这俩镜像停止后 Kubernetes 会自动重启这俩镜像,所以我们可以先暂时移除 /etc/kubernetes/manifests 目录,Kubernetes 检测这个目录文件不存在时会停止 Kubernetes 系统相关镜像,使其不能重启,方便我们进行后续的操作。
1 | ## 移除且备份 /etc/kubernetes/manifests 目录 |
恢复 Etcd 数据
运行 Etcd 镜像,然后执行数据恢复,默认会恢复到 /default.etcd/member/ 目录下,这里使用 mv 命令在移动到挂载目录 /var/lib/etcd/ 下。
- /bin/sh -c:执行 shell 命令
- –env:设置环境变量,指定 etcdctl 工具使用的 API 版本
- -v:docker 挂载选项,用于挂载 Etcd 证书相关目录以及备份数据存放的目录
- etcdctl snapshot restore:etcd 数据恢复。
1 | docker run --rm \ |
恢复 Kube-Apiserver 与 Etcd 镜像
将 /etc/kubernetes/manifests 目录恢复,使 Kubernetes 重启 Kube-Apiserver 与 Etcd 镜像:
1 | $ mv /etc/kubernetes/manifests.bak /etc/kubernetes/manifests |
执行 Kubectl 命令进行检测
1 | $ kubectl get node |