Velero/Ark 实战:掌握 `ark get backups` 命令查看 Kubernetes 备份状态
2026/9/16 12:25:02 网站建设 项目流程

Velero/Ark 实战:掌握ark get backups命令查看 Kubernetes 备份状态

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

导读

ark get backups是 Velero 的前身 Ark(Heptio Ark)提供的一条核心查询命令,用于列出集群中已创建的备份(Backup)资源及其状态。本文以 v0.7.0 版本的官方 CLI 参考文档为主体,结合当前仓库中 Velero 的对应源码实现,完整讲解该命令的语法、全部参数含义、输出格式控制与标签筛选能力,并延伸到父命令级通用参数,帮助你像使用kubectl get一样熟练地查询、过滤和格式化备份信息。

命令背景:从 Ark 到 Velero

当前仓库是 Velero(原项目名 Heptio Ark,早期 CLI 名为ark),这是一个用于 Kubernetes 集群资源与应用数据备份恢复的开源工具。在 v0.7.0 时代,CLI 二进制名为ark;此后项目更名为 Velero,CLI 也变为velero,但命令结构与设计一脉相承。因此本参考文档中的ark get backups在现代 Velero 中对应的等价命令是velero backup get(也支持velero get backups的别名形式)。

从 v0.7.0 主命令文档 可以看到,Ark 的设计刻意模仿kubectl的交互模型:ark get backupark backup get两种写法都可用。理解这一点后,本文所有示例在 Velero 新版中只需将ark替换为velero即可。

命令语法与核心作用

ark get backups的完整语法如下:

ark get backups [flags]

执行该命令后,CLI 会向 Kubernetes apiserver 请求指定命名空间(默认heptio-ark)下的 Backup 自定义资源,并以人类可读的表格形式渲染输出。命令本身不接收位置参数(方括号中的[flags]表示只能带标志),但可以配合-l标签选择器实现资源过滤。

对应到当前仓库源码,该命令由 pkg/cmd/cli/get/get.go 注册为get父命令的子命令:

backupCommand := backup.NewGetCommand(f, "backups") backupCommand.Aliases = []string{"backup"}

NewGetCommand(f, "backups")创建了一个名为backups的子命令,并为其添加了backup别名——这正是文档中提到两种调用形式的实现来源。整个get命令族还包含schedulesrestoresbackup-locationssnapshot-locationsplugins等子命令,结构清晰一致。

命令专属参数详解

以下参数均定义在ark get backups自身的作用域内:

参数简写类型默认值说明
--help-hbool显示backups子命令的帮助信息
--label-columnsstringArray以逗号分隔的标签列表,这些标签将作为额外的表格列展示
--output-ostringtable输出格式,可选tablejsonyaml
--selector-lstring仅显示匹配该标签选择器的备份项
--show-labelsboolfalse在表格最后一列显示每个备份的标签

--selector:按标签筛选备份

-l参数接收 Kubernetes 标准的标签选择器表达式,例如:

# 查看带有 app=nginx 标签的备份 ark get backups -l app=nginx # 组合条件筛选 ark get backups -l 'app in (nginx,redis),env!=prod'

在源码 pkg/cmd/cli/backup/get.go 中,选择器通过labels.Parse解析后传给 controller-runtime 客户端,作为List调用的LabelSelector

parsedSelector, err := labels.Parse(listOptions.LabelSelector) cmd.CheckError(err) err = kbClient.List(context.TODO(), backups, &kbclient.ListOptions{ LabelSelector: parsedSelector, Namespace: f.Namespace(), })

值得留意的是,listOptions.LabelSelector是通过c.Flags().StringVarP(...)绑定到-l标志上的(见 pkg/cmd/cli/backup/get.go),筛选发生在服务端 List 请求层面,而非本地过滤。

--label-columns--show-labels:控制标签列

这两个参数协同工作,帮助你在表格中直接看到关键标签:

# 将 app 标签作为一列展示 ark get backups --label-columns app # 多个标签列,两种写法均可 ark get backups --label-columns app,env ark get backups -L app -L env # 或在表格最后一列聚合展示全部标签 ark get backups --show-labels

从 pkg/cmd/util/output/output.go 的BindFlags实现看,--label-columns底层是一个flag.NewStringArray()类型,天然支持逗号分隔与重复使用;--show-labels则是简单的布尔标志。它们最终被组装进 Kubernetes 标准打印器的PrintOptions(见 pkg/cmd/util/output/output.go):

options := printers.PrintOptions{ ShowLabels: GetShowLabelsValue(cmd), ColumnLabels: GetLabelColumnsValues(cmd), } printer := printers.NewTablePrinter(options)

--output:切换输出格式

-o参数控制结果的渲染方式,默认table提供人类可读的表格;需要程序化消费或精细查看对象字段时使用json/yaml

# 表格输出(默认) ark get backups # JSON 输出 ark get backups -o json # YAML 输出 ark get backups -o yaml

源码 pkg/cmd/util/output/output.go 中的validateOutputFlag会对该标志做严格校验,仅接受""tablejsonyaml四种取值,其他值会直接报错:

default: return errors.Errorf("invalid output format %q - valid values are 'table', 'json', and 'yaml'", output)

打印逻辑PrintWithFormat(见 pkg/cmd/util/output/output.go)按格式分派:tableprintTable生成表格;json/yamlprintEncoded做对象序列化。一个实现细节是:当 List 中恰好只有 1 个对象时,printEncoded会直接输出该对象本身而非包裹的列表(见 pkg/cmd/util/output/output.go),这与kubectl get的行为保持一致。

表格输出与排序规则

默认表格在 pkg/cmd/util/output/backup_printer.go 中定义,包含以下列:

Name Status Errors Warnings Created Expires Storage Location Queue Position Selector

各列含义如下:

  • Name:备份资源名称(对应 Backup CR 的 metadata.name);
  • Status:备份当前阶段,如InProgressCompletedFailed等;
  • Errors / Warnings:备份过程中的错误数与警告数;
  • Created:备份创建时间;
  • Expires:备份过期时间(由 TTL 决定);
  • Storage Location:该备份写入的 BackupStorageLocation 名称;
  • Queue Position:备份在队列中的位置(排队中的备份可见);
  • Selector:备份创建时指定的资源标签选择器。

关于排序,pkg/cmd/util/output/backup_printer.go 实现了一个巧妙的策略:默认按名称字典序排列;但如果备份名带有-[0-9]{14}(14 位数字时间戳)后缀——即由 Schedule 定时任务自动生成的备份——则同一前缀分组内按时间戳从新到旧排序,方便你一眼看到最新的定时备份。这一逻辑由正则timestampSuffix = regexp.MustCompile("-[0-9]{14}$")判定。

父命令级通用参数

以下参数由ark get乃至ark根命令继承而来,ark get backups同样可用,主要涉及集群连接与日志配置:

参数说明
--kubeconfig string指定连接 Kubernetes apiserver 所用的 kubeconfig 路径;未设置时依次尝试KUBECONFIG环境变量与集群内配置
-n, --namespace stringArk 操作的目标命名空间,默认heptio-ark(在 Velero 新版中默认为velero
--alsologtostderr日志同时输出到文件与标准错误
--logtostderr日志输出到标准错误而非文件
--log_dir string指定日志文件目录
--log_backtrace_at traceLocation当日志命中file:N时输出堆栈,默认:0
--stderrthreshold severity达到该级别及以上的日志进入 stderr,默认2(ERROR)
-v, --v LevelV 日志的详细程度级别
--vmodule moduleSpecpattern=N逗号分隔列表做文件过滤日志

实际使用中最常用的是-n--kubeconfig

# 查看指定命名空间下的备份 ark get backups -n my-namespace # 显式指定 kubeconfig ark get backups --kubeconfig /path/to/config

在 pkg/cmd/cli/backup/get.go 中,命名空间通过f.Namespace()从 Factory 获取,并用于Get/List请求的ObjectKeyListOptions.Namespace,与文档中的-n参数一一对应。

命令族关系与进阶路径

ark get backupsark get命令族的一员。从 ark get 文档 可见,同一族下还有:

  • ark get restores— 查询恢复任务;
  • ark get schedules— 查询定时备份计划;
  • ark get backup-locations/ark get snapshot-locations— 查询备份存储位置与快照位置;
  • ark get plugins— 查询已加载的插件。

这些子命令复用同一套-o/-l/--label-columns/--show-labels输出机制(见 pkg/cmd/cli/get/get.go),学习成本极低。对单个备份需要查看完整状态细节时,可进一步使用ark describe backups <name>;对备份内容进行逻辑处理或归档时,可用-o yaml导出完整对象。

源码验证与测试参考

以上行为均有仓库源码与测试可验证:

  • 命令注册与别名: pkg/cmd/cli/get/get.go;
  • 子命令实现(拉取与筛选逻辑): pkg/cmd/cli/backup/get.go;
  • 输出标志绑定与校验: pkg/cmd/util/output/output.go;
  • 表格列定义与排序: pkg/cmd/util/output/backup_printer.go;
  • 单元测试: pkg/cmd/cli/backup/get_test.go 创建了b1b2b3三个带abc=abc标签的假 Backup,分别验证按名称逐个获取与按-l abc=abc选择器批量获取两种路径的输出,可作为理解命令行为的直接证据。

小结

ark get backups是 Ark/Velero CLI 中查看备份状态的基础命令:默认以table呈现备份的名称、状态、错误/警告数、创建与过期时间、存储位置、队列位置等核心信息;通过-l可基于标签选择器精准筛选,通过-L/--show-labels可扩展标签列,通过-o可切换json/yaml格式用于脚本处理。结合父命令的-n--kubeconfig,你可以完全掌控备份资源的查询场景。在当前仓库中,上述全部能力均已演进至velero backup get,实践时仅需替换命令前缀即可。

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

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

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

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

立即咨询