3. 云原生灾备概述:Kubernetes集群备份、etcd快照、Velero与Kasten K10工具简介
云原生环境下的灾备与传统虚拟化或物理机环境有本质区别。Kubernetes 集群的状态不仅包含持久化数据,还包含大量的声明式资源对象(Deployment、ConfigMap、Secret、CRD 等)以及集群元数据(etcd 中的集群状态)。因此,云原生灾备必须覆盖应用层资源与数据层状态两个维度。
3.1 云原生灾备的核心挑战
在 Kubernetes 环境中,传统的文件级或卷级快照无法完整恢复一个分布式应用。主要挑战包括:
- 资源依赖复杂:应用通常由多个微服务、Service、Ingress、PVC 组成,恢复时必须按依赖顺序重建。
- 集群元数据易失:etcd 存储了整个集群的配置和状态,一旦损坏或丢失,集群将无法启动。
- 跨集群迁移需求:灾备场景往往需要将应用从生产集群恢复到同构或异构的灾备集群。
- 合规与审计要求:灾备恢复演练和实际恢复过程需要可追溯、可验证,SBOM 在此环节提供软件成分的准入证据。
3.2 Kubernetes 集群备份的两种层次
根据备份粒度和目标,Kubernetes 集群备份可分为以下两个层次:
| 备份层次 | 备份对象 | 典型工具 | 恢复速度 | 适用场景 |
|---|---|---|---|---|
| etcd 快照 | 集群全部元数据(Pod、Service、ConfigMap、RBAC 等) | etcdctl snapshot | 快(分钟级) | 集群级灾难恢复、etcd 数据损坏 |
| 应用级备份 | 特定命名空间下的资源对象 + 持久卷数据 | Velero、Kasten K10 | 中(取决于数据量) | 应用迁移、版本回滚、灾备演练 |
3.3 etcd 快照:集群的“最后一道防线”
etcd 是 Kubernetes 集群的“大脑”,存储了所有 API 对象的状态。etcd 快照是集群级灾备的基础。使用 etcdctl 工具可以创建和恢复快照:
# 创建 etcd 快照(在 etcd 主节点执行)
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/etcd-snapshot-$(date +%Y%m%d%H%M%S).db
# 恢复 etcd 快照(需停止 etcd 服务)
ETCDCTL_API=3 etcdctl snapshot restore /backup/etcd-snapshot-20250301120000.db \
--data-dir=/var/lib/etcd-restore \
--initial-cluster=master=https://192.168.1.10:2380 \
--initial-cluster-=etcd-cluster-1 \
--initial-advertise-peer-urls=https://192.168.1.10:2380
etcd 快照的局限性在于:它只备份集群元数据,不包含持久卷(PV)中的实际数据。因此,etcd 快照通常与存储层快照配合使用。
3.4 Velero:开源 Kubernetes 备份/迁移标准工具
Velero(原 Heptio Ark)是目前最广泛使用的开源 Kubernetes 备份和迁移工具。它通过调用 Kubernetes API 和存储后端接口,实现应用级备份与恢复。
3.4.1 Velero 核心架构
下图展示了 Velero 在 Kubernetes 集群中的组件交互关系:
3.4.2 Velero 常用操作命令
# 安装 Velero(使用 AWS S3 作为后端)
velero install \
--provider aws \
--bucket velero-backups \
--secret-file ./credentials-velero \
--backup-location-config region=us-east-1 \
--use-volume-snapshots=false \
--plugins velero/velero-plugin-for-aws:v1.7.0
# 创建按需备份(备份整个命名空间)
velero backup create app-backup-20250301 \
--include-namespaces production \
--ttl 720h
# 查看备份状态
velero backup describe app-backup-20250301
# 从备份恢复
velero restore create --from-backup app-backup-20250301 \
--namespace-mappings production:dr-production
3.5 Kasten K10:企业级云原生数据管理平台
Kasten K10 是 Veeam 旗下的企业级 Kubernetes 数据管理平台,在 Velero 的基础上提供了更丰富的企业特性:可视化仪表板、策略引擎、合规报告、多集群管理以及 SBOM 集成能力。
3.5.1 K10 核心功能对比
| 功能维度 | Velero(开源) | Kasten K10(企业版) |
|---|---|---|
| 备份粒度 | 命名空间 / 标签选择 | 命名空间 + 应用拓扑自动发现 |
| 数据移动性 | Restic / CSI 快照 | 原生移动卷 + 跨云存储分层 |
| 策略引擎 | 基于 CronJob 的 Schedule | 可视化策略(保留、加密、合规) |
| 合规与审计 | 无内置审计 | 内置审计日志 + SBOM 导出 |
| 恢复验证 | 手动验证 | 自动恢复演练 + 应用健康检查 |
| 多集群管理 | 需独立部署 | 统一控制台管理多集群 |
3.5.2 K10 灾备策略与 SBOM 集成
K10 允许用户为每个应用定义灾备策略(Policy),策略中可包含备份频率、保留周期、目标存储位置以及加密设置。更重要的是,K10 支持在备份时自动生成应用的 SBOM(软件物料清单),记录备份中包含的所有容器镜像及其摘要(Digest)。
# K10 策略示例(通过 kubectl 或 Dashboard 创建)
apiVersion: config.kio.kasten.io/v1alpha1
kind: Policy
metadata:
name: production-app-backup
namespace: kasten-io
spec:
comment: "生产应用每日备份 + SBOM 生成"
frequency: "@daily"
retention:
daily: 7
weekly: 4
monthly: 3
actions:
- action: backup
backupType: Full
- action: export
exportType: SBOM
target:
name: sbom-bucket
namespace: kasten-io
selector:
matchLabels:
app.kubernetes.io/env: production
3.6 灾备工具选型建议
根据团队规模、预算和合规要求,建议如下:
- 初创团队 / 实验环境:使用 Velero + 对象存储(MinIO 或 S3),配合 etcd 定期快照。
- 中型企业 / 生产环境:使用 Velero + CSI 快照 + Restic,结合外部监控和手动审计。
- 大型企业 / 金融合规场景:使用 Kasten K10,利用其内置的 SBOM 导出、审计日志和自动恢复演练功能,满足 SOC2、PCI-DSS 等合规要求。