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

发布时间:2026/11/5 16:10:45

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/11/5 14:57:07

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

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

2026/11/5 16:10:42

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

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

2026/10/25 1:23:25

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

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

2026/11/5 15:00:49

基于Hadoop+Spark的民宿智能推荐系统设计与实现

1. 项目概述:大数据时代的民宿智能推荐这个毕业设计项目融合了当前大数据领域最主流的技术栈,构建了一个完整的民宿推荐系统解决方案。作为一名长期从事大数据系统开发的工程师,我认为这个选题非常贴合实际应用场景——随着旅游业的复苏和共享…

2026/11/5 14:10:30

ADS122U04IPWR+STM32F427ZI工业级温度测量信号链设计

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/5 14:10:30

UART接口24位ADC搭配RS485,解决远距离温度监控难题

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/5 14:10:30

UART接口24位ADC搭配PIC18F46K22的RTD与热电偶测温实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/5 13:55:19

GD32E10x官方例程入门:从GPIO点灯到串口调试

简介:这份GD32E10x系列官方例程面向嵌入式硬件与单片机开发者,基于ARM Cortex-M3内核,汇集兆易创新GD32E10x的示例代码,适合工业控制、消费电子、通信设备等场景的学习、验证与二次开发。压缩包共935个文件,约11.16MB&…

2026/11/5 13:50:18

基于Django的运维平台实战:资产、发布、巡检、告警一体化

简介:这份资源是一套基于Django框架开发的运维平台源码,面向具备Python基础、希望了解Web运维系统实现思路的开发者与运维人员,可用于学习主机管理、服务监控、日志查看、任务调度、权限控制、资源统计、脚本执行与故障告警等常见运维模块的落…

2026/11/5 15:39:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/5 0:02:07

多智能体协作系统架构设计与实践优化

1. 多智能体协作系统的时代背景2017年Transformer架构的诞生彻底改变了人工智能的发展轨迹。当行业还沉浸在单一大模型带来的性能突破时,Anthropic的研究团队已经将目光投向了更前沿的领域——如何让多个智能体通过协作产生超越单体能力的系统智能。这就像交响乐团中…

2026/11/5 0:02:07

大模型系统性入门实战指南:从原理到部署微调的全链路路线

提到大模型的系统性入门,我先说个结论:这事真不难,难的是资料太散、路线太多,今天这个框架明天那个工具,新人很容易在“收藏夹吃灰”和“教程看到一半放弃”之间反复横跳。市面上关于大模型的内容少说有几十万篇&#…

2026/11/5 0:02:07

鸿蒙文件系统沙箱机制解析与开发实践

1. 鸿蒙文件系统沙箱机制深度解析作为一名从Android转向鸿蒙开发的工程师,我深刻体会到文件系统访问是迁移过程中最先遇到的"拦路虎"。在Android上运行良好的文件读写代码,在鸿蒙真机环境却频频出现文件写入后神秘消失或直接抛出权限拒绝错误的…

2026/11/5 15:39:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

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

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

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