2. Kubernetes 灾备基础:灾备概念(RPO/RTO)、K8s 集群备份恢复工具(Velero)、灾备策略设计原则

2.1 灾备核心概念:RPO 与 RTO

在云原生环境中,灾备策略的设计首先需要明确两个关键指标:恢复点目标(RPO)和恢复时间目标(RTO)。这两个指标直接决定了备份频率、恢复流程以及资源投入的等级。

指标 定义 K8s 场景示例 影响
RPO 允许丢失的最大数据量(时间跨度) 每 15 分钟备份一次 etcd 和 PV 数据 决定备份频率与存储成本
RTO 从故障发生到业务恢复的最大允许时间 30 分钟内完成集群重建和数据挂载 决定恢复流程自动化程度与资源预留
策略对齐提示:在 Gatekeeper 准入策略中,RPO/RTO 应作为 ConstraintTemplate 的输入参数,强制要求每个命名空间声明其灾备等级(如 Gold/Silver/Bronze),从而自动匹配对应的备份策略和恢复 SLA。

2.2 K8s 集群备份恢复工具:Velero

Velero 是当前 Kubernetes 生态中最主流的开源备份恢复工具,由 VMware 维护。它支持对集群资源对象和持久化卷(PV)数据进行统一备份,并可将备份数据存储到 S3、Azure Blob、GCS 等对象存储后端。

2.2.1 Velero 核心架构

下图展示了 Velero 在 Kubernetes 集群中的组件交互与数据流关系:

Velero 核心架构与数据流 Kubernetes 集群 Velero 控制器(Deployment) Velero 节点代理(DaemonSet) API Server / etcd 备份源 资源对象(YAML) 持久化卷快照(PV Snapshot) 对象存储后端 S3 / Azure Blob / GCS 备份文件(.tar.gz + 元数据) 恢复目标集群 资源重建 + PV 数据恢复 跨集群迁移 / 灾难恢复 说明: Velero 通过 CRD 定义 Backup/Restore/Schedule 资源,支持定时备份、备份保留策略、以及基于标签的选择性备份。

2.2.2 Velero 常用操作示例

以下命令展示了 Velero 的基本备份与恢复流程:

# 创建定时备份(每6小时一次,保留7天)
velero schedule create daily-backup \
  --schedule="0 */6 * * *" \
  --ttl=168h \
  --include-namespaces=production

# 手动触发一次备份
velero backup create manual-backup-20250321 \
  --include-namespaces=staging \
  --snapshot-volumes=true

# 从指定备份恢复
velero restore create --from-backup manual-backup-20250321 \
  --namespace-mappings staging:recovery-staging

# 查看备份状态
velero backup get
权限变更风险提示:Velero 需要 ClusterRole 级别的权限来读取集群资源。在 Gatekeeper 策略中,必须严格限制 Velero 的 ServiceAccount 只能访问被授权的命名空间,防止备份操作成为权限提升的跳板。

2.3 灾备策略设计原则

在 Kubernetes 环境中设计灾备策略时,应遵循以下五项核心原则,这些原则将直接映射到后续的准入策略规则中:

  1. 分层分级原则:根据业务重要性(Critical / Important / Normal)设定不同的 RPO/RTO 目标,避免“一刀切”导致资源浪费或保护不足。
  2. 数据与配置分离原则:集群资源对象(Deployment、ConfigMap、Secret)与持久化数据(PV)应使用不同的备份策略和存储后端,降低恢复复杂度。
  3. 最小权限原则:备份工具(如 Velero)的 ServiceAccount 仅授予其工作命名空间的最小必要权限,禁止使用 cluster-admin 绑定。
  4. 可验证原则:每次备份完成后应自动触发恢复演练(如恢复到隔离命名空间),验证备份数据的完整性和可用性。
  5. 不可变基础设施原则:集群组件应尽量使用 GitOps 管理,灾备恢复时优先通过声明式配置重建环境,再恢复有状态数据。

2.4 灾备等级与策略映射

下表展示了不同灾备等级对应的典型策略参数,这些参数将作为 Gatekeeper 策略的输入约束:

灾备等级 RPO RTO 备份频率 保留周期 恢复演练
Gold ≤ 15 分钟 ≤ 30 分钟 每 15 分钟 30 天 每周自动
Silver ≤ 1 小时 ≤ 2 小时 每小时 14 天 每月自动
Bronze ≤ 24 小时 ≤ 8 小时 每天 7 天 每季度手动
策略落地要点:在 Gatekeeper 的 ConstraintTemplate 中,可以定义 disaster_recovery_level 作为标签约束,要求每个命名空间必须设置 dr-level: gold|silver|bronze,然后通过 data.inventory 检查 Velero Schedule 的备份频率是否满足对应等级的要求。不满足时,拒绝创建或更新操作。

2.5 灾备策略与准入策略的关联

本章的灾备基础概念为后续的准入策略评审提供了明确的判断依据。在 Gatekeeper 策略中,我们需要验证以下关键点:

  • 每个命名空间是否声明了灾备等级标签
  • Velero Schedule 的备份间隔是否满足该等级的最小 RPO 要求
  • 备份保留策略(TTL)是否满足保留周期要求
  • Velero 的 ServiceAccount 是否绑定了超出必要范围的 ClusterRole
  • 恢复操作是否仅限于指定的恢复命名空间,防止数据泄露

通过将灾备策略设计原则转化为可执行的准入规则,可以实现云原生环境下的自动化灾备合规管控,降低因配置错误或权限滥用导致的恢复失败风险。