Velero 恢复参考指南:跨命名空间恢复与 PV/PVC 存储类映射

发布时间:2026/9/17 22:25:55

Velero 恢复参考指南:跨命名空间恢复与 PV/PVC 存储类映射 Velero 恢复参考指南跨命名空间恢复与 PV/PVC 存储类映射【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero本文基于 Velero 仓库中的 restore-reference.md 展开系统讲解在 Kubernetes 恢复场景下最常用的两项定制能力将备份中的资源恢复到与原命名空间不同的目标命名空间以及在恢复过程中改写 PV/PVC及 StatefulSet 卷模板的存储类。读完本文你将掌握--namespace-mappings标志的用法与底层实现以及如何通过 ConfigMap 驱动内置的change-storage-class恢复项动作插件从而在恢复时完成存储类迁移适配跨集群、跨环境如开发环境到生产环境的备份恢复与迁移需求。一、背景为什么恢复时需要“改写”Velero 的恢复流程默认把备份中的资源原样还原原资源在哪个命名空间就恢复到哪个命名空间PV/PVC 引用了哪个存储类就继续使用哪个存储类。但在真实的生产迁移中这两种“原样还原”往往不满足需求跨命名空间迁移例如把备份从old-ns-1恢复到new-ns-1用于环境隔离、多租户拆分或应用重构存储类变更例如源集群使用standard存储类目标集群使用fast或从自建存储迁移到云厂商存储如 AWS EBS、Azure Disk存储类名称通常不一致。针对这两种需求Velero 分别在恢复请求Restore规格和**恢复项动作插件Restore Item Action Plugin**两个层面提供了内建支持下面分别展开。二、跨命名空间恢复--namespace-mappings标志2.1 命令用法原文档给出了最直接的用法在创建恢复时通过--namespace-mappings指定“源命名空间:目标命名空间”的映射多个映射用英文逗号分隔velero restore create RESTORE_NAME \ --from-backup BACKUP_NAME \ --namespace-mappings old-ns-1:new-ns-1,old-ns-2:new-ns-2即old-ns-1中的资源被恢复到new-ns-1old-ns-2中的资源被恢复到new-ns-2未出现在映射中的命名空间其资源仍恢复到原命名空间。2.2 CLI 解析与规格落地从源码看该标志在 CLI 层被定义为一个“键值对 Map”类型的参数。在 pkg/cmd/cli/restore/create.go 中NamespaceMappings: flag.NewMap().WithEntryDelimiter(,).WithKeyValueDelimiter(:),其含义是多个映射条目用,分隔每个条目内部用:分隔键源命名空间与值目标命名空间。该选项的帮助文本为Namespace mappings from name in the backup to desired restored name in the form src1:dst1,src2:dst2,...在创建 Restore 自定义资源时CLI 将解析后的 Map 直接写入RestoreSpec.NamespaceMapping字段见 pkg/cmd/cli/restore/create.go。该字段在 API 类型中的定义位于 pkg/apis/velero/v1/restore_types.go// NamespaceMapping is a map of source namespace names // to target namespace names to restore into. Any source // namespaces not included in the map will be restored to // namespaces of the same name. NamespaceMapping map[string]string json:namespaceMapping,omitempty也就是说映射关系最终以spec.namespaceMapping的形式持久化在 Restore 对象中未映射的命名空间保持原名恢复。CLI 侧的解析行为也有对应测试覆盖见 pkg/cmd/cli/restore/create_test.go测试传入--namespace-mappings a:b并断言o.NamespaceMappings.String()的解析结果一致。2.3 底层实现命名空间映射如何生效映射在服务端由恢复控制器读取并贯穿整个恢复流程核心实现位于 pkg/restore/restore.go。资源目标命名空间的计算在getSelectedRestoreableItems中每个备份项的目标命名空间按如下逻辑计算pkg/restore/restore.gotargetNamespace : originalNamespace if target, ok : ctx.restore.Spec.NamespaceMapping[originalNamespace]; ok { targetNamespace target }命名空间资源自身的映射对于namespaces这类集群级资源映射同样生效——当源命名空间在映射表中时恢复出的 Namespace 对象使用目标名pkg/restore/restore.go。连带引用关系的处理映射不仅作用于资源本身还会顺带修正依赖关系包括备份项引用的其他命名空间如跨命名空间引用会按同一映射改写pkg/restore/restore.goPV 的ClaimRef.Namespace会依据映射改写确保 PV 与 PVC 在目标命名空间中仍能正确绑定pkg/restore/restore.go角色绑定RoleBinding中subject.namespace会被改写见 pkg/restore/actions/rolebinding_action.go 与 pkg/restore/actions/clusterrolebinding_action.go。因此使用--namespace-mappings不只是简单地把每个对象换个命名空间创建而是会联动修正 Namespace、PV 绑定、RBAC 引用等关联关系保证恢复出的应用是自洽的。三、恢复时改写 PV/PVC 存储类3.1 工作原理内置 RestoreItemAction 插件存储类改写由 Velero 内置的change-storage-class恢复项动作插件完成源码位于 pkg/restore/actions/change_storageclass_action.go。该插件通过AppliesTo声明其作用对象pkg/restore/actions/change_storageclass_action.goIncludedResources: []string{persistentvolumeclaims, persistentvolumes, statefulsets},即它会在恢复过程中处理三类资源PVC、PV、StatefulSet后者用于改写volumeClaimTemplates中的存储类。插件在服务端启动时被注册为内置插件见 pkg/cmd/server/plugin/plugin.go 中对change-storage-class的注册逻辑。插件的执行逻辑Execute为通过标签velero.io/change-storage-class: RestoreItemAction读取插件专属 ConfigMap若 ConfigMap 不存在或data为空则原样返回对象不做任何修改对 PV/PVC读取spec.storageClassName在 ConfigMap 的data中查找映射若找到映射还校验目标存储类在集群中真实存在通过 StorageClass API 查询见 pkg/restore/actions/change_storageclass_action.go随后把spec.storageClassName改写为映射后的值对 StatefulSet遍历spec.volumeClaimTemplates并逐个改写其中的存储类pkg/restore/actions/change_storageclass_action.go。上述流程均有单元测试覆盖见 pkg/restore/actions/change_storageclass_action_test.go其中TestChangeStorageClassActionExecute覆盖了 PV、PVC、StatefulSet 的各类映射与缺失场景。3.2 配置 ConfigMap原文档给出了完整的配置示例。创建 ConfigMap 于 Velero 所在命名空间通常为velero并打上两组必须的标签apiVersion: v1 kind: ConfigMap metadata: # any name can be used; Velero uses the labels (below) # to identify it rather than the name name: change-storage-class-config # must be in the velero namespace namespace: velero # the below labels should be used verbatim in your # ConfigMap. labels: # this value-less label identifies the ConfigMap as # config for a plugin (i.e. the built-in change storage # class restore item action plugin) velero.io/plugin-config: # this label identifies the name and kind of plugin # that this ConfigMap is for. velero.io/change-storage-class: RestoreItemAction data: # add 1 key-value pairs here, where the key is the old # storage class name and the value is the new storage # class name. old-storage-class: new-storage-class需要特别说明的几点标签是关键Velero 不依赖 ConfigMap 的名称而是通过标签识别其归属插件。velero.io/plugin-config: 表明这是一个插件配置velero.io/change-storage-class: RestoreItemAction表明这是change-storage-class恢复项动作插件的配置命名空间必须是 Velero 所在命名空间否则插件无法读取data中每一对键值都是一个映射键为旧的存储类名值为新的存储类名可同时配置多组。一个真实可用的示例假设要把standard映射为gp2AWS EBSapiVersion: v1 kind: ConfigMap metadata: name: change-storage-class-config namespace: velero labels: velero.io/plugin-config: velero.io/change-storage-class: RestoreItemAction data: standard: gp2配置完成后只需正常发起恢复无需额外标志插件便会在恢复过程中自动改写匹配的 PV/PVC 存储类velero restore create restore-1 --from-backup backup-13.3 注意事项目标存储类必须存在插件在改写前会校验目标存储类已在集群中创建若目标存储类不存在恢复会报错见 pkg/restore/actions/change_storageclass_action.go因此请先确认目标存储类已就绪无匹配时不报错若资源未指定存储类或存储类不在映射表中插件会跳过并原样保留StatefulSet 支持不仅独立 PV/PVC 会被改写StatefulSet 的volumeClaimTemplates也会一并处理这在恢复有状态工作负载时非常关键。四、两种机制的配合使用跨命名空间恢复与存储类改写是正交的两项能力可同时使用。典型场景将应用从旧集群的legacy命名空间迁移到新集群的production命名空间同时把存储类从standard换成ssdvelero restore create migrate-2026 \ --from-backup legacy-app-backup \ --namespace-mappings legacy:production配合上文中的存储类映射 ConfigMap一次恢复即可同时完成命名空间迁移与存储类切换。五、验证与排查查看恢复结果恢复完成后用velero restore describe RESTORE_NAME与velero restore logs RESTORE_NAME查看详细状态与日志该提示信息同样来自 pkg/cmd/cli/restore/create.go 的 CLI 输出确认命名空间映射生效检查目标命名空间中的资源是否创建成功重点核对 PV 的ClaimRef与 PVC 的绑定关系是否指向目标命名空间确认存储类改写生效kubectl get pvc -n target-ns -o yaml查看 PVC 的spec.storageClassName是否为映射后的目标存储类若改写未发生请检查 ConfigMap 是否位于 Velero 命名空间、标签是否与上文一致、目标存储类是否已存在。六、小结本文完整继承了 restore-reference.md 的核心内容并从源码层面印证了其实现能力配置方式底层实现跨命名空间恢复velero restore create --namespace-mappings old:newRestoreSpec.NamespaceMapping见 pkg/apis/velero/v1/restore_types.go、pkg/restore/restore.go存储类改写Velero 命名空间内的插件配置 ConfigMap内置change-storage-classRestoreItemAction 插件见 pkg/restore/actions/change_storageclass_action.go这两项能力都以“零改造备份数据”的方式在恢复阶段动态完成改写是 Velero 实现跨环境、跨集群备份恢复与迁移的关键武器。相关文档与示例可继续在仓库中查阅restore-reference.md、create.go 及其测试 create_test.go、change_storageclass_action.go 及其测试 change_storageclass_action_test.go。【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/17 22:25:55

GJB 438B软件质量保证报告:V模型九阶段十八张检查表自动化

简介:《软件质量保证报告.docx》是一份面向软件质量工程师、配置管理员及军用/嵌入式软件项目成员的规范化质量记录模板,适用于遵循GJB 438B-2009《军用软件开发文档通用要求》的软件研制项目。资源包共1个docx文件,约32KB,为单文…

2026/9/17 22:20:54

Linux环境下CommVault备份与恢复Oracle数据库的实践指南

简介:在Linux服务器上使用CommVault统一备份平台保护Oracle数据库时,可参考这份PDF文档。文档面向数据库管理员与运维工程师,完整覆盖了从安装准备、软件部署到备份策略配置及灾难恢复的实操流程。安装前需重点确认CommVault版本与数据库版本…

2026/9/17 22:20:54

幂律分布实战指南:识别、验证与业务干预

1. 幂律不是“定律”,而是一种观察模式——从城市人口到微博转发,它藏在你每天刷到的数据背后你有没有注意过:全国前10大城市的人口加起来,可能只占全国总人口的不到15%,但它们贡献了近40%的GDP;你发的一条…

2026/9/17 23:06:02

ArcGIS JS 基础教程(22):BuildingSceneLayer 建筑场景图层

ArcGIS JS 基础教程(22):BuildingSceneLayer 建筑场景图层零、写在前面一、功能介绍二、功能实现三、功能应用四、核心代码五、在线示例六、关键 API 说明七、系列导航零、写在前面 📌 本系列教程完整目录:ArcGIS JS 系…

2026/9/17 23:06:02

AVA-Encoder:当AI终于学会看懂一部电影

你有没有想过一个问题:现在的AI已经能写代码、能画画、能生成视频,为什么还是拍不出一部像样的电影?不是技术不够先进,是它压根不知道该怎么"看电影"。想象一下,你把《泰坦尼克号》甲板拥抱那场戏丢给一个AI…

2026/9/16 12:52:37

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/17 0:03:13

WiFi密码安全测试:从原理到实战的字典暴力破解指南

1. 写在前面:我为什么要研究WiFi密码这件事先交代一下背景。我身边有不少朋友,家里的WiFi密码常年是"12345678"或者"88888888",问就是"好记"。直到有一次,隔壁邻居蹭网蹭到我家路由器后台都进不去&…

2026/9/17 0:03:13

redis-py服务控制与监控函数实战:从ping到slowlog的巡检指南

我用 redis-py 写了快五年的业务代码,坦白说,真正让我觉得这个客户端“像一个成熟工具箱”的,不是 get/set 那套基本操作,而是它那批专门做服务控制与状态监控的辅助函数。日常开发里,大家把redis.Redis(host..., deco…

2026/9/17 0:03:13

SpringBoot+Vue3实现中小企业设备管理系统开发实践

1. 项目概述与核心价值中小企业设备管理系统是制造业、服务业等领域的基础信息化工具。传统设备管理往往依赖Excel表格或纸质记录,存在数据孤岛、流程混乱、维护成本高等痛点。这套基于Java SpringBootVue3MyBatis的技术方案,通过前后端分离架构实现了设…

2026/9/16 22:55:57

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/16 22:56:09

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/16 22:56:16

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码