4. Velero 备份基础:创建第一个备份、备份命名空间资源、备份 PV 与 PVC 数据、备份策略与调度
4.1 备份核心概念与工作流
Velero 备份的本质是将 Kubernetes 资源对象的声明(YAML)以及持久卷(PV)中的块数据快照,打包上传至对象存储。理解其内部工作流是正确使用的基础。
核心流程: Velero 客户端发起备份请求 → API Server 创建 Backup CR → Velero Server 通过 API 查询指定资源 → 调用 CSI/VolumeSnapshotter 创建卷快照 → 将资源清单与快照数据上传至对象存储(S3/GCS/Azure Blob)。
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 快照或数据库原生备份工具。
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 小时执行一次 |
--ttl | 720h | 备份保留时长(30 天),过期自动清理 |
--include-namespaces | app1,app2 | 仅备份指定命名空间 |
--exclude-resources | events,events.events.k8s.io | 排除事件等非关键资源 |
--snapshot-move-data | true | 将卷快照数据移至对象存储(CSI 模式) |
--ordered-resources | pods: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 就认为备份成功。定期在测试环境执行恢复演练,验证备份数据的实际可用性。建议每月至少执行一次完整的恢复测试。