Kubernetes Etcd 数据备份与恢复

本文详细介绍了在Kubernetes环境下,如何备份和恢复Etcd数据。通过Kubeadm安装的Kubernetes集群,利用Etcd镜像内的etcdctl工具进行数据快照,以及在数据损坏时的恢复步骤,包括暂停Kube-Apiserver,恢复数据,以及重新启动相关组件的完整流程。
摘要由CSDN通过智能技术生成

文章目录

  !版权声明:本博客内容均为原创,每篇博文作为知识积累,写博不易,转载请注明出处。


系统环境:

  • 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

BASH

由于 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 数据备份
$ 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.2.11: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"

BASH

三、恢复 ETCD 数据

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

1、暂停 Kube-Apiserver 与 Etcd 镜像

在恢复 Etcd 数据前,需要停止 kube-apiserveretcd 镜像,因为当这俩镜像停止后 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

BASH

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/"

BASH

3、恢复 Kube-Apiserver 与 Etcd 镜像

/etc/kubernetes/manifests 目录恢复,使 Kubernetes 重启 Kube-ApiserverEtcd 镜像:

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

BASH

4、执行 Kubectl 命令进行检测

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

$ kubectl get node

BASH

---END---

方法3

etcd那题恢复快照,我看到有其他答案
1.systemctl stop etcd 
2.ps -ef |grep etcd # 确认下数据目录(--data-dir 值)
3.mv /var/lib/etcd /var/lib/etcd.bak #先移动备份
4.ETCDCTL_API=3 etcdctl --data-dir=/var/lib/etcd \
          snapshot restore /data/backup/etcd-snapshot-previous.db
5.chown -R etcd:etcd /var/lib/etcd 
6.systemctl start etcd 

转载至http://www.mydlq.club/article/74/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值