备份和恢复 Kubernetes 上的 etcd 集群

在类Unix操作系统中,ETC文件夹用于保存配置数据。同样,Kubernetes 使用 ETCD 来保存配置数据和集群信息。 ETCD 这个名称来自 ETC 文件夹,加上字母 D,代表分布式系统。

ETCD 是 Kubernetes 集群的键值数据存储。存储数据用于服务发现和集群管理。备份 ETCD 作为预防故障的措施非常重要。

为了与 etcd 交互,出于备份和恢复的目的,我们将使用命令行工具: etcdctl

etcdctl 有一个快照选项,可以相对轻松地备份集群。在下一节中,我将向您展示如何使用 etcdctl 快照选项备份 etcd 集群。

那么,让我们开始吧。

备份etcd集群

1.首先,我们需要确保安装了etcdctl。

etcdctl version
image.png

如果安装了 etcdctl,您将看到类似上面的输出,如果没有安装,它将给出“命令未找到”错误。

  1. 如果您有可用的 etcdctl,则可以跳过此步骤。如果没有,您可以按照此url中提供的步骤安装 etcdctl。您可以找到 Linux、MacOS 和 Docker 的安装指南

  2. 现在我们有了 etcdctl 命令行工具,我们可以开始拍摄集群当前状态的快照。然而,为了做到这一点,我们需要从 etcd 获取一些信息。

首先,我们需要有关端点的信息。如果我们在同一台服务器上运行 etcd,那么我们可以简单地添加

--endpoints=https://127.0.0.1:2379

127.0.0.1 是本地主机 IP,2379 是 etcd 的官方端口号。如果 etcd 在另一台服务器上运行,那么我们需要将 localhost ip 更改为该服务器的 ip。

其次,我们需要证书来向 ETCD 服务器进行身份验证以进行备份。所需的证书是

--cert,--cacert,--key

  1. 如何获取端点和证书信息?

好吧,我们可以从 etcd pod 中检索它们,etcd pod 的清单文件位于 /etc/kubernetes/manifests 文件夹下

image.png

我们可以使用以下命令检索有关端点的信息:

cat /etc/kubernetes/manifests/etcd.yaml | grep listen
image.png

只需检查 —listen-client-urls。

另一方面,我们可以通过以下命令获取证书信息。

cat /etc/kubernetes/manifests/etcd.yaml | grep file

image.png
  1. 获得必要的信息后,我们可以使用 etcdctl 运行快照保存命令。

ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key \
snapshot save <backup-file-location>



  1. 这里需要注意的一件事是我们需要将 ETCDCTL_API=3 放在命令的开头。 etcdctl 用于与 etcd 通信的 API 版本可以通过 ETCDCTL_API 环境变量设置为版本 2 或 3。但是,我们需要确保它默认为 v3 API 才能拍摄快照。

如果您不想每次输入命令时都输入该信息,可以使用以下命令设置环境变量 ETCDCTL_API=3。

export ETCDCTL_API=3

  1. 让我们运行快照保存命令并将快照保存为“etcd-backup.db”
image.png

干得好!我们现在有了 etcd 的备份!
(请注意输出的最后一行“snapshot saving at etcd-backup.db”,这表明快照保存过程成功)

从快照恢复etcd

前两个步骤不是恢复过程的一部分。不过,我展示它们是为了让您更容易理解当前 etcd 和恢复后的 etcd 之间的过渡。

  1. 我们看一下default命名空间下的Pod。正如您在整个备份过程中所看到的,我没有创建任何 Pod。当我运行 get pods 命令时,我将没有资源
image.png
  1. 我们拍摄的快照包含集群中的所有当前数据。现在我们将创建一个新的 pod,只是为了确保一旦我们从快照恢复 etcd 后它就不再存在,因为我们拍摄的快照在默认命名空间中没有这个特定的 pod 或任何其他 pod。

kubectl run newpod --image=nginx

image.png
  1. 现在,我们可以继续实际恢复 etcd。想象一下 etcd 因某种原因失败了,我们需要将其恢复到上次保存的状态。我们知道我们有一个之前保存的 etcd-backup.db。
ETCDCTL_API=3 etcdctl --data-dir="/var/lib/etcd-backup" \
--endpoints=https://127.0.0.1:2379 \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key \
snapshot restore etcd-backup.db

image.png
  1. 我们创建一个新目录并将备份数据移至该目录中。但是,我们还没有更改 etcd 集群。如果您检查 pod,您会发现我们仍然有“newpod”,这不是备份过程的一部分。
image.png
  1. 如您所知,kubernetes 将静态 pod 的清单保存在 /etc/kubernetes/manifests 文件夹中。 etcd.yaml(etcd pod 的清单文件)也在那里。我们需要编辑该文件并确保它使用新恢复的数据目录作为卷而不是旧的。

vi /etc/kubernetes/manifests/etcd.yaml

更改etcd.yaml中的以下部分

image.png
image.png
image.png

这是更改后 etcd.yaml 的样子


image.png
image.png
image.png
  1. 此时,您需要等待几分钟,让 etcd pod 以新状态启动。同时你将无法从 apiserver 获得响应。
image.png
  1. 让我们通过检查默认命名空间中的 Pod 来验证我们是否已成功恢复快照。您还记得,我们拍摄了没有 pod 的快照,但随后我们创建了一个名为 newpod 的 pod。如果 newpod 仍然在这里,那么我们无法从备份中恢复。如果default命名空间中没有pod,那么我们就成功从备份中恢复了。

kubectl get pods

image.png

欢呼!我们成功了!

9.彩蛋

为啥修改了yaml文件,etcd就会重启启动了呢?

etcd的数据文件是在/var/lib/etcd这里存放,上面的解决方案是把文件还原到了/etc/lib/etcd-bakup,那么能不能还原到原来的位置呢?
当然可以,可是就会稍微复杂一些,如果etcd还在正常使用数据文件,还原是无法覆盖原来的文件,kubernetes是如何停止etcd和apiserver呢,就是把/etc/kubernetes/manifests/路径下的yaml文件移走,等还原之后,再把yaml文件复制回来,etcd和apiserver就会根据yaml文件重新启动

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,029评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,395评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,570评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,535评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,650评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,850评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,006评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,747评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,207评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,536评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,683评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,342评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,964评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,772评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,004评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,401评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,566评论 2 349

推荐阅读更多精彩内容