Velero v0.5.0 中 ark restore 命令组解析:恢复工作流的 CLI 参考与源码印证
2026/9/16 16:18:51 网站建设 项目流程

Velero v0.5.0 中 ark restore 命令组解析:恢复工作流的 CLI 参考与源码印证

【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero

Velero 前身 Heptio Ark 的 v0.5.0 版 CLI 参考文档将ark restore定位为 “Work with restores”——恢复操作命令组的入口。本文以该命令组为主线,完整梳理其子命令结构(create / get / logs / delete)、全部可继承的全局日志参数,以及 v0.5.0 版restore create的每个筛选参数的语义;并结合当前仓库pkg/cmd/cli/restore目录下的源码,印证这些参数是如何被解析、组装成 Restore 资源对象、以及如何触发等待与结果输出的,帮助读者既能按 v0.5.0 文档直接操作,又能理解命令背后的执行链路。

一、ark restore 命令组在 CLI 中的位置

根据 ark_restore.md 的记载,ark restore是一个纯分组命令(group command):

Synopsis Work with restores Options -h, --help help for restore

它自身不执行动作,只承载四个子命令(文档 SEE ALSO 一节列出的全部内容):

子命令作用对应参考文档
ark restore create基于某个备份创建一次恢复ark_restore_create.md
ark restore get列出恢复请求ark_restore_get.md
ark restore logs查看某次恢复的日志ark_restore_logs.md
ark restore delete删除恢复请求ark_restore_delete.md

这一组织结构在当前仓库源码中依然成立。restore.go 中NewCommand函数注册了完整的子命令集合:

c := &cobra.Command{ Use: "restore", Short: "Work with restores", Long: "Work with restores", } c.AddCommand( NewCreateCommand(f, "create"), NewGetCommand(f, "get"), NewLogsCommand(f), NewDescribeCommand(f, "describe"), NewDeleteCommand(f, "delete"), )

可以看到,当前版本在 v0.5.0 文档所列四个子命令之外新增了restore describe;同时项目已由 Heptio Ark 更名为 Velero,对应的命令从ark restore ...演进为velero restore ...(见 README 对项目的定义:备份与迁移 Kubernetes 应用及其持久卷)。下文以 v0.5.0 文档为基准讲解参数,源码部分以当前仓库实现为准。

二、v0.5.0 版 ark restore create 的参数全集

ark_restore_create.md 给出的用法与参数是理解恢复粒度控制的核心。命令形态为:

ark restore create BACKUP [flags]

其中BACKUP为位置参数,指定要恢复的备份名。全部选项按语义可分为三类:

1. 命名空间与资源筛选

参数类型默认值说明
--include-namespacesstringArray*要纳入恢复的命名空间,*表示全部
--exclude-namespacesstringArray要排除的命名空间
--include-resourcesstringArray要纳入的资源类型,格式为resource.group,如storageclasses.storage.k8s.io*表示全部
--exclude-resourcesstringArray要排除的资源类型,格式同上
--include-cluster-resourcesoptionalBooltrue是否包含集群级资源
-l, --selectorlabelSelector<none>仅恢复匹配该标签选择器的资源

2. 恢复行为控制

参数类型默认值说明
--restore-volumesoptionalBooltrue是否从快照恢复卷
--namespace-mappingsmapStringString备份命名空间到恢复目标命名空间的映射,形如src1:dst1,src2:dst2

3. 输出与展示

参数类型说明
-o, --outputstring显示格式;对 create 命令仅显示对象而不提交到服务端,支持tablejsonyaml
--labelsmapStringString应用到恢复请求上的标签
--label-columnsstringArray以列展示的标签(逗号分隔)
--show-labelsbool在最后一列展示标签

从源码结构看,这些参数的设计动机在 create.go 中得到了延续:BindFlags函数用 pflag 逐一注册筛选与行为开关,例如--include-namespaces的默认值同样是*(见 create.go 中IncludeNamespaces: flag.NewStringArray("*")),--restore-volumes等可选布尔型参数通过f.NoOptDefVal = cmd.TRUE允许直接写--restore-volumes而省略=true--output对 create 命令 “显示但不提交” 的行为由output.BindFlags与 Run 流程中的 PrintWithFormat 实现——若设置了-o,对象打印后即返回,不会调用client.Create提交。

一个值得注意的演进点:v0.5.0 时代源备份以位置参数BACKUP传入,而当前源码已改为--from-backup/--from-schedule两个互斥标志(Validate 中的校验逻辑 要求二者必须且只能指定其一),并新增了--from-schedule支持“从调度计划生成的最新一次成功备份恢复”。

三、全局继承选项:CLI 的日志与集群凭据体系

ark_restore.md 的 “Options inherited from parent commands” 一节列出了restore组下所有子命令共享的八个继承选项:

--alsologtostderr log to standard error as well as files --kubeconfig string Path to the kubeconfig file to use to talk to the Kubernetes apiserver. If unset, try the environment variable KUBECONFIG, as well as in-cluster configuration --log_backtrace_at traceLocation when logging hits line file:N, emit a stack trace (default :0) --log_dir string If non-empty, write log files in this directory --logtostderr log to standard error instead of files --stderrthreshold severity logs at or above this threshold go to stderr (default 2) -v, --v Level log level for V logs --vmodule moduleSpec comma-separated list of pattern=N settings for file-filtered logging

这些是典型的 glog 风格日志开关,继承自根命令ark(见 ark.md 中完全一致的选项列表)。其中与恢复操作直接相关的是:

  • --kubeconfig:指向 kubeconfig 文件的路径。按 CLI 参考 README 的说明,客户端查找集群凭据的顺序为:--kubeconfig命令行标志 →$KUBECONFIG环境变量 → 集群内凭据(仅在 Pod 内运行时生效)。
  • -v, --v:V 级日志级别,排查恢复流程卡住时可提高该值获取更详细的客户端侧日志。
  • --logtostderr/--alsologtostderr:把日志输出到 stderr,便于将 CLI 输出重定向到文件或管道。

README 同时推荐通过容器化方式运行客户端,并给出了 v0.5.0 时代的 ark 别名示例(挂载$KUBECONFIG目录进容器),这也解释了--kubeconfig默认指向容器内路径的原因。

四、restore logs:定位恢复失败的入口

ark_restore_logs.md 记载的用法为:

ark restore logs RESTORE [flags]

可选参数只有一个:

-h, --help help for logs --timeout duration how long to wait to receive logs (default 1m0s)

--timeout的默认值 1 分钟意味着:如果恢复进程在 1 分钟内还没有向日志机制写入任何可拉取的输出(例如恢复 Pod 尚未启动、镜像拉取缓慢),客户端会超时返回。这是排障时的常用组合——先ark restore get查看恢复请求的 phase,再对处于 Failed / PartiallyFailed 状态的恢复执行ark restore logs获取服务端日志。

五、从命令行参数到 Restore 资源:create 的实现链路

v0.5.0 文档描述的是参数形态;当前仓库的 create.go 则展示了这些参数最终如何落地为一个 Kubernetes 自定义资源。

1. 恢复名与来源校验(Complete / Validate)

  • 若未显式给出恢复名,Complete会按<源名>-<时间戳>规则生成(v0.5.0 时代基于备份名,当前源码中优先取 backup 名,否则取 schedule 名,见 create.go)。
  • Validate通过 label selectorapi.ScheduleNameLabel列出该调度计划下的全部备份,若一个都找不到则直接报错No backups found for the schedule %s(create.go),把“计划不存在”这类错误前移到了客户端侧。

2. 参数到 RestoreSpec 的映射

Run 函数 将筛选与行为参数逐项写入api.Restore.SpecIncludedNamespaces/ExcludedNamespaces/IncludedResources/ExcludedResources/NamespaceMapping/RestorePVs/PreserveNodePorts/IncludeClusterResources等字段与 v0.5.0 文档中的--include-namespaces--restore-volumes--include-cluster-resources一一对应。当前版本还额外支持--existing-resource-policy(仅接受noneupdate,校验见 Validate)与--existing-volume-data-policynonefullincremental),用于控制目标集群已存在同名资源/卷时的恢复策略。

3. 提交与等待

客户端最终调用o.client.Create将 Restore 对象写入集群(create.go),随后根据是否--wait分两种输出路径:

  • 非等待模式:提示Run 'velero restore describe <name>' or 'velero restore logs <name>' for more details(create.go)——这正是 v0.5.0 文档中 create 与 get / logs / describe 子命令形成闭环的原因。
  • 等待模式(-w):基于 SharedInformer watch 该 Restore 对象,每秒打印一个.表示进度,直到 phase 进入终态之一(FailedValidationCompletedPartiallyFailedFailed)才退出,并提示可用restore describerestore logs查看详情(create.go)。

4. from-schedule 的选备逻辑

--from-schedule--allow-partially-failed同时给出时,mostRecentBackup 会先把该计划下的备份按Status.StartTimestamp降序排序,再取第一个 phase 属于允许集合(Completed / PartiallyFailed)的备份,把恢复直接锁定到该具体备份,而不是让服务端去猜。这一细节解释了为什么“从计划恢复”在部分失败场景下仍然可靠。

六、典型操作流(按 v0.5.0 文档语义)

综合上述参数,一次最小化恢复操作的完整闭环是:

# 1. 创建恢复(v0.5.0 语法):只恢复指定备份中 prod-ns 命名空间内的资源,并恢复卷 ark restore create backup-1 \ --include-namespaces prod-ns \ --include-cluster-resources=true \ --restore-volumes=true \ --labels purpose=disaster-recovery # 2. 查看恢复请求状态 ark restore get # 3. 获取恢复日志(默认 1 分钟超时) ark restore logs <RESTORE_NAME> --timeout 2m

在当前仓库对应的版本中,等价写法变为velero restore create --from-backup backup-1 --include-namespaces prod-ns -w,并可直接用velero restore describe查看结构化详情。参数语义(命名空间/资源筛选、卷恢复开关、标签)在两个版本间保持一致,迁移旧脚本时主要改动点在于“位置参数 BACKUP →--from-backup标志”与命令名ark → velero

七、小结与延伸阅读

  • v0.5.0 的ark restore组是典型的 “create 提交 + get 观察 + logs 排障 + delete 清理” 四件套,其继承的 glog 日志选项与 kubeconfig 凭据解析规则适用于整个 CLI。
  • 当前仓库 pkg/cmd/cli/restore 目录(含create.goget.gologs.godescribe.godelete.go及对应_test.go)是上述行为的权威实现来源,配套测试文件可用来验证参数校验逻辑。
  • 相关文档:CLI 参考总览、ark 根命令、restore create、restore logs。

【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询