A哥

Kubernetes Etcd 数据备份与恢复

作者:A哥 发布时间: 2020-08-27      255 人阅读    本文共计2321个字,预计阅读时长8分钟。

系统环境:

Etcd 版本:3.4.3
Kubernetes 版本:1.17.4
Kubernetes 安装方式:Kubeadm
一、简介Kubernetes 使用 Etcd 数据库实时存储集群中的数据,可以说 Etcd 是 Kubernetes 的核心组件,犹如人类的大脑。如果 Etcd 数据损坏将导致 Kubernetes 不可用,在生产环境中 Etcd 数据是一定要做好高可用与数据备份,这里介绍下如何备份与恢复 Etcd 数据。

二、备份 Etcd 数据

1、查询 ETCD 镜像

查询当前 Kubernetes 使用的 Etcd 使用的镜像,记住镜像名称与版本:

$ docker images | grep etcd

k8s.gcr.io/etcd 3.4.3-0 303ce5db0e90 5 months ago 288MB registry.aliyuncs.com/google_containers/etcd 3.4.3-0 303ce5db0e90 5 months ago 288MB

由于 k8s.gcr.io 镜像仓库国内被墙,所以使用的是阿里云的 etcd 镜像

2、备份 Etcd 数据

本人采用的是 Kubeadm 安装的 Kubernetes 集群,采用镜像方式部署的 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 数据备份
<code>$ docker run --rm                                    \
-v /data/backup:/backup \
-v /etc/kubernetes/pki/etcd:/etc/kubernetes/pki/etcd \
--env ETCDCTL_API=3 \
k8s.gcr.io/etcd:3.4.3-0 \
/bin/sh -c "etcdctl --endpoints=https://192.168.11.105:2379 \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--key=/etc/kubernetes/pki/etcd/healthcheck-client.key \
--cert=/etc/kubernetes/pki/etcd/healthcheck-client.crt \
snapshot save /backup/etcd-snapshot.db"</code>

三、恢复 ETCD 数据

在 Etcd 数据损坏时,可以通过 Etcd 备份数据进行数据恢复,先暂停 Kubernetes 相关组件,然后进入 Etcd 镜像使用 etcdctl 工具执行恢复操作。

1、暂停 Kube-Apiserver 与 Etcd 镜像

在恢复 Etcd 数据前,需要停止 kube-apiserver 与 etcd 镜像,因为当这俩镜像停止后 Kubernetes 会自动重启这俩镜像,所以我们可以先暂时移除 /etc/kubernetes/manifests 目录,Kubernetes 检测这个目录文件不存在时会停止 Kubernetes 系统相关镜像,使其不能重启,方便我们进行后续的操作。

## 移除且备份 /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

2、恢复 Etcd 数据

运行 Etcd 镜像,然后执行数据恢复,默认会恢复到 /default.etcd/member/ 目录下,这里使用 mv 命令在移动到挂载目录 /var/lib/etcd/ 下。

  • /bin/sh -c:执行 shell 命令
  • --env:设置环境变量,指定 etcdctl 工具使用的 API 版本
  • -v:docker 挂载选项,用于挂载 Etcd 证书相关目录以及备份数据存放的目录
  • etcdctl snapshot restore:etcd 数据恢复。
$ docker run --rm              \
-v /data/backup:/backup        \
-v /var/lib/etcd:/var/lib/etcd \
--env ETCDCTL_API=3            \
k8s.gcr.io/etcd:3.4.3-0        \
/bin/sh -c "etcdctl snapshot restore /backup/etcd-snapshot.db; mv /default.etcd/member/ /var/lib/etcd/"

3、恢复 Kube-Apiserver 与 Etcd 镜像

将 /etc/kubernetes/manifests 目录恢复,使 Kubernetes 重启 Kube-Apiserver 与 Etcd 镜像:

$ mv /etc/kubernetes/manifests.bak /etc/kubernetes/manifests

4、执行 Kubectl 命令进行检测

执行 Kubectl 命令进行检测,查看命令是否能够正常执行:

$ kubectl get node
本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!一切解释权归本站资源所有!转载请注明出处!如有链接无法下载、失效或广告,请联系管理员处理!本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!如用于商业或者非法用途,与本站无关,一切后果请用户自负!如遇到加密压缩包,默认解压密码为"www.pythondesign.cn",如遇到无法解压的请联系管理员!
Linux技术高效运维 » Kubernetes Etcd 数据备份与恢复

常见问题FAQ

资源有效期多久?
凡是在本站购买下载的资源均可永久使用,无需再次购买,请用户放心下载使用。
没有下载到资源?
若成功购买未能下载获取资源,请右边点击客服联系在线客服处理!也可添加站长微信免费获取资源:pythondesign_cn
在哪里能够获得该资源?
点击本站资源页面,手机端资源页下方有"购买","下载"的字样,PC端右侧栏有"购买","下载"的字样,等点击即可获得!也可以点击QQ咨询,联系站长获取资源!

提供最优质的资源集合!如果说成功归于天赋和才华,倒不如说因为那持之以恒的专注!

立即查看