4. Velero 备份与恢复基础:创建第一个备份、查看备份状态、从备份中恢复应用、备份文件结构解析
Velero 是 Kubernetes 生态中最成熟的备份与恢复工具之一。本章将带你从零开始完成第一个备份操作,掌握备份状态查看、应用恢复以及备份文件底层结构。这些操作是后续蓝绿发布灾备切换的基石。
4.1 环境准备与 Velero 安装验证
在创建备份之前,请确认以下条件已满足:
- Kubernetes 集群:版本 ≥ 1.16,具备集群管理员权限。
- Velero CLI:已安装并与集群版本兼容。
- 对象存储:MinIO / AWS S3 / GCS 等,用于存放备份文件。
- Velero 服务端:已在集群中部署并关联存储位置。
快速验证命令:
velero version —— 确认客户端与服务端版本一致。velero backup-location get —— 确认存储位置状态为 Available。
4.2 创建第一个备份
假设我们有一个名为 wordpress 的命名空间,包含 WordPress 应用及其 MySQL 数据库。执行以下命令创建全量备份:
velero backup create wordpress-backup-20250401 \
--include-namespaces wordpress \
--default-volumes-to-fs-backup \
--ttl 720h
参数说明:
| 参数 | 含义 | 推荐值 |
|---|---|---|
--include-namespaces |
指定要备份的命名空间 | wordpress |
--default-volumes-to-fs-backup |
使用文件系统级备份持久卷(避免快照依赖) | 推荐开启 |
--ttl |
备份保留时长(小时) | 720h(30天) |
生产建议:首次备份建议先使用
--dry-run 参数预览将要备份的资源列表,确认无误后再执行实际备份。
4.3 查看备份状态
备份创建后,Velero 会经历 New → InProgress → Completed / Failed 几个阶段。使用以下命令跟踪状态:
# 查看所有备份
velero backup get
# 查看特定备份详情
velero backup describe wordpress-backup-20250401
# 实时查看备份日志
velero backup logs wordpress-backup-20250401
备份状态字段解读:
| 状态 | 含义 | 常见原因 |
|---|---|---|
| Completed | 备份成功完成 | — |
| Failed | 备份过程中出现错误 | 存储权限不足、PVC 挂载失败 |
| PartiallyFailed | 部分资源备份失败 | 某些 CRD 不支持备份 |
| InProgress | 备份正在执行 | 等待数据上传完成 |
4.4 从备份中恢复应用
当应用出现故障或需要回滚时,使用 velero restore 命令从备份中恢复。恢复操作支持全量恢复、选择性恢复以及命名空间映射。
4.4.1 基本恢复命令
# 从备份恢复整个命名空间
velero restore create --from-backup wordpress-backup-20250401
# 恢复时重命名命名空间(避免与现有资源冲突)
velero restore create --from-backup wordpress-backup-20250401 \
--namespace-mappings wordpress:wordpress-restored
4.4.2 恢复策略对比
| 恢复方式 | 适用场景 | 注意事项 |
|---|---|---|
| 全量恢复 | 灾难恢复、环境迁移 | 会覆盖同名资源(默认行为) |
| 命名空间映射恢复 | 蓝绿发布、A/B 测试 | 需提前创建目标命名空间 |
| 选择性资源恢复 | 仅恢复特定 Deployment 或 PVC | 使用 --include-resources 参数 |
重要:恢复操作默认会尝试创建或更新资源。如果目标集群中已存在同名资源,Velero 会使用备份中的版本覆盖。在生产环境中,建议先使用
--namespace-mappings 恢复到隔离命名空间进行验证。
4.5 备份文件结构解析
Velero 将备份数据存储在对象存储中,目录结构清晰可读。理解文件结构有助于手动排查问题或进行跨集群迁移。
4.5.1 存储目录层级
backups/
└── wordpress-backup-20250401/
├── velero-backup.json # 备份元数据(资源列表、参数、时间戳)
├── wordpress/
│ ├── namespaces/
│ │ └── wordpress.json # 命名空间定义
│ ├── deployments/
│ │ └── wordpress.json # Deployment 资源
│ ├── services/
│ │ └── wordpress-svc.json # Service 资源
│ ├── persistentvolumeclaims/
│ │ └── wp-pvc.json # PVC 定义
│ └── configmaps/
│ └── wp-config.json # ConfigMap 资源
└── volumes/
└── wordpress/
└── pvc-xxxxx/
├── backup.tar.gz # 卷数据文件(文件系统级备份)
└── backup.json # 卷备份元数据
4.5.2 关键文件说明
| 文件/目录 | 内容 | 用途 |
|---|---|---|
velero-backup.json |
备份的完整元数据,包含资源列表、备份选项、存储位置 | 恢复时 Velero 读取此文件确定要恢复的资源 |
namespaces/ |
每个命名空间的 JSON 定义 | 确保目标集群中存在对应命名空间 |
deployments/ |
Deployment、StatefulSet 等工作负载资源 | 恢复应用运行状态 |
volumes/ |
持久卷的文件系统快照(tar.gz 格式) | 恢复应用数据 |
4.6 备份与恢复的常见问题
经验总结:
- 备份失败:检查存储桶权限、网络连通性、PVC 是否处于挂载状态。
- 恢复后 Pod 无法启动:检查镜像拉取策略、存储类是否匹配、PV 回收策略。
- 备份文件过大:使用
--exclude-resources排除不需要备份的资源(如 Events)。 - 跨集群恢复:确保目标集群的 StorageClass 与备份时一致,或使用
--storage-class-mappings进行映射。