Velero通过文件系统级备份实现容器持久卷数据的真正备份,需同时满足三条件:服务端启用Node Agent、备份命令指定--volume-backup-mode=filesystem、对象存储配置支持路径式访问。

Velero 是 Kubernetes 生态中专为容器化应用设计的备份恢复工具,它不只备份 YAML 定义,还能真正把容器里跑着的应用数据(尤其是挂载的持久卷 PV/PVC)安全存下来。关键在于:备份对象资源 + 备份卷内文件数据,两者缺一不可。
Velero 备份容器数据的核心逻辑
Velero 默认只备份集群资源(Deployment、Service、ConfigMap 等),但容器真正“有状态”的部分——比如数据库文件、日志目录、上传的图片——都存在 PVC 绑定的持久卷里。要备份这些,必须显式启用并配置卷数据路径。
- 卷备份不是靠底层存储快照(如 AWS EBS Snapshot),而是通过 文件系统级备份(FileSystem Backup) 实现,兼容任意类型存储(本地盘、NFS、Ceph、MinIO 自建存储等)
- 需要启用
--use-node-agent(即部署 Velero Node Agent),它会在每个工作节点上运行一个 DaemonSet,负责读取挂载点、打包文件、上传到对象存储 - 必须在备份命令中明确指定
--include-volumes或--volume-backup-mode=filesystem,否则 PVC 数据不会被纳入
如何让容器数据真正被备份进去
确保以下三点全部满足,容器里的实际文件才能进备份包:
✅ 服务端安装时启用 Node Agent
运行velero install时必须带--use-node-agent参数,否则没有节点侧代理,无法访问 Pod 挂载路径-
✅ 备份命令中声明卷备份模式
例如备份 nginx 示例应用:velero backup create nginx-data-backup \ --include-namespaces nginx-example \ --include-resources pods,pvc,pv,statefulsets \ --include-volumes all \ --volume-backup-mode filesystem
--include-volumes all表示备份该命名空间下所有 PVC 对应的卷;也可写具体 PVC 名,如my-app-data -
✅ 对象存储配置支持路径式访问(尤其 MinIO)
--backup-location-config中必须包含:s3ForcePathStyle="true",s3Url=http://minio.test.com:9000
否则 Node Agent 无法正确构造上传 URL,导致卷备份失败(常见报错:
failed to upload volume data)
常见问题与绕过技巧
- ❌ “备份成功但恢复后数据为空” → 很可能没启用
--use-node-agent,或备份时漏了--volume-backup-mode=filesystem - ❌ “Node Agent Pod 一直 ContainerCreating” → 检查是否开了 hostPath 或 privileged 权限(某些环境需加
--set nodeAgent.securityContext.privileged=true) - ⚠️ 不建议用
--snapshot-volumes=true(依赖云厂商快照能力),除非你用的是 AWS/GCP/Aliyun 且已配好 CSI Driver;自建集群优先走filesystem模式 - ? 若只想备份部分目录(比如跳过
/tmp或日志缓存),可在备份时加--exclude-directories="/tmp,/var/log/nginx"(Velero v1.14+ 支持)
不复杂但容易忽略

















