
Velerocreate restore命令完全指南从备份恢复 Kubernetes 应用与持久卷【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero导读velero create restore是 Velero本项目仓库前身 Ark中用于创建恢复Restore请求的核心 CLI 命令。它允许你从已有的备份Backup中还原 Kubernetes 应用及其持久卷Persistent Volume并可通过丰富的过滤参数精确控制恢复范围、目标命名空间与卷数据行为。读完本文你将掌握该命令的完整参数体系、典型使用场景全量恢复、按命名空间/资源/标签筛选、命名空间重映射、卷快照恢复控制以及其底层 Restore 对象的工作机制可直接用于生产环境的灾难恢复演练与数据迁移。命令概览与语法ark create restore对应的是 Ark/Velero v0.7.0 时代的 CLI 文档原文。在当前的 Velero 主仓库中该命令已演进为velero restore create其用法定义为velero restore create [RESTORE_NAME] [--from-backup BACKUP_NAME | --from-schedule SCHEDULE_NAME]从当前实现看命令入口位于 pkg/cmd/cli/restore/create.go其Use字段清晰地给出了两个必备的来源参数--from-backup指定从哪个 Backup 恢复--from-schedule指定从哪个 Schedule 恢复Velero 会自动选取该调度产生的最新成功备份。二者必须二选一源码中的校验逻辑见 create.go同时指定或都不指定都会直接报错。此外[RESTORE_NAME]位置参数最多只能传一个若省略Velero 会自动生成备份名-时间戳格式的恢复名见Complete函数 create.go。版本说明v0.7.0 文档中的ark命令即当前仓库中的velero命令命令层级从ark create restore演进为velero restore create参数语义保持一致。旧文档中-n, --namespace的默认命名空间为heptio-ark在现版本中默认命名空间为velero。完整参数一览Optionsv0.7.0 文档定义了以下选项它们是理解本命令功能的最小参数集我们结合当前源码逐一解读参数类型/默认值作用说明--exclude-namespaces stringArray字符串数组从恢复中排除的命名空间列表--exclude-resources stringArray字符串数组从恢复中排除的资源格式为resource.group如storageclasses.storage.k8s.io-h, --help—显示 restore 帮助信息--include-cluster-resources optionalBool[true]可选布尔默认 true是否在恢复中包含集群级cluster-scoped资源--include-namespaces stringArray字符串数组默认*要包含的命名空间*表示全部--include-resources stringArray字符串数组要包含的资源格式为resource.group*表示全部--label-columns stringArray字符串数组以逗号分隔的标签列表作为结果输出表格的列展示--labels mapStringString键值对 Map应用到 Restore 对象上的标签--namespace-mappings mapStringString键值对 Map命名空间映射格式src1:dst1,src2:dst2,...-o, --output string字符串默认table输出格式。对于 create 类命令仅展示对象而不提交到服务器合法值为table、json、yaml--restore-volumes optionalBool[true]可选布尔默认 true是否从快照恢复卷数据-l, --selector labelSelector标签选择器默认none仅恢复匹配该标签选择器的资源--show-labels布尔在输出表格的最后一列显示标签继承自父命令的通用参数--alsologtostderr 日志同时输出到 stderr 和文件 --kubeconfig string kubeconfig 文件路径未设置时依次尝试环境变量 KUBECONFIG 与集群内配置 --log_backtrace_at traceLocation 当日志命中 file:N 时输出堆栈跟踪默认 :0 --log_dir string 日志输出目录 --logtostderr 日志仅输出到 stderr -n, --namespace string 操作命名空间旧版默认 heptio-ark现版本默认 velero --stderrthreshold severity 达到或超过该级别的日志输出到 stderr默认 2 -v, --v Level V 日志级别 --vmodule moduleSpec 按 patternN 过滤文件的日志设置其中--kubeconfig的查找优先级与 v0.7.0 的 CLI 参考 README 描述一致命令行参数 $KUBECONFIG环境变量 集群内配置。参数类型背后的源码实现optionalBool三态布尔--include-cluster-resources、--restore-volumes等参数的类型是optionalBool即“可选布尔”三态未指定 / true / false定义于 pkg/cmd/util/flag/optional_bool.go。这使它们可以被直接写为--restore-volumes等价于--restore-volumestrue当前实现中通过f.NoOptDefVal cmd.TRUE支持这种无值简写见 create.go。三态设计的关键在于未显式指定时字段值为 nil从而把最终决策权交给服务端/控制器。例如RestorePVs、PreserveNodePorts、IncludeClusterResources均为*bool见 restore_types.go注释明确说明IncludeClusterResources为 null 时默认按 true 处理。这意味着 CLI 层不覆盖、由 restore 控制器决定默认行为避免客户端与服务器端默认值不一致。Map 与 StringArray解析规则--namespace-mappings使用flag.Map类型当前NewCreateOptions中专门配置为逗号分隔条目、冒号分隔键值WithEntryDelimiter(,).WithKeyValueDelimiter(:)见 create.go因此命令写作src1:dst1,src2:dst2而非默认的k1v1形式--labels使用默认分隔符的flag.Map即k1v1,k2v2解析器基于encoding/csv实现pkg/cmd/util/flag/map.go支持值中包含分隔符的引号包裹输入--include-namespaces、--include-resources等使用flag.StringArraypkg/cmd/util/flag/array.go可多次传入累加。这些 CLI 参数最终被映射为 Restore 对象的Spec字段IncludedNamespaces、ExcludedResources、NamespaceMapping、LabelSelector等逐一对应 pkg/apis/velero/v1/restore_types.go 中的 API 定义。输出格式与表格列控制--output、--label-columns、--show-labels由 pkg/cmd/util/output/output.go 的BindFlags统一注册。关键点在于create 类命令搭配-o json/yaml时命令只打印 Restore 对象而不真正提交到服务器输出标志帮助文本明确说明这一点。这对“先审查再执行”的自动化流程非常有用——你可以先用-o yaml生成清单检查无误后再实际执行。实战用法示例1. 全量恢复从备份backup-1恢复全部资源velero restore create --from-backup backup-1或显式指定恢复名称velero restore create restore-1 --from-backup backup-12. 按命名空间/资源过滤只恢复备份中的 PVC 与 PV不需要整库全量还原velero restore create --from-backup backup-2 \ --include-resources persistentvolumeclaims,persistentvolumes只恢复app命名空间同时排除logging命名空间与 Job 资源velero restore create --from-backup backup-3 \ --include-namespaces app \ --exclude-namespaces logging \ --exclude-resources jobs.batch3. 按标签选择器恢复只恢复备份中带appnginx标签的对象velero restore create --from-backup backup-4 --selector appnginx4. 命名空间迁移namespace-mappings将备份中的ns1恢复为新的命名空间ns2多组映射用逗号连接velero restore create --from-backup backup-5 \ --namespace-mappings ns1:ns2,old-app:new-app命名空间映射写入RestoreSpec.NamespaceMapping字段后恢复控制器会把源命名空间的对象重建到目标命名空间未被映射的命名空间仍按原名恢复见 restore_types.go。5. 从 Schedule 恢复最新备份velero restore create --from-schedule schedule-1底层实现中CLI 会用velero.io/schedule-name标签列出该 Schedule 产生的所有备份按StartTimestamp降序选出最新且状态为Completed或PartiallyFailed当指定--allow-partially-failed时的备份进行恢复。相关排序与选择逻辑见 create.go并有对应的单测TestMostRecentBackuppkg/cmd/cli/restore/create_test.go验证在混合Deleting/Completed/PartiallyFailed状态的备份中正确选出最新且状态合法的那个。6. 关闭卷快照恢复当只需恢复资源配置、不需要从快照还原持久卷数据时velero restore create --from-backup backup-6 --restore-volumesfalseRestorePVs为 false 时备份中 PV 对象仍会被处理但不会触发快照数据回填这对于“先恢复应用框架、再按需恢复数据”的分阶段演练场景很实用。7. 演练模式仅输出不提交velero restore create --from-backup backup-7 -o yaml velero restore create --from-backup backup-7 -o json配合-o table默认值可以直接看到 Restore 对象的摘要表格。命令执行链路从 CLI 到 Restore 对象从源码看velero restore create的完整执行链路分为四步create.goComplete解析位置参数若未提供恢复名则生成源名-时间戳同时建立访问 API Server 的 watch 客户端Validate校验--from-backup/--from-schedule二选一、标签选择器与或选择器互斥、策略参数取值合法existing-resource-policy仅接受none|updateexisting-volume-data-policy仅接受none|full|incremental、parallel-files-download非负并确认引用的 Backup 真实存在或 Schedule 下确有备份构造 Restore 对象将所有标志映射为api.RestoreSpec字段create.go包括卷恢复开关、节点端口保留、上传器配置稀疏文件、并行下载数、多余文件删除等Run如果指定了--wait-w则以 informer 监听同名 Restore 的更新事件直到状态进入Completed/PartiallyFailed/Failed/FailedValidation终态create.go否则立即返回并提示用velero restore describe/velero restore logs跟踪进度。提交成功后会打印类似Restore request restore-1 submitted successfully.的确认信息随后的实际恢复动作由服务端 restore 控制器异步完成。参数之间的联动与优先级提示include 与 exclude 同时使用同一维度命名空间或资源下--include-*是白名单、--exclude-*是黑名单exclude 优先--include-namespaces默认*即默认包含所有命名空间而--include-resources无默认值为空表示包含备份中的全部资源见 restore_types.go 的语义集群级资源默认随恢复包含include-cluster-resources[true]当你的目标集群与源集群不同、且存在同名但定义冲突的集群级对象时建议显式关闭或结合资源白名单精确控制标签列展示--label-columns app,version可在table输出中把指定标签渲染为独立列--show-labels则把所有标签合并到最后一列二者配合-o table便于快速浏览多个 Restore 的差异。验证依据与延伸阅读命令定义、参数绑定与执行链路pkg/cmd/cli/restore/create.goRestore 对象 API 规范Spec 字段语义pkg/apis/velero/v1/restore_types.go三态布尔 / Map / StringArray 参数实现pkg/cmd/util/flag/optional_bool.go、pkg/cmd/util/flag/map.go、pkg/cmd/util/flag/array.go输出格式与标签列注册pkg/cmd/util/output/output.go命令级单元测试含mostRecentBackup逻辑验证pkg/cmd/cli/restore/create_test.gov0.7.0 原版 CLI 文档与配套参考ark_create_restore.md、CLI 参考 README注意事项恢复前请确认目标 Backup 仍存在于对象存储中velero backup get可查看状态且对应的 VolumeSnapshotLocation 可访问否则--restore-volumes无法真正回填数据-o json/yaml只是“打印清单、不提交”适合在 CI/CD 或脚本中先渲染 Restore 清单做审计再通过kubectl apply或实际命令执行命名空间映射要求目标命名空间与源命名空间不冲突跨集群恢复时集群级资源CRD、Namespace 等的处理需结合--include-cluster-resources一并规划。【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考