Ark/Velero `backup describe` 命令详解:Kubernetes 备份详情的 CLI 参考与实践
2026/9/17 20:49:15 网站建设 项目流程

Ark/Velerobackup describe命令详解:Kubernetes 备份详情的 CLI 参考与实践

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

backup describe是 Velero(前身 Heptio Ark)命令行工具中用于查看备份详细信息的核心命令,它把备份对象(Backup CRD)的状态、资源范围、卷快照结果等一揽子信息以人类可读的文本形式呈现出来。本文以仓库内 v0.8.0 时代的 CLI 参考文档 为主体骨架,对照当前仓库中同名命令的源码实现,为你完整梳理该命令的语法、全部选项、输出内容构成以及它在整个备份命令族中的位置。读完本文,你将掌握如何用ark backup describe/velero backup describe快速定位一个备份的成败细节、过滤查找目标备份,并理解这些输出背后的数据来源。

一、命令概览:Ark 时代的备份描述命令

v0.8.0 时期该项目还被称为Heptio Ark,CLI 二进制与子命令均以ark命名。作为 ark 命令族中的一员,ark backup describe的功能定位非常明确——Describe backups(描述备份),即读取指定备份的完整信息并格式化输出。

版本提示:v0.8.0 文档中命令前缀为ark,默认命名空间为heptio-ark;项目随后更名为 Velero,命令前缀演变为velero,默认命名空间变为velero(见 pkg/install/resources.go 中的DefaultVeleroNamespace = "velero")。本文档讲解的历史命令形态,在语义上与当前velero backup describe一脉相承。

命令语法(Synopsis)

文档给出的完整语法如下:

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

要点解读:

  • 位置参数为备份名称:可以同时传入一个或多个备份名称([NAME1] [NAME2] [NAME...]),命令会逐个输出这些备份的描述信息;
  • 名称可省略:当不指定任何名称时,命令会对当前命名空间下全部备份执行描述输出(这在当前实现中由 label selector 配合列表查询完成,详见后文);
  • flags:通过命令行标志微调输出行为,见下文“选项详解”。

在命令族中的位置

ark backup describe隶属于ark backup子命令族。从 ark_backup.md 的 SEE ALSO 一节可以看到,v0.8.0 的 backup 命令族共包含六个子命令:

子命令功能
ark backup create创建一个备份
ark backup delete删除一个备份
ark backup describe描述备份(本文主题)
ark backup download下载一个备份
ark backup get获取备份列表
ark backup logs获取备份日志

在更上一层的 ark.md 中,Ark 被描述为“用于管理 Kubernetes 集群资源灾难恢复的工具”,并强调其操作模型与kubectl类似——例如ark get backupark backup get等价。这也解释了为何同时存在ark describe backups(见 ark_describe_backups.md)这样的并列用法。

二、选项详解:describe 专属标志与继承标志

describe 专属选项

文档列出的本命令专属选项有两个:

-h, --help help for describe -l, --selector string only show items matching this label selector
选项简写类型说明
--help-hbool打印 describe 命令的帮助信息
--selector-lstring只显示匹配该 label selector 的备份项

其中-l, --selector是 v0.8.0 文档中唯一可用的过滤手段。它的语义是:当不指定备份名称、而是希望批量查看备份时,可以用 Kubernetes 标签选择器(如app=myapp,env=prod)缩小范围,只描述符合条件的备份。

从父命令继承的全局选项

与所有 ark 子命令一样,ark backup describe还继承了父命令ark的全局选项。这些选项主要分为连接配置日志配置两类:

--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 --kubecontext string The context to use to talk to the Kubernetes apiserver. If unset defaults to whatever your current-context is (kubectl config current-context) --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 -n, --namespace string The namespace in which Ark should operate (default "heptio-ark") --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

逐项说明:

选项类别说明
--kubeconfig string连接指定用于访问 Kubernetes apiserver 的 kubeconfig 文件路径;若未设置,则依次尝试环境变量KUBECONFIG与集群内配置(in-cluster configuration)
--kubecontext string连接指定要与 apiserver 通信所用的 kubeconfig context;若未设置,则使用当前 context(即kubectl config current-context的输出)
-n, --namespace string连接Ark 操作的命名空间,v0.8.0 默认值为heptio-ark(对应 Velero 时代的默认命名空间velero
--alsologtostderr日志同时将日志写入标准错误和日志文件
--log_backtrace_at traceLocation日志当日志命中file:N位置时输出堆栈跟踪(默认:0
--log_dir string日志若非空,则将日志文件写入该目录
--logtostderr日志仅将日志输出到标准错误,不写文件
--stderrthreshold severity日志达到或超过该级别的日志输出到标准错误(默认 2,即 ERROR 级别)
-v, --v Level日志V 日志(verbosity)级别
--vmodule moduleSpec日志以逗号分隔的pattern=N列表,按文件过滤日志级别

这些继承选项对 describe 的实际意义在于:describe 需要从 Kubernetes apiserver 读取 Backup 对象,因此--kubeconfig--kubecontext--namespace直接决定了命令查询的是哪个集群、哪个命名空间下的备份

三、SEE ALSO:相邻参考文档

文档末尾的 SEE ALSO 仅指向一个上级命令:

  • ark backup —— Work with backups(备份相关操作的入口)

如需查看 backup 命令族中其他兄弟命令(create/delete/get/logs/download)的详细说明,可继续翻阅 cli-reference 目录 下的同名文档。

四、源码视角:现代backup describe是如何实现的

历史文档给出的是 v0.8.0 的命令形态,而当前仓库中该命令已演化为velero backup describe,其实现位于 pkg/cmd/cli/backup/describe.go,核心函数为NewDescribeCommand。对照阅读可以发现,命令的骨架与 v0.8.0 文档完全一致,但能力有了显著扩展。

1. 命令定义与参数解析

从源码结构看(describe.go),命令定义保留了[NAME1] [NAME2] [NAME...]的多名称位置参数形态,同时新增了若干标志:

标志简写默认值说明
--selector-l只显示匹配该 label selector 的备份项(v0.8.0 即存在)
--detailsfalse在输出中展示额外细节(如每个卷的 Snapshot ID、类型、可用区、IOPS 等)
--insecure-skip-tls-verifyfalse为 true 时不校验对象存储 TLS 证书,存在中间人攻击风险,不建议生产环境使用
--cacert读取客户端配置文件校验 TLS 连接时使用的证书 bundle 路径;未指定时若 BackupStorageLocation 提供 CA 证书则使用之
--output-oplaintext输出格式,合法值为plaintextjsonjson仅适用于单个备份

其中--output json的引入是为了支持结构化输出,但源码中明确限制:结构化输出只对单个备份生效(避免大列表下内存溢出),若要逐个查看多个备份的结构化信息,需要循环执行命令。这一点在 describe.go 的注释与分支逻辑中均有体现。

2. 数据获取路径:Get 与 List 两种模式

命令的执行逻辑(Run函数)清晰地分为两条路径:

  • 指定名称:对每个传入的名称,通过kbClient.GetNamespace + Name精确读取对应的Backup对象,追加到待输出列表;
  • 未指定名称:通过labels.Parse解析--selector,再经kbClient.List在指定命名空间下列出全部(或满足 selector 的)备份。

随后,对于每个备份,命令还会额外拉取两类关联对象并随主输出一并渲染:

  • DeleteBackupRequest列表:按backup-namebackup-uid两个标签过滤,用于展示“Deletion Attempts”(删除尝试记录);
  • PodVolumeBackup列表:按backup-name标签过滤,用于展示 Pod 卷文件系统备份(FS Backup)的明细。

这两次关联查询的标签构造在 describe.go 中实现,体现了 describe 输出“不只读一个 CRD、还要汇总关联状态”的设计。

3. 输出渲染:DescribeBackup 的区块化结构

文本输出的核心渲染函数是DescribeBackup,定义在 pkg/cmd/util/output/backup_describer.go。其输出从上到下大致分为以下区块:

  1. 元数据区:通过DescribeMetadata输出备份的名称、命名空间、标签、注解等,测试用例中验证的Name:行即来自此区;
  2. 阶段(Phase)区:输出备份当前阶段,并做颜色标记——Completed显示为绿色,FailedValidation/PartiallyFailed/Failed显示为红色;若备份失败,还会追加提示(run velero backup logs <name> for more information)引导用户查看日志(backup_describer.go);
  3. 资源策略区:若备份引用了资源策略(ResourcePolicy)或全局卷策略,会输出策略类型与名称;
  4. 校验错误区ValidationErrors非空时逐条以红色打印;
  5. 结果区DescribeBackupResults输出备份过程中的 errors 与 warnings 计数(含明细下载逻辑);
  6. 规格区DescribeBackupSpec完整罗列备份规格,包括 Included/Excluded Namespaces、Resources、Label selector、Storage Location、SnapshotVolumes、TTL、Hooks 等;
  7. 状态区DescribeBackupStatus输出开始/完成时间、过期时间、备份进度(Items backed up)、卷信息等;开启--details时还会额外输出 Resource List(资源清单)与逐卷的 Snapshot ID / Type / AZ / IOPS 等细节;
  8. 删除记录区:存在DeleteBackupRequest时,输出每次删除尝试的时间戳与状态(含失败错误信息)。

对于卷信息,describeBackupVolumes会把输出组织为Velero-Native SnapshotsCSI SnapshotsPod Volume Backups三组;未启用--details时只给出一行摘要并提示specify --details for more information,这正是该标志的实际作用点。

4. 测试用例佐证输出契约

仓库中的单元测试 pkg/cmd/cli/backup/describe_test.go 通过 fake client 构造一个名为bk-describe-1的备份并执行NewDescribeCommand,随后断言标准输出中包含以下关键片段:

  • Backup Volumes:(卷信息区块的标题)
  • Or label selector: <none>(标签选择器区块)
  • Name: bk-describe-1(元数据区块的备份名)

这组断言从测试层面锁定了 describe 命令的输出契约,也为我们解读真实命令输出提供了对照锚点:当你执行velero backup describe <name>时,输出中必然会出现上述区块。

五、实战使用示例

1. 描述单个备份

# Ark v0.8.0 时代 ark backup describe my-backup # 当前 Velero velero backup describe my-backup

输出将包含备份阶段(Phase)、命名空间/资源过滤范围、存储位置(Storage Location)、TTL、卷快照情况与失败/警告计数等。

2. 描述多个备份

velero backup describe backup-2024-01-01 backup-2024-01-02

多个备份的描述结果会以空行分隔依次打印(当前实现中多个备份之间使用\n\n分隔)。

3. 按标签筛选描述

# 只描述带 app=db 标签的备份(需备份创建时设置了该标签) velero backup describe -l app=db

4. 查看详细信息与结构化输出

# 展示卷级细节(Snapshot ID、类型、可用区、IOPS 等) velero backup describe my-backup --details # 单个备份的 JSON 结构化输出 velero backup describe my-backup -o json

5. 指定集群与命名空间

# 通过 kubeconfig 与 context 指定目标集群 velero backup describe my-backup --kubeconfig ~/.kube/config --kubecontext prod-cluster # 指定 Velero 所在命名空间(默认 velero) velero backup describe my-backup -n velero

六、小结

从 v0.8.0 的ark backup describe到当前的velero backup describe,该命令始终承担着“以人类可读形式呈现备份全貌”的职责。v0.8.0 文档确立了其核心语法(多名称位置参数 +-l/--selector过滤)与全局选项体系;现代实现则在其基础上补充了--details--output json--cacert等能力,并通过DescribeBackup把备份的元数据、阶段、规格、进度、卷快照与删除记录组织成结构清晰的分区输出。当备份失败或行为异常时,这条命令配合velero backup logs是排查问题的第一站。

进一步阅读:命令族总览见 ark_backup.md 与 ark.md;现代实现源码见 describe.go、backup_describer.go 与 describe_test.go。

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

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

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

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

立即咨询