系统环境
Etcd 版本:3.4.3
Kubernetes 版本:1.17.4
Kubernetes 安装方式:Kubeadm
简介
Kubernetes 使用 Etcd 数据库实时存储集群中的数据,可以说 Etcd 是 Kubernetes 的核心组件,犹如人类的大脑。如果 Etcd 数据损坏将导致 Kubernetes 不可用,在生产环境中 Etcd 数据是一定要做好高可用与数据备份,这里介绍下如何备份与恢复 Etcd 数据。
备份 Etcd 数据
采用镜像方式部署的 Etcd,所以操作 Etcd 需要使用 Etcd 镜像提供的 Etcdctl 工具。如果你是非镜像方式部署 Etcd,可以直接使用 Etcdctl 命令备份数据。
运行 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
2
3
4
5
6
7
8# 移除且备份 /etc/kubernetes/manifests 目录
$ mv /etc/kubernetes/manifests /etc/kubernetes/manifests.bak
# 查看 kube-apiserver、etcd 镜像是否停止
$ docker ps|grep etcd && docker ps|grep kube-apiserver
# 备份现有 Etcd 数据
$ mv /var/lib/etcd /var/lib/etcd.bak
恢复 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 命令进行检测
执行 Kubectl 命令进行检测,查看命令是否能够正常执行:1
kubectl get node
参考:mydlq.club