Velero(Ark)`backup get` 命令完全指南:查询备份、状态解析与输出控制
2026/9/16 11:27:34 网站建设 项目流程

Velero(Ark)backup get命令完全指南:查询备份、状态解析与输出控制

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

本文围绕 Velero 项目 v0.3.0 时代 CLI 参考文档中的ark backup get命令展开,讲解如何列出与查询 Kubernetes 集群中的备份(Backup)资源、按标签筛选、按需扩展输出列以及切换 table/json/yaml 输出格式。读者读完可以掌握该命令全部选项的语义与默认行为,并能从源码层面理解每一列数据的来源,直接用于日常备份运维与脚本化集成。

说明:v0.3.0 时代 CLI 名为ark(对应文档位于 ark_backup_get.md)。后续版本中命令更名为velero backup get,但命令语义、选项与实现逻辑在 pkg/cmd/cli/backup/get.go 中持续沿用,本文以当前仓库源码为准展开说明。

命令概述:ark backup get

ark backup get用于获取(列出)Velero 管理的备份资源。其 Synopsis 与基本用法为:

ark backup get
  • 不带任何参数时,列出当前命名空间(默认velero)下所有备份;
  • 传入一个或多个备份名称时,仅查询并显示这些指定备份的详情。

在命令行中,getark backup的子命令(完整的备份子命令集合见 ark_backup.md),顶层命令ark负责统一接入 kubeconfig、日志等全局参数(见 ark.md)。

查询行为与源码实现

从当前仓库源码 pkg/cmd/cli/backup/get.go 可以看到get命令的核心执行逻辑分为两条路径:

backups := new(api.BackupList) if len(args) > 0 { // 按名称逐个获取 for _, name := range args { backup := new(api.Backup) err := kbClient.Get(context.TODO(), kbclient.ObjectKey{Namespace: f.Namespace(), Name: name}, backup) cmd.CheckError(err) backups.Items = append(backups.Items, *backup) } } else { // 列出所有备份,支持标签选择器 parsedSelector, err := labels.Parse(listOptions.LabelSelector) cmd.CheckError(err) err = kbClient.List(context.TODO(), backups, &kbclient.ListOptions{ LabelSelector: parsedSelector, Namespace: f.Namespace(), }) cmd.CheckError(err) }
  • 按名称查询:把命令行参数中的每个备份名拼成{Namespace, Name}对象,调用 controller-runtime 的Get从 Kubernetes API Server 逐个读取;多个名称之间是独立的,最终汇总为一个列表输出。
  • 列出全部:不传名称时,把--selector解析为 Kubernetes 标签选择器后调用List,配合--selector即可实现按标签过滤。

两条路径都限定在f.Namespace()(即 Velero 自身所在的命名空间,通常为velero),意味着backup get只能查询 Velero 部署命名空间内的备份资源。该命令还通过c.ValidArgsFunction = cli.CompleteBackupNames(f)注册了备份名的自动补全函数,交互式 Shell 下可以按 Tab 补全备份名称。

命令执行前会调用output.ValidateFlags对输出相关标志进行校验(见下文“输出格式”一节),校验失败时命令直接报错退出。

源码测试验证

仓库中的 get_test.go 使用 fake client 验证了该命令的两条核心路径:

  • 创建b1b2b3三个带标签abc=abc的备份后,执行velero backup get b1 b2 b3,断言输出中每个备份名各出现一次(按名称查询路径);
  • 再次执行带-l abc=abcvelero backup get,断言通过标签选择器筛选出的结果同样包含全部三个备份(标签过滤路径)。

该测试同时印证了get命令的 Short 描述为 "Get backups",与文档一致。

选项详解

-l, --selector string

只显示匹配该标签选择器的备份。该值被解析为 Kubernetes 标准labels.Selector后传给List请求(见 get.go)。典型用法:

ark backup get -l app=nginx ark backup get -l 'app in (nginx,redis)'

选择器语法与kubectl get --selector完全一致:支持===!=innotinexists等集合操作。该参数只作用于“不传名称、批量列出”的场景;一旦显式指定了备份名称,--selector不会参与过滤(从源码分支结构可以推断)。

--label-columns stringArray

以逗号分隔的标签键列表,把这些标签作为独立的表格列展示。用法:

ark backup get --label-columns=app,env

对应源码 output.go 中的BindFlags:该标志被定义为flag.NewStringArray(),因此既支持逗号分隔(--label-columns=a,b),也支持多次传入(--label-columns=a --label-columns=b)。标签名区分大小写,未设置对应标签的备份在该列显示为空。

-o, --output string

输出显示格式,默认值为table。文档说明其合法取值为tablejsonyaml;对于 create 类命令,-o表示“仅显示对象而不真正提交到服务端”。源码 output.go 中的校验逻辑明确:取值只能是tablejsonyaml(空值表示跳过打印),其它值一律报错:

invalid output format "xxx" - valid values are 'table', 'json', and 'yaml'

--show-labels

在表格的最后一列追加展示该备份的全部标签,未设置标签时显示<none>。该开关通过printers.PrintOptions.ShowLabels传入 Kubernetes 表格打印器(见 output.go)。

三个选项的协同

--label-columns--show-labels-o三个标志由统一的output.BindFlags绑定(见 get.go),它们共同决定表格的展示维度:

ark backup get --show-labels --label-columns=app,env -o table

从父命令继承的全局选项

以下选项在ark根命令上定义,backup get会自动继承,用于控制 kubeconfig 连接与日志行为:

选项说明
--kubeconfig string连接 Kubernetes API Server 使用的 kubeconfig 路径;未设置时依次尝试环境变量KUBECONFIG与集群内配置(in-cluster config)
--alsologtostderr除了写日志文件外,同时输出日志到标准错误
--log_backtrace_at traceLocation当日志命中file:N时输出堆栈跟踪(默认:0,即不触发)
--log_dir string非空时,将日志文件写入该目录
--logtostderr将日志输出到标准错误而非文件
--stderrthreshold severity达到或超过该级别的日志进入 stderr(默认2,即 ERROR)
-v, --v Level设置 V 级别日志的详细程度
--vmodule moduleSpecpattern=N的逗号分隔列表,对特定文件做日志级别过滤

这些继承参数与根命令 ark.md 中的定义一一对应,是 Velero CLI 所有子命令共享的日志与连接基础设施。

table 输出格式:九列数据的含义

默认的table输出由 backup_printer.go 定义,列定义见其中的backupColumns

Name Status Errors Warnings Created Expires Storage Location Queue Position Selector

各列数据在printBackup函数中逐项填充,含义如下:

数据来源说明
Namebackup.Name备份名称
Statusbackup.Status.Phase备份当前阶段,见下文“阶段解析”;对象正在被删除时显示Deleting
Errorsbackup.Status.Errors备份过程中产生的错误计数
Warningsbackup.Status.Warnings备份过程中产生的警告计数
Createdbackup.Status.StartTimestamp备份实际开始时间;尚未开始(如停留在 New 阶段)时显示n/a
Expiresbackup.Status.Expiration或由StartTimestamp + TTL推算相对当前时间的剩余有效期;过期后显示xx ago,无过期时间显示n/a
Storage Locationbackup.Spec.StorageLocation该备份使用的存储位置
Queue Positionbackup.Status.QueuePosition备份在队列中的位置;为 0(不在队列)时显示为空
Selectorbackup.Spec.LabelSelector备份声明要包含的资源标签选择器

值得注意的实现细节:

  • 排序printBackupList先调用sortBackupsByPrefixAndTimestamp排序:默认按名称字典序;如果多个备份名来自同一调度且带 14 位时间戳后缀(如schedule-20240915120000),则同一前缀内按时间戳从新到旧排列(见 backup_printer.go)。
  • 过期时间推算:若Status.Expiration尚未生成,源码只在“备份已经开始(StartTimestamp非空)且 TTL 大于 0”时用StartTimestamp + TTL估算过期时间,避免把停滞在 New 阶段的备份误判为已过期。
  • 空阶段处理:阶段为空时按New处理。

备份阶段(Status)枚举

Status列的取值定义于 backup_types.go(BackupPhase*常量),完整枚举如下:

阶段含义
New刚创建,尚未被控制器处理
Queued已入队等待执行
ReadyToStart已就绪,等待启动
FailedValidation参数校验失败,备份不会执行
InProgress备份执行中
WaitingForPluginOperations等待插件异步操作完成
WaitingForPluginOperationsPartiallyFailed插件操作部分失败,等待其余完成
Finalizing收尾阶段
FinalizingPartiallyFailed收尾阶段部分失败
Completed备份成功完成
PartiallyFailed备份完成但存在部分失败(如某些资源失败)
Failed备份失败
Deleting删除中

在 v0.3.0 时代,阶段集合相对精简(New、InProgress、Completed、Failed、Deleting 等);上述列表为当前仓库完整枚举,可作为查询状态时的参考全集。

json / yaml 输出:面向脚本与排查

-o json-o yaml通过 output.go 的printEncoded实现:直接序列化Backup/BackupList对象。一个细节是:当对象是列表但只包含 1 个条目时,会直接打印该单个对象而不是外层列表,便于脚本解析。

ark backup get -o json # 所有备份的 JSON ark backup get my-backup -o yaml # 单个备份的 YAML,含完整 Spec 与 Status

json/yaml 输出包含完整资源字段(metadataspecstatus),是排查备份详情(如status.phasestatus.errorsstatus.warningsspec.ttlspec.storageLocation等)和接入自动化脚本的首选方式。

典型使用场景

1. 查看当前所有备份的状态

ark backup get

重点关注StatusErrorsWarnings三列:CompletedErrors=0说明备份成功;出现PartiallyFailedFailed时结合Errors/Warnings数量判断严重程度。

2. 按标签筛选备份

ark backup get -l env=prod ark backup get --label-columns=env,app

第一条只显示env=prod的备份;第二条把envapp两个标签展示为独立列,方便批量比对不同环境的备份覆盖情况。

3. 深入排查单个备份

ark backup get my-backup -o yaml ark backup get my-backup -o json

获取完整 Spec 与 Status 后,可核对 TTL、存储位置、资源过滤器(LabelSelector)以及详细的错误/警告统计。

4. 脚本化轮询备份完成状态

ark backup get my-backup -o jsonpath='{.status.phase}'

在支持该输出格式的环境下,可用 jsonpath 提取阶段字段做轮询判断;否则可退化为-o json配合jq解析,例如:

ark backup get -o json | jq -r '.items[] | select(.status.phase=="Failed") | .metadata.name'

相关命令与延伸阅读

backup get只是备份管理命令族的一员,配套子命令还包括:

  • ark backup create:创建备份;
  • ark backup:备份命令族入口;
  • 恢复与调度查询:ark restore getark schedule get使用相同的查询与输出框架(对应源码 pkg/cmd/cli/restore/get.go、pkg/cmd/cli/schedule/get.go)。

若需了解备份对象的完整字段定义(含BackupSpecBackupStatus及各阶段常量),可深入阅读 backup_types.go;输出与打印层的通用实现(BindFlagsValidateFlagsPrintWithFormat、表格打印)集中在 output.go。

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

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

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

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

立即咨询