
Velero 文件系统备份实战一条命令带出 PV 数据Persistent Volume 备份恢复完全指南【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero本文围绕 Velero 的文件系统备份能力讲清它如何在 Kubernetes 集群里对 PVPersistent Volume做备份与恢复从环境准备、Velero PV 备份命令到数据校验、单文件找回与跨集群迁移并附上常见故障排查与性能调优要点。一、痛点磁盘一换数据就没了做过 Kubernetes 运维的人大概率遇到过这种局面应用迁移、节点替换、存储故障任何一样发生时PV 上的数据都可能跟着消失。而恢复手段往往被绑在底层存储支持快照这个前提上——存储厂商不支持 CSI 快照或者目标集群用的是另一家存储备份方案就直接失效。Velero 的文件系统备份走的是另一条路不依赖存储层能力直接把卷里的文件内容搬走、存进对象存储。二、Velero 文件系统备份是什么和 CSI 快照的两条路两条路线的本质差异在于数据从哪来CSI 快照由存储系统生成速度快、开销低但前提是你的存储驱动支持快照且数据圈在原来的存储系统里。文件系统备份由 Velero 的节点代理node-agent直接读取卷挂载目录下的文件打包上传到备份存储位置BSL再经统一数据路径VGDP进入备份仓库。数据以文件形式落在 S3 兼容对象存储里天然和具体存储厂商解耦。由此带来的适用场景也不同存储不支持快照或跨存储/跨云迁移时文件系统备份几乎是唯一可靠选项同时它还能通过 Pod 上的volumeSnapshotAware/卷策略对指定卷做精细控制甚至支持块卷之外的普通文件系统卷。底层实现分布在 pkg/datapath/数据路径调度、pkg/podvolume/卷备份执行与 pkg/uploader/数据上传几个模块里想深入源码可以从这几处入手。三、最小可用环境一次 Velero 安装 一个对象存储前提条件很朴素Kubernetes 集群 v1.24一个 S3 兼容存储MinIO、各家云 OSS 均可仓库里 examples/minio/ 就有一份可直接部署的 MinIO 清单一个待保护的工作负载例如 examples/nginx-app/ 里的示例应用关键配置只有两处。第一处是安装 Velero 时开启文件系统备份特性并启用 node-agentvelero install \ --featuresEnableFileSystemBackup \ --use-node-agent第二处是准备好备份存储位置BSL指定 provider 与 S3 对象存储的桶、密钥即可仓库的 examples/ 目录提供了配套示例。特性开关的完整列表可在 pkg/features/ 查看EnableFileSystemBackup就是其中控制文件系统备份能力的那一个。四、一次完整的 Velero PV 备份恢复之旅Velero PV 备份命令备份本身就是一条 CLI 命令。--default-volumes-to-fs-backup让集群内所有 Pod 卷默认走文件系统备份也可以用--include-resources、--include-namespaces精确圈定范围velero backup create nginx-fs \ --include-namespaces nginx-example \ --default-volumes-to-fs-backup \ --wait执行后每个承载目标卷的节点上node-agent 会拉起临时备份 Pod把卷挂载点下的文件读出来、压缩、上传到 BSL。整个过程是异步的可以反复用下面两条命令盯着状态和日志velero backup describe nginx-fs --details velero backup logs nginx-fs校验备份完整性备份进入Completed只是开始。靠谱的校验习惯是看日志里有没有 Error 级别的文件操作记录再核对备份产物大小与卷内数据量是否量级吻合文件系统备份通常比原始卷小因为空文件、稀疏块都会被跳过。若备份里有部分卷走的是快照、部分走的是文件系统velero backup describe的 details 会按卷列出各自的数据路径可以逐个确认。Velero 文件系统恢复步骤恢复时--restore-pod-volume-data是关键开关——它告诉 Velero 不仅要恢复 PV/PVC 这些元数据对象还要把文件系统数据真正写回卷velero restore create nginx-fs-r \ --from-backup nginx-fs \ --restore-pod-volume-data \ --namespace-mappings nginx-example:nginx-recovery数据回填由 Velero 创建恢复 Pod 完成它把 BSL 里的文件逐层还原到目标挂载点同时恢复文件属主、权限、时间戳等属性这一步必须以 root 运行这也是恢复 Pod 的默认行为。完成后新命名空间里的 StatefulSet 重新拉起卷上就是备份时刻的内容。五、两个真实场景单文件找回与跨集群迁移只救一个文件不必恢复整个应用。目标文件所在的 PV 损坏了但你还想保留当前运行中的应用。做法是开一个隔离命名空间做恢复只恢复该 PVC 及其数据然后起一个带hostPath或空command的一次性 Pod 挂上恢复后的卷把需要的文件kubectl cp出来事毕删掉这个临时恢复。整个过程不触碰生产工作负载风险面很小。跨集群、跨存储迁移。文件系统备份把数据放进了对象存储而对象存储是集群之外的这给了迁移天然的跳板在源集群跑一次完整备份含--default-volumes-to-fs-backup。把 BSL 里的备份归档tar 文件连同 BSL 配置搬到目标集群可达的存储上——小备份直接下载再上传大备份可以让两个集群共享同一个桶。在目标集群velero backup add导入然后执行上文的恢复命令。由于卷数据本身就是文件形式目标集群哪怕换了存储厂商、换了 StorageClass只要容量和访问模式兼容就能挂上这正是快照式备份做不到的地方。六、踩坑清单Velero 文件系统备份常见故障与自救现象多半的原因自救动作备份卡住卷一直等待承载 Pod 已删除卷没有活动挂载点可读文件系统备份要求卷处于挂载状态确认对应 Pod 在跑必要时先拉起应用再备份node-agent 没起来或备份 Pod 创建失败安装时漏了--use-node-agent或节点权限不足检查安装参数与 node-agent DaemonSet 状态备份/恢复 Pod 需要 privileged root确认节点策略放行恢复后文件属主/权限不对以非 root 身份执行了数据回填确保恢复 Pod 的 SecurityContext 继承自 node-agentrootSELinux 环境注意 label 上下文上传慢、备份窗口超期节点带宽不足或并发被打满见下一节的并发与压缩手段大文件卷考虑错峰备份想排除卷里的大目录日志、临时文件默认整卷上传在备份策略/Pod 卷配置中指定排除路径避免无效数据进仓库排查入口有两个velero backup logs看控制器视角kubectl logs看对应 node-agent 与临时备份 Pod 的视角两边日志对着看基本能定位到具体卷卡在哪一环。七、更快、更省性能与成本点到为止的几条并发节点级并发由 node-agent 的并发配置控制调高可以缩短多卷备份窗口但别超过节点磁盘与带宽的承载力。压缩与增量数据最终进入 Kopia 管理的备份仓库重复文件会被去重多次备份的增量开销远低于全量这是文件系统备份在成本上的一大优势。TTL 与生命周期用--ttl给备份设过期时间再配合对象存储桶的生命周期规则让过期归档自动清理。排除无用数据日志、缓存类目录不进仓库是最直接省空间的方式。八、下一步想精确控制哪些卷走文件系统备份、哪些走快照看卷策略设计design/global-backup-volume-policies.md想理解备份数据从节点到仓库的完整流转读统一数据路径的实现说明design/Implemented/unified-repo-and-kopia-integration/unified-repo-and-kopia-integration.md用定时备份替代手工触发让文件系统备份变成无人值守的日常velero schedule create支持相同的备份参数再配合 examples/nginx-app/ 这类示例应用做演练。【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考