4. Velero备份基础

4.1 备份核心概念与工作流

Velero 备份的本质是将 Kubernetes 资源对象的声明(YAML)以及持久卷(PV)中的块数据快照,打包上传至对象存储。理解其内部工作流是正确使用的基础。

核心流程: Velero 客户端发起备份请求 → API Server 创建 Backup CR → Velero Server 通过 API 查询指定资源 → 调用 CSI/VolumeSnapshotter 创建卷快照 → 将资源清单与快照数据上传至对象存储(S3/GCS/Azure Blob)。
Velero 备份工作流 velero backup create K8s API Server Backup CR Velero Server VolumeSnapshotter 对象存储 PV / PVC 说明:Velero 先通过 API 收集资源清单,再通过 CSI 或 VolumeSnapshotter 创建持久卷快照,最后将两者打包上传。 备份文件包含:资源 JSON/YAML + 卷快照数据 + 备份元数据。

4.2 创建第一个备份:备份命名空间资源

备份命名空间资源是 Velero 最基础的操作,不涉及持久卷数据,仅备份 Kubernetes 对象(Deployment、Service、ConfigMap 等)。

4.2.1 前置条件检查

检查项命令预期结果
Velero 安装状态velero version显示 Client 和 Server 版本
存储位置配置velero backup-location get显示已配置的 BackupStorageLocation
节点状态kubectl get nodes所有节点 Ready

4.2.2 执行命名空间备份

# 备份整个命名空间(不包含卷数据)
velero backup create my-first-backup \
  --include-namespaces nginx-app \
  --default-volumes-to-fs-backup=false \
  --ttl 72h

# 查看备份状态
velero backup get
velero backup describe my-first-backup --details
最佳实践: 首次备份建议先做不包含卷数据的“纯资源备份”,验证 Velero 与对象存储的连通性。使用 --ttl 参数控制备份保留时间,避免存储空间浪费。

4.2.3 备份内容验证

备份完成后,Velero 会在对象存储中生成以下目录结构:

backups/
  my-first-backup/
    velero-backup.json          # 备份元数据
    resources/
      namespaces/
        nginx-app.json           # 命名空间资源清单
      deployments/
        nginx-app.deployment.json
      services/
        nginx-app.service.json
      configmaps/
        nginx-app.configmap.json

4.3 备份 PV 与 PVC 数据

生产环境中,应用数据通常存储在持久卷中。Velero 支持两种卷备份模式:CSI 快照(推荐)和 Restic/Kopia 文件级备份。

4.3.1 卷备份模式对比

特性CSI 快照模式Restic/Kopia 文件级备份
备份方式调用 CSI Driver 创建卷快照通过 FUSE 挂载卷后读取文件
性能快(秒级快照)较慢(取决于文件数量和大小)
存储要求需要 CSI Driver 支持 VolumeSnapshot无需 CSI,兼容任何存储类
恢复粒度整卷恢复支持文件级恢复
适用场景云原生 CSI 存储(如 AWS EBS、GCE PD)NFS、本地卷、非 CSI 存储

4.3.2 使用 CSI 快照备份卷数据

# 前提:已安装 CSI Driver 并创建 VolumeSnapshotClass
velero backup create backup-with-csi \
  --include-namespaces wordpress \
  --snapshot-move-data=true \
  --ttl 168h

# 查看卷快照状态
velero snapshot get

4.3.3 使用 Restic/Kopia 文件级备份

# 前提:Velero 安装时启用 --use-node-agent
velero backup create backup-with-restic \
  --include-namespaces wordpress \
  --default-volumes-to-fs-backup=true \
  --ttl 168h

# 查看卷备份进度
velero backup describe backup-with-restic --details
注意: 文件级备份会占用节点资源(CPU/内存/IO),建议在业务低峰期执行。对于大型数据库(如 MySQL、PostgreSQL),推荐使用 CSI 快照或数据库原生备份工具。
卷备份模式对比 CSI 快照模式 VolumeSnapshotClass CSI Driver 快照 对象存储 文件级备份 Node Agent FUSE 挂载卷 对象存储 选择建议 • CSI 快照:云原生存储首选,速度快 • 文件级备份:兼容性广,支持文件级恢复 • 混合使用:关键业务用 CSI,辅助用 Restic • 注意:文件级备份需预留节点资源

4.4 备份策略与调度

手动备份无法满足生产环境的 SLA 要求。Velero 通过 Schedule 资源实现自动化备份策略,支持 Cron 表达式和多种备份参数组合。

4.4.1 创建定时备份调度

# 创建每日凌晨 2 点备份,保留 7 天
velero schedule create daily-backup \
  --schedule="0 2 * * *" \
  --include-namespaces production \
  --ttl 168h \
  --default-volumes-to-fs-backup=true

# 查看调度状态
velero schedule get
velero schedule describe daily-backup

4.4.2 备份策略参数详解

参数示例值说明
--schedule"0 */6 * * *"Cron 表达式,每 6 小时执行一次
--ttl720h备份保留时长(30 天),过期自动清理
--include-namespacesapp1,app2仅备份指定命名空间
--exclude-resourcesevents,events.events.k8s.io排除事件等非关键资源
--snapshot-move-datatrue将卷快照数据移至对象存储(CSI 模式)
--ordered-resourcespods:ns1/pod1,ns1/pod2指定资源备份顺序,用于有依赖关系的应用

4.4.3 多环境备份策略示例

生产环境推荐策略:
  • 全量备份: 每日凌晨 2 点,包含所有命名空间和卷数据,保留 30 天
  • 增量备份: 每 6 小时一次,仅备份关键业务命名空间,保留 7 天
  • 长期归档: 每月 1 日执行全量备份,保留 1 年
# 生产全量备份调度
velero schedule create prod-full-backup \
  --schedule="0 2 * * *" \
  --include-namespaces prod-app,prod-db,prod-cache \
  --ttl 720h \
  --snapshot-move-data=true

# 关键业务增量调度
velero schedule create prod-core-backup \
  --schedule="0 */6 * * *" \
  --include-namespaces prod-app,prod-db \
  --ttl 168h \
  --default-volumes-to-fs-backup=true

# 长期归档调度
velero schedule create prod-monthly-archive \
  --schedule="0 3 1 * *" \
  --include-namespaces prod-app,prod-db,prod-cache \
  --ttl 8760h \
  --snapshot-move-data=true

4.4.4 调度管理操作

操作命令说明
暂停调度velero schedule pause <name>临时停止自动备份,用于维护窗口
恢复调度velero schedule unpause <name>恢复自动备份
更新调度velero schedule update <name> --schedule="..."修改 Cron 表达式或参数
删除调度velero schedule delete <name>删除调度,已创建的备份不受影响
调度避坑指南:
  • 避免多个调度在同一时间点触发,防止资源争抢
  • 生产环境建议设置 --ttl 至少 168h(7 天),满足合规要求
  • 使用 --ordered-resources 确保有依赖关系的应用(如先备份数据库,再备份应用)
  • 定期检查调度状态:velero schedule get 确认没有 FailedValidation 错误

4.5 备份验证与监控

备份完成后,必须验证备份数据的完整性和可恢复性。Velero 提供了多种验证手段。

4.5.1 备份完整性检查

# 检查备份是否成功
velero backup get | grep -E "NAME|my-backup"

# 查看备份详细状态
velero backup describe my-backup --details

# 检查备份日志(排查失败原因)
velero backup logs my-backup | tail -50

4.5.2 备份验证清单

验证项检查方法通过标准
备份状态velero backup get状态为 Completed
资源数量velero backup describe资源计数与预期一致
卷快照velero snapshot get快照状态为 Ready
存储大小对象存储控制台备份文件大小合理
恢复测试在测试集群执行恢复应用正常运行,数据完整
重要: 不要仅依赖备份状态为 Completed 就认为备份成功。定期在测试环境执行恢复演练,验证备份数据的实际可用性。建议每月至少执行一次完整的恢复测试。