LabHub
学习 学习路径 课程

CKA — Kubernetes 管理员

备份 etcd 并制定恢复计划

在 LabHub 中继续学习

目标

实际创建并验证 etcd 快照,通过资源对照确认快照所代表时点的含义,并将恢复流程记录成文档。

为什么这很重要

CKA 实操考试几乎每次都会考 etcd 备份,但只背命令并不足够。本实验强调的是:快照记录的是某个时点。快照创建之后才生成的资源不会包含在该文件中,恢复后也会消失。如果没有这种认识,恢复后就会发生“为什么昨天创建的资源不见了”之类的事故。

要求将恢复计划写下来的原因也在于此。恢复不是一条命令,而是一套顺序:停止控制平面、解压到新的 data-dir、匹配成员配置与 peer URL,再重新启动。如果不提前写好顺序,就只能在事故现场临时制定,而那时的判断通常会出错。

本环境中的 etcd 运行在 127.0.0.1:2379。在真正的 kubeadm 集群中,还需要额外添加 --cacert--cert--key 三个选项。

步骤

  1. 创建 /root/cka-etcd/env.sh,导出 ETCDCTL_API=3ETCDCTL_ENDPOINTS=127.0.0.1:2379,使其能够传递给子进程。
  2. 将 etcd endpoint 状态(或健康状态)输出保存到 /root/cka-etcd/status.txt。文件中应显示 endpoint 地址。
  3. 创建 namespace cka-etcd 和 ConfigMap pre-backup,数据为 stage=before。然后将 cka-etcd 中的 ConfigMap 列表保存到 /root/cka-etcd/before.txt
  4. 将 etcd 快照保存到 /root/cka-etcd/snap.db
  5. 将该快照的状态(元数据)输出保存到 /root/cka-etcd/snap-status.txt
  6. 在创建快照之后,创建 ConfigMap post-backup(数据为 stage=after),位置在 cka-etcd 中,并将 ConfigMap 列表保存到 /root/cka-etcd/after.txtbefore.txt 中不应有 post-backup,而 after.txt 中应同时包含二者。
  7. /root/cka-etcd/restore-plan.md 中写下恢复流程,至少五行、200 字节。必须包含 snapshot restore--data-dir--initial-cluster、peer 端口 2380apiserver,还要说明恢复期间需要暂时停止控制平面。

参考

整理 etcdctl 环境变量

创建 /root/cka-etcd/env.sh,导出 ETCDCTL_API=3ETCDCTL_ENDPOINTS=127.0.0.1:2379,使其能够传递给子进程。

etcdctl 的 v2 与 v3 API 不同。环境变量必须能传递给子进程,因此只进行赋值还不够。

检查 endpoint 状态

将 etcd endpoint 状态(或健康状态)输出保存到 /root/cka-etcd/status.txt。文件中应显示 endpoint 地址。

endpoint status 和 endpoint health 都可以使用。有时输出会写入标准错误,请注意重定向。

创建备份基准点

创建 namespace cka-etcd 和 ConfigMap pre-backup,数据为 stage=before。然后将 cka-etcd 中的 ConfigMap 列表保存到 /root/cka-etcd/before.txt

为了稍后对照快照记录的是哪个时点,现在必须将状态保存到文件。这个文件中应缺少后续步骤才会创建的对象,对照才能成立。

保存快照

将 etcd 快照保存到 /root/cka-etcd/snap.db

snapshot save 接收文件路径作为参数。如果目录不存在就会失败,请先创建目录。

检查快照元数据

将该快照的状态(元数据)输出保存到 /root/cka-etcd/snap-status.txt

status 会显示哈希、revision、键数量和大小。新版 etcd 已将此子命令迁移到独立工具,如果找不到,请尝试使用该工具。

与备份之后的资源进行对照

在创建快照之后,创建 ConfigMap post-backup(数据为 stage=after),位置在 cka-etcd 中,并将 ConfigMap 列表保存到 /root/cka-etcd/after.txtbefore.txt 中不应有 post-backup,而 after.txt 中应同时包含二者。

创建快照之后才生成的资源不在该快照中。本步骤通过两个文件的差异证明这一事实。

综合:将恢复流程记录成文档

/root/cka-etcd/restore-plan.md 中写下恢复流程,至少五行、200 字节。必须包含 snapshot restore--data-dir--initial-cluster、peer 端口 2380apiserver,还要说明恢复期间需要暂时停止控制平面。

恢复不是一条命令,而是一套顺序。请写明先停止什么、解压到哪里,以及必须匹配哪些值才能重新启动。