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-namespaces | stringArray | * | 要纳入恢复的命名空间,*表示全部 |
--exclude-namespaces | stringArray | 无 | 要排除的命名空间 |
--include-resources | stringArray | 无 | 要纳入的资源类型,格式为resource.group,如storageclasses.storage.k8s.io,*表示全部 |
--exclude-resources | stringArray | 无 | 要排除的资源类型,格式同上 |
--include-cluster-resources | optionalBool | true | 是否包含集群级资源 |
-l, --selector | labelSelector | <none> | 仅恢复匹配该标签选择器的资源 |
2. 恢复行为控制
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
--restore-volumes | optionalBool | true | 是否从快照恢复卷 |
--namespace-mappings | mapStringString | 无 | 备份命名空间到恢复目标命名空间的映射,形如src1:dst1,src2:dst2 |
3. 输出与展示
| 参数 | 类型 | 说明 |
|---|---|---|
-o, --output | string | 显示格式;对 create 命令仅显示对象而不提交到服务端,支持table、json、yaml |
--labels | mapStringString | 应用到恢复请求上的标签 |
--label-columns | stringArray | 以列展示的标签(逗号分隔) |
--show-labels | bool | 在最后一列展示标签 |
从源码结构看,这些参数的设计动机在 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.Spec:IncludedNamespaces/ExcludedNamespaces/IncludedResources/ExcludedResources/NamespaceMapping/RestorePVs/PreserveNodePorts/IncludeClusterResources等字段与 v0.5.0 文档中的--include-namespaces、--restore-volumes、--include-cluster-resources一一对应。当前版本还额外支持--existing-resource-policy(仅接受none、update,校验见 Validate)与--existing-volume-data-policy(none、full、incremental),用于控制目标集群已存在同名资源/卷时的恢复策略。
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 进入终态之一(FailedValidation、Completed、PartiallyFailed、Failed)才退出,并提示可用restore describe与restore 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.go、get.go、logs.go、describe.go、delete.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),仅供参考