news 2026/9/16 21:20:03

Velero `ark backup describe` 命令完全指南:深入解析备份描述、标签筛选与源码实现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Velero `ark backup describe` 命令完全指南:深入解析备份描述、标签筛选与源码实现

Veleroark backup describe命令完全指南:深入解析备份描述、标签筛选与源码实现

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

ark backup describe是 Ark(Velero 的前身,版本 v0.7.0 时代)提供的用于查看备份详细信息的 CLI 命令,它能够以人类可读的格式输出单个或多个 Backup 对象的完整配置与执行状态。本文以仓库中 ark_backup_describe.md 官方参考文档为核心,结合当前仓库中该命令的源码实现(describe.go)与输出格式化代码(backup_describer.go),完整讲解命令语法、全部参数、输出内容结构及底层实现原理,帮助读者精准定位备份执行情况、排查备份失败原因。

命令概览:用一条命令看懂一次备份的全貌

在 v0.7.0 版本中,Ark 同时提供ark backup describeark describe backups两种等价写法(两者的参考文档分别位于 ark_backup_describe.md 和 ark_describe_backups.md),它们都是对备份资源的"describe"操作。该命令归属于ark backup命令组(见 ark_backup.md),其定位是:将存储于 Kubernetes 集群中的 Backup 自定义资源,以格式化文本输出到终端,内容涵盖备份的元数据、资源筛选范围、存储位置、TTL、快照信息以及备份执行过程中的错误与警告。

该命令的 Synopsis 如下:

ark backup describe [NAME1] [NAME2] [NAME...] [flags]

命令接受一个或多个备份名称作为位置参数;若不提供任何名称,则默认列出(describe)当前命名空间下所有备份。

适用的环境说明

本文涉及的命令语法与参数以 v0.7.0 文档为准,当时 CLI 二进制名称为ark,默认命名空间为heptio-ark(见下文的-n, --namespace参数)。当前仓库已演进出velero命令与velero backup describe的现代形态,其实现代码(describe.go)可在当前仓库pkg/cmd/cli/backup/目录下找到,读者可以对照理解命令的演进脉络。

参数详解:Options 与全局继承参数

ark backup describe本身只定义了两个命令级参数,其余为从父命令继承的全局参数。

命令专属参数

参数简写类型说明
--help-h-显示 describe 命令的帮助信息
--selector-lstring仅展示匹配该 label selector 的备份项,例如-l app=nginx

这两个参数在当前仓库的现代实现中依然存在,见 describe.go:

c.Flags().StringVarP(&listOptions.LabelSelector, "selector", "l", listOptions.LabelSelector, "Only show items matching this label selector.")

从源码可见,--selector的取值会被解析为 Kubernetes label selector 并通过kbClient.List执行过滤:

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

因此,当不指定备份名称时,命令会列出命名空间下全部 Backup;配合--selector可以只查看打有特定标签的备份。注意--selector仅在未指定备份名称(即走列表分支)时生效;一旦在参数中给出备份名称,命令将逐个按名称精确读取(kbClient.Get)对应 Backup 对象。

Options inherited from parent commands(继承的全局参数)

这些参数由 Ark 根命令及日志框架(glog)提供,describe子命令会自动继承:

参数说明
--alsologtostderr同时将日志输出到标准错误和日志文件
--kubeconfig string用于连接 Kubernetes apiserver 的 kubeconfig 文件路径;若未设置,则尝试环境变量KUBECONFIG,以及集群内配置(in-cluster configuration)
--log_backtrace_at traceLocation当日志命中file:N位置时输出堆栈追踪(默认:0
--log_dir string若非空,将日志文件写入该目录
--logtostderr将日志输出到标准错误而非文件
-n, --namespace stringArk 操作的命名空间(默认"heptio-ark"),即 Backup 自定义资源所在命名空间
--stderrthreshold severity达到或超过该级别的日志输出到 stderr(默认2,即 ERROR)
-v, --v LevelV 日志的日志级别
--vmodule moduleSpecpattern=N的逗号分隔列表,进行文件级过滤日志

其中-n, --namespace是使用该命令时最需要留意的参数:v0.7.0 默认值为heptio-ark。如果备份创建在其它命名空间,必须显式指定-n <namespace>,否则命令将找不到备份对象(对应源码中f.Namespace()被用于kbClient.GetObjectKeykbClient.ListListOptions,见 describe.go)。

命令执行流程与底层实现

从当前仓库源码 describe.go 可以完整还原该命令的执行链路:

  1. 加载客户端配置client.LoadConfig()读取 CLI 配置文件(如 CA 证书路径caCertFile),失败时仅输出 WARNING 而不中断;
  2. 创建 controller-runtime 客户端:通过f.KubebuilderClient()获取用于读写 Backup 及关联 CRD 资源的客户端;
  3. 数据获取
    • 指定名称:逐个kbClient.Get读取 Backup 对象;
    • 未指定名称:kbClient.List列出全部 Backup(可结合--selector过滤);
    • 对每个 Backup 额外列出其关联的DeleteBackupRequest(删除请求)与PodVolumeBackup(Pod 卷备份,即文件系统级卷备份记录),用于在输出中展示"Deletion Attempts"与"Pod Volume Backups"部分(describe.go);
  4. 格式化输出:调用output.DescribeBackup生成人类可读文本;多个备份之间以空行分隔(describe.go)。

值得说明的是,v0.7.0 时代的实现较为朴素(通过 client-go 的 Backup 客户端 get/list),而当前仓库的现代实现改用了controller-runtime客户端并支持json结构化输出,但"按名称精确查询 + 按 selector 列表查询 + 关联资源汇总展示"的核心行为保持一致。

测试用例验证

仓库中的单元测试 describe_test.go 对该命令进行了端到端验证:测试构造了一个名为bk-describe-1的备份(builder.ForBackup(...).SnapshotVolumes(false)),通过 fake client 创建后执行命令,并断言输出中必须包含Backup Volumes:Or label selector: <none>以及Name: bk-describe-1等关键字段(describe_test.go)。这从测试层面印证了命令输出的真实结构与字段命名。

输出内容详解:describe 到底展示了什么

ark backup describe的输出由 backup_describer.go 中的DescribeBackup函数编排生成。虽然 v0.7.0 文档未给出输出样例,但结合该实现(以及上述测试断言)可以明确输出的完整结构:

1. 元数据与阶段(Metadata & Phase)

  • NameNamespace等对象元数据(d.DescribeMetadata(backup.ObjectMeta));
  • Phase:备份当前阶段,包括NewQueuedInProgressCompletedPartiallyFailedFailedDeleting等;其中失败类阶段以红色输出,Completed绿色输出(backup_describer.go)。若备份处于Failed/PartiallyFailed,还会附带提示(run 'velero backup logs <name>' for more information),指引用户进一步查看日志;
  • Queue position:当阶段为Queued时显示排队位置(backup.Status.QueuePosition)。

2. 校验错误(Validation errors)

backup.Status.ValidationErrors非空,将逐条以红色列出——这是排查备份创建失败(FailedValidation)的第一手信息。

3. 错误与警告统计

DescribeBackupResults读取备份执行结果(warnings / errors 计数),用于快速判断备份是否存在部分失败。

4. 备份规格(Spec)——完整展示配置快照

对应DescribeBackupSpec,逐项输出创建备份时的全部配置,包括:

  • Namespaces:Included / Excluded 命名空间列表(为空时 Included 显示*,Excluded 显示<none>);
  • Resources:Included / Excluded 资源列表,以及Cluster-scoped资源的包含策略(excluded / included / auto);
  • Label selectorOr label selector:备份的资源选择标签;
  • Storage Location:备份存储位置(BSL 名称);
  • Velero-Native Snapshot PVs:是否启用原生快照(false / true / auto);
  • File System Backup (Default):是否默认启用文件系统级备份(DefaultVolumesToFsBackup);
  • Snapshot Move DataData Mover:快照数据移动配置;
  • TTL:备份保留时长;
  • CSISnapshotTimeoutItemOperationTimeout:各类操作的超时设置;
  • Hooks:备份钩子(pre/post exec hook)的容器、命令、出错策略与超时;
  • OrderedResources:资源备份顺序(若配置)。

输出所有这些字段意味着:即使备份已经过期或对象被修改,describe也能还原其创建时的完整意图

5. 备份状态(Status)——执行结果与进度

对应DescribeBackupStatus,输出:

  • Backup Format Version:备份格式版本;
  • Started/Completed:开始与完成时间戳(未开始时显示<n/a>);
  • Expiration:过期时间(默认 30 天,控制器处理前可能显示<nil>);
  • Total items to be backed up/Items backed up:资源条目总数与已备份数(进行中显示"Estimated");
  • Backup Item Operations:异步操作的成功/失败计数;
  • HooksAttempted/HooksFailed:钩子尝试与失败次数。

6. 卷备份详情(Backup Volumes)

输出分为三类(对应 backup_describer.go 中的describeNativeSnapshotsdescribeCSISnapshotsdescribePodVolumeBackups):

  • Velero-Native Snapshots:原生云平台快照列表(无则显示<none included>);
  • CSI Snapshots:CSI 快照列表;
  • Pod Volume Backups:文件系统级卷备份(restic 等上传器),按CompletedFailedIn Progress等阶段分组统计,进行中的卷会附带传输百分比,已完成的卷会附带大小(size: X)。

7. 删除尝试(Deletion Attempts)

若存在DeleteBackupRequest,输出每次删除请求的时间戳与阶段(如Processed),失败次数会以(N failed)标注(DescribeDeleteBackupRequests)。

典型使用场景与示例

查看单个备份详情

ark backup describe my-backup -n heptio-ark

最常用形式:精确输出指定备份的全部规格与状态。当备份失败时,输出中的Phase: Failed(红色)与Validation errors能直接给出排查方向,同时命令还会提示执行ark backup logs my-backup查看详细日志。

同时查看多个备份

ark backup describe backup-a backup-b backup-c

位置参数可传多个名称,输出以空行分隔(现代实现中通过fmt.Printf("\n\n%s", s)实现,见 describe.go)。

按标签筛选批量查看

ark backup describe -l 'app in (nginx, wordpress)'

不带名称参数时列出命名空间下全部备份;-l/--selector支持 Kubernetes 标准标签选择器语法(如app=nginxtier in (frontend, backend)!deprecated),实现上由labels.Parse解析后交给kbClient.List(见 describe.go)。

指定 kubeconfig 与非默认命名空间

ark backup describe my-backup \ --kubeconfig /path/to/kubeconfig \ -n heptio-ark

进阶:从 v0.7.0 到当前版本的演进

对照 v0.7.0 文档与当前仓库实现,可以总结出以下演进点,便于读者在不同版本间切换使用:

  1. 命令更名arkveleroark backup describevelero backup describe
  2. 默认命名空间变化heptio-arkvelero
  3. 新增参数:现代版本新增了--details(展示更详细的卷/操作信息)、-o/--output json(仅对单个备份输出 JSON 结构化数据)、--cacert(自定义 CA 证书)与--insecure-skip-tls-verify(跳过对象存储 TLS 校验),定义见 describe.go;
  4. 数据来源演进:卷快照信息从对象存储下载(DownloadRequest)并区分原生快照、CSI 快照与数据移动(Data Movement)三种方式,v0.7.0 时代则主要依赖VolumeSnapshots状态;
  5. 输出能力增强:新增资源策略(Resource policies)、全局卷策略(Global volume policies)、上传器配置(Uploader config)等展示项。

小结

ark backup describe是 Ark 运维中最实用的"单点诊断"命令之一:它既能在备份失败时快速给出Phase、校验错误、错误/警告计数等第一手线索,也能完整还原备份的规格配置,帮助核对"备份到底按什么范围、什么策略执行的"。本文结合仓库源码 describe.go 与输出实现 backup_describer.go,对命令语法、全部参数及输出字段做了逐项说明;读者在实际排障时,建议将该命令与ark backup get(概览列表)、ark backup logs(详细日志)、ark backup download(下载备份文件)配合使用,形成完整的备份观测手段。若使用现代版本,将ark替换为velero并按上文"版本演进"一节调整参数即可获得相同的排查能力。

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

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/16 21:18:31

Simulink在混合交直流微电网仿真中的应用与实践

1. 微电网仿真入门&#xff1a;为什么选择Simulink&#xff1f;十年前我第一次接触微电网仿真时&#xff0c;面对各种专业软件眼花缭乱。直到发现Simulink这个神器&#xff0c;才真正找到了工程师的"瑞士军刀"。不同于其他专业电力仿真软件需要复杂的参数设置&#x…

作者头像 李华
网站建设 2026/9/16 21:17:57

ODS架构实战:手把手构建Agent调度-决策-技能三层骨架

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/16 21:16:46

Wi-Fi NDP Sounding机制:波束成形、CSI反馈与性能调优全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/16 21:14:41

x5sec滑块逆向实战:slidedata参数分析与自动化过码方案设计

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/16 21:12:12

Openship服务器SSH连接排障:端口、密钥与host通道诊断

Openship服务器SSH连接排障&#xff1a;端口、密钥与host通道诊断 【免费下载链接】openship Self-hosted deployment platform 项目地址: https://gitcode.com/GitHub_Trending/ope/openship Openship 是一个自托管部署平台&#xff08;Self-hosted deployment platfor…

作者头像 李华