操作手册 · 云原生与容器

待环境验证

etcd 快照与隔离恢复验证手册

以 etcd 3.6 核对快照完整性、新逻辑集群隔离、revision 与 watch 缓存边界,分阶段证明文件、服务和客户端可恢复性。

Kubernetes监控告警高可用
阅读导引 · 理解后再操作

这篇知识解决什么问题

本篇把快照可读、新集群可启动与客户端可重新同步分成三个验证问题,并解释它们为何不能互相替代。先核对快照来源及隔离设计,再审阅已有恢复证据;单成员验证和生产接管具有不同范围,任何未知依赖都不能被绿色备份任务掩盖。

快照身份和恢复身份需要分别证明

快照描述过去某个集群的状态,而恢复后的成员应属于独立的新逻辑集群,二者关联不是沿用生产启动参数。需要同时核对文件来源、时间和新成员目录及地址清单;只有内容可追溯且目标不再共享原有连接路径,恢复结果才具有安全解释前提。

客户端一致性不是服务启动的附属品

etcd 可以启动并不证明依赖 watch 的缓存已经重新列举,也不证明加密对象和外部业务数据处于一致时间点。应将 revision 方案、客户端同步和外部依赖分别列为验证层,保留未执行部分;单成员健康无法被外推为多成员多数或生产控制面已恢复。

进入文章正文
关联架构图解7 个组件 · 点击展开

引用快照副本经 etcdutl 进入隔离新逻辑集群的参考图,观察数据输入、参数审阅和客户端证据三条关系。图不包含生产回接,不展示真实成员故障域和全部外部控制器,也不证明现场备份或隔离已验收。

查看场景架构与实施步骤
参考架构 · 非实时拓扑

etcd 快照到隔离新逻辑集群的恢复架构

受控快照副本先做离线校验,再恢复到独立成员和新目录;新集群只向隔离测试客户端开放,文件完整、服务启动与客户端同步分别验收。

  • 数据 / 请求
  • 控制 / 管理
  • 观测 / 查询

点击组件,在图下方查看职责;连线编号对应流向解读。小屏可横向滚动,或直接展开文字说明。

etcd 快照到隔离新逻辑集群的恢复架构:组件关系图受控快照副本先做离线校验,再恢复到独立成员和新目录;新集群只向隔离测试客户端开放,文件完整、服务启动与客户端同步分别验收。 原 etcd 集群 → 受控快照副本:受控快照取得;受控快照副本 → etcdutl:副本离线输入;恢复参数与依赖 → etcdutl:参数与隔离审阅;etcdutl → 隔离 etcd 新集群:写入全新目录;隔离 etcd 新集群 → 隔离测试客户端:受控验证响应;隔离 etcd 新集群 → 演练证据记录:新成员与健康证据;隔离测试客户端 → 演练证据记录:同步与业务样本。箭头说明见下方流向解读。
基于 etcd 3.6 的隔离恢复逻辑参考图,不包含生产回接或强制重建;所有演练结果仍待目标环境验证。

恢复参数与依赖

控制 / 治理

审阅新成员、TLS、网络和 revision 处理;KMS 与 API Server 加密材料分开保管,不输出秘密。

全部组件职责 7 个组件
恢复参数与依赖
审阅新成员、TLS、网络和 revision 处理;KMS 与 API Server 加密材料分开保管,不输出秘密。
受控快照副本
保留唯一可用备份的原件,登记快照来源、年龄、revision 与传输校验,失败时不跳过校验。
原 etcd 集群
本场景只在批准范围读取状态或取得快照,不停止原成员,不改变原有生产客户端入口。工具介绍 原 etcd 集群
etcdutl
使用匹配工具校验并恢复同一快照副本到各自全新目录,离线恢复不自动启动服务。工具介绍 etcdutl
隔离 etcd 新集群
只连接批准的新成员;独立地址、证书、目录和网络限制阻断原 peer 及生产客户端。工具介绍 隔离 etcd 新集群
演练证据记录
分开记录传输、恢复、启动与客户端验收耗时,保留多成员、外部数据库及持久卷的未覆盖项。
隔离测试客户端
按批准范围验证对象读取、加密依赖及重新同步;测试控制器不能触达真实云 API、Webhook 或业务写接口。工具介绍 隔离测试客户端
流向解读 7 条连接
  1. 1

    原 etcd 集群 受控快照副本

    数据 / 请求 · 受控快照取得

    表示获批备份或既有备份副本的取得,不是生产与演练集群持续复制。

  2. 2

    受控快照副本 etcdutl

    数据 / 请求 · 副本离线输入

    校验通过后才用于恢复,原件保持不变。

  3. 3

    恢复参数与依赖 etcdutl

    控制 / 管理 · 参数与隔离审阅

    根据快照年龄和客户端缓存评估 revision bump/mark-compacted,不机械复用固定增量。

  4. 4

    etcdutl 隔离 etcd 新集群

    数据 / 请求 · 写入全新目录

    恢复生成新逻辑集群数据与成员身份;启动服务另经已批准的演练配置。

  5. 5

    隔离 etcd 新集群 隔离测试客户端

    观测 / 查询 · 受控验证响应

    只返回隔离客户端获准读取和 watch 的结果,不存在图中的生产接管路径。

  6. 6

    隔离 etcd 新集群 演练证据记录

    观测 / 查询 · 新成员与健康证据

    验证实际集群身份、成员及运行状态,单成员启动不代表多成员多数已验证。

  7. 7

    隔离测试客户端 演练证据记录

    观测 / 查询 · 同步与业务样本

    分别记录实际执行、替代证据和未验证项目,不将备份成功写成业务恢复成功。

故障域与操作边界

禁止演练集群与生产互联

新 token 不能代替 TLS 与网络隔离;原成员、生产 API Server 和外部业务不能连接演练端点。

etcd 快照不是全部业务备份

业务数据库、持久卷、密钥与 KMS 等依赖另有恢复责任,不能据此宣称应用已整体恢复。

演练不授权正式接管

本图不执行强制新集群或生产切流,真实多数丢失后的恢复需单独批准和完整依赖评审。

架构依据与版本核对 1 篇官方资料

图解是本站基于官方资料整理的逻辑参考;实施前仍需核对实际部署版本、组件支持范围与变更审批。

适用范围与恢复目标

本文组织 etcd 快照的可恢复性验证,配合 etcd 快照与隔离恢复演练场景 使用,状态为 PENDING(待环境验证)。示例以 etcd 3.6 工具链为基准,不代表已完成部署、生产故障切换或恢复演练。先由平台负责人确认是定期演练、单成员故障还是多数永久丢失;仍可修复的成员问题不应自动升级为整个集群的快照恢复。

明确 RPO 与 RTO 的计时口径、允许恢复的备份时间点、谁批准丢弃快照之后的变更,以及恢复后的业务核对责任。etcd 保存的是控制面或协调数据,不能替代持久卷、业务数据库、对象存储和外部系统的备份。恢复 Kubernetes 对象也不能让业务数据自动回到一致时间点,必须把这些依赖单独列入恢复计划。

盘点版本、成员与恢复依赖

登记服务端、etcdctl、etcdutl、Kubernetes 与发行版版本;工具应按目标发行版支持组合固定,并保留二进制来源及校验记录。etcd 3.6 使用 etcdctl 生成快照、etcdutl 执行离线状态检查与恢复,不沿用旧版 etcdctl snapshot restore。其他版本需重新核对本地帮助和对应版本文档,不能因为主版本都是 3 就假设所有参数通用。etcd 3.6 恢复文档 给出了工具边界。

下列示例仅为手册,未在你的环境执行。原集群查询必须使用已经审核过的 TLS 端点与凭据配置,输出限定为状态,不读取业务键值或打印密钥。成员列表应逐项对照主机、故障域和客户端入口;失去多数时查询可能超时,应记录超时而不是重复施压。

etcdctl version
etcdutl version
etcdctl endpoint status --write-out=table
etcdctl member list --write-out=table
etcdutl snapshot restore --help

还需清点证书、CA、API Server 加密配置及外部 KMS 依赖,并按密级分开保存。恢复出的 Secret 可能仍需原加密材料才能读取;不得为了让演练通过临时关闭加密。托管控制面不一定开放 etcd 访问,应使用云厂商正式备份恢复通道,不能绕过权限尝试直连控制面。

取得可追溯快照并限制暴露

优先使用已验证的备份流水线和单一已确认端点生成快照,记录开始、完成时间和实际 snapshot revision。快照生成会消耗集群读取带宽与存储 I/O,属于受控备份操作,不等同于“完全无影响的只读查看”。执行前检查备份目标空间、访问权限、任务并发和超时,备份文件名应唯一,禁止覆盖唯一可用副本。

# 下行需要备份授权;BACKUP_ENDPOINT 与 NEW_SNAPSHOT_FILE 均须替换。
# TLS 参数来自已审阅的 ETCDCTL 配置,不把凭据写入共享命令行。
etcdctl --endpoints=BACKUP_ENDPOINT snapshot save NEW_SNAPSHOT_FILE
etcdutl snapshot status NEW_SNAPSHOT_FILE --write-out=table

快照可能包含集群全部敏感对象,应加密存放、限制读取、记录取用与按保留策略轮换。传入隔离环境使用受控副本,保留原始文件及独立传输校验记录。不要通过直接复制正在运行的数据目录冒充一致性快照;如唯一材料是数据目录文件,交给专项恢复流程评估缺失 WAL 与完整性风险。etcd 维护说明 是快照命令的核对来源。

区分文件完整性与业务可恢复性

检查备份任务结果、离线 snapshot status 的 revision、键数量、体积及校验记录是否合理,再与近期备份趋势对照。体积变化可能来自正常清理,也可能暴露备份对象错误,不能仅以文件非零或命令退出码为通过。校验不匹配时先保留两个文件和传输记录,暂停启动恢复集群;不要用跳过校验参数掩盖原因。

将证据分为三层:文件可读、etcd 能从副本启动、依赖客户端与业务能按恢复时间点一致工作。三者分别签收,后两层未测试时不得填写“恢复验证通过”。备份成功率、最近可用备份年龄、最近一次隔离恢复日期应分别展示,避免绿色备份告警造成虚假的容灾信心。

建立不会连接原集群的隔离环境

恢复前先验收隔离,而不是先启动再补防火墙。演练主机使用独立网络、独立 DNS 名称、专用证书及新数据目录;明确拒绝访问原 etcd 客户端与 peer 端点,也不允许原 API Server、控制器或真实业务自动接入演练端点。新成员清单和新集群 token 用于区分逻辑集群,但 token 不是认证秘密,也不能替代网络隔离及 TLS 身份校验。

核对宿主机路由、服务管理器、自动发现、监控自动注册和灾备 DNS,确认没有残留生产启动参数。对可能触达外部系统的 Kubernetes controller、Operator、Webhook 或备份恢复任务先禁用连接能力并使用测试替身;只隔离 etcd 的 peer 端口不足以防止这些客户端产生外部副作用。所有隔离验证均需要明确测试目标与权限,禁止以全网扫描取代配置审阅。

离线恢复到新的逻辑集群

在已获准的隔离主机上,使用受控快照副本和全新、不存在的恢复目录。下例是单成员隔离验证的参数模板,不是生产重建脚本;大写项必须经过复核后替换,example.invalid 不是可用端点。它只展示离线恢复,不启动服务,也没有修改原数据目录。真正的多成员恢复应让所有新成员使用同一快照,并逐项审阅新成员名称、地址与独立目录。

# 只在已验收隔离的演练主机执行;没有授权则在此停止。
etcdutl snapshot restore SNAPSHOT_COPY \
  --name=drill-a \
  --data-dir=NEW_DRILL_DATA_DIR \
  --initial-cluster=drill-a=https://drill-a.example.invalid:2380 \
  --initial-advertise-peer-urls=https://drill-a.example.invalid:2380 \
  --initial-cluster-token=UNIQUE_DRILL_TOKEN

任何路径指向现有生产数据、原成员仍可能互联、快照来源不明或恢复工具兼容性未确认,都必须停止。不得添加 force-new-cluster 作为快捷方式,也不提供删除原目录后覆盖恢复的一键指令。恢复失败时保留失败目录和日志供分析,重新演练采用另一个新目录;是否清理由保留策略决定,不自动删除证据。

Kubernetes revision 与缓存恢复边界

较旧快照会使逻辑 revision 回到过去,依赖 watch 的客户端缓存可能无法按预期刷新。etcd 3.6 文档提供 --bump-revision 与 --mark-compacted 配合处理这一情况:需要根据快照年龄、观察到的最高 revision、写入上界及安全余量计算增量,而不是机械复制固定数值。参数是否可用须通过实际 etcdutl snapshot restore --help 核验;3.5 或更旧发行版必须逐版本审查,本文不承诺任意版本支持。

对于需要模拟 Kubernetes 或缓存客户端接管的恢复演练,应先审批 revision 方案,再把两个参数加入受审阅的离线恢复命令。无法证明新 revision 超过客户端可能记住的范围时停在方案审查阶段,不把去掉参数视为无害替代。mark-compacted 会使旧 watch 失效,客户端须能重新列举和建立 watch;这种行为要在隔离客户端上验证。

离线还原成功不等于已经证明所有自定义 Operator、缓存层和外部协调者兼容。客户端恢复顺序和业务数据对账应使用专门检查项,列明哪些只做了配置审阅、哪些实际执行,避免将模拟信号和真实接管混为一谈。

启动与验收必须留在隔离范围

使用已审核的演练服务配置启动新成员,监听和通告地址仅指向隔离网络,TLS 证书与新成员名称一致,未验证前不接入任何原集群客户端。只连接明确列出的演练端点检查状态、成员清单和告警,不沿用包含生产端点的环境变量,也不自动通过 --cluster 扩展到未审核地址。此阶段的健康探测和客户端功能测试均属于获准演练操作,需要登记实际调用及负载。

核对新逻辑集群身份、期望成员数、快照对应对象的抽样结果及耗时;数据抽样只选事先批准且可脱敏的对象,不遍历导出全部键。Kubernetes 级验收还需证明 API 能读取恢复对象、watch 客户端能重新同步、加密对象可合法解密及外部副作用被阻断。若仅验证单成员启动,就明确标注尚未验证多成员多数、生产拓扑与业务接管。

停止、回退与交接证据

出现隔离失效、错误凭据加载、恢复端点被生产发现、数据与快照时间点不符或超出资源预算时,立即停止本次演练服务的对外访问并通知负责人,保留审计证据。这里的回退是停止隔离试验并保持原集群不变;生产灾难恢复一旦恢复写入,不能通过切回更旧快照“撤销”新写入,必须重新评估数据损失与业务一致性。

记录备份生成耗时、文件传输、离线恢复、成员启动、客户端验证和人工等待时间,分别报告技术恢复耗时与完整业务 RTO。将未覆盖的多成员故障、KMS、持久卷或第三方依赖列为待办。交接时提供版本清单、审批单、脱敏证据、隔离验收结果、恢复失败处理人及下次演练日期,只有完成相应检查后才能更新验证状态。

参考资料

从现象到判断

先收集证据,再缩小范围。以下是判读路径,不代表已经确认根因或获准变更。

  1. 备份任务成功且文件非空,但快照大小、键数或 revision 与近期趋势明显不同,来源记录仍不完整。

    只读核对
    只读核对备份任务、端点身份、文件副本校验和已有离线状态报告,对照同范围历史记录及正常变更说明。
    如何判读
    差异可能来自合法清理或拿错备份,文件可读不证明业务范围正确;来源和变化无解释时不能进入恢复结论。
  2. 已有隔离集群启动记录正常,但测试客户端仍使用旧缓存,恢复报告没有说明 revision 与 watch 覆盖。

    只读核对
    读取实际工具版本和帮助、经审阅的恢复参数、客户端既有同步日志及快照年龄,不重新启动或调用恢复操作。
    如何判读
    可能存在旧 revision 缓存或客户端重新列举缺口;缺少验证证据不能靠删除参数或固定增量视为等价恢复。
  3. 演练使用了新 token 和不同目录,但配置中仍出现生产端点或真实控制器的外部服务引用,隔离范围不明。

    只读核对
    只读审阅新成员、监听与通告地址、路由策略和客户端配置引用,对照已有隔离验收及生产自动发现记录。
    如何判读
    逻辑身份不同不能替代网络与副作用隔离;任一路径未经证明都应列为停止条件,而不是先启动再观察。
常见误区与判断边界 2 项

用跳过校验解决不一致的快照

校验不匹配可能指向传输、来源或材料不完整,跳过只会取消一个重要证据条件,并不能修复内容。应保留原件和失败副本的身份及日志,交由恢复负责人评估;不能覆盖唯一备份、复制运行中目录冒充一致快照,或把未知来源直接写成可恢复。

把控制面恢复当作全部业务恢复

快照里的对象信息不包含全部数据库、持久卷、对象存储及外部系统状态,恢复配置也不自动带回解密材料。报告需把文件、服务、客户端和业务依赖的结论分开;没有实际业务核对就不宣称容灾达标,正式接管仍需独立批准与数据取舍评审。

交接时应留下的证据

作为记录提纲使用,不是自动检查结果;未取得的证据应标记缺口,并注明负责人。

  • 记录源端点与集群、工具版本、快照时间及 revision、文件副本校验和保留引用,说明异常趋势的业务解释或缺口。
  • 保存新成员、独立目录、地址与证书引用及网络隔离审阅记录,明确生产客户端、原 peer 和外部写接口不在演练范围。
  • 关联已评审 revision 方案、实际恢复日志和隔离客户端的读取及 watch 结果,未执行的同步检查不能填写通过。
  • 分别交接文件完整性、成员启动、客户端和业务依赖覆盖,记录各阶段实际耗时与缺口,不将技术耗时等同完整接管。

记录需包含环境、版本、时间与时区;分享前脱敏,不附访问令牌、密码或完整业务敏感数据。

继续阅读与资料核对

补充相关主题,再结合当前环境的实施记录形成结论。

返回原理导读

DOUYA OPS ECOSYSTEM

贡献你的经验,帮助更多运维人

把故障复盘、标准流程和最佳实践沉淀为可检索、可复用的知识内容。