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 backup与ark 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 | -h | bool | 打印 describe 命令的帮助信息 |
--selector | -l | string | 只显示匹配该 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 即存在) |
--details | 无 | false | 在输出中展示额外细节(如每个卷的 Snapshot ID、类型、可用区、IOPS 等) |
--insecure-skip-tls-verify | 无 | false | 为 true 时不校验对象存储 TLS 证书,存在中间人攻击风险,不建议生产环境使用 |
--cacert | 无 | 读取客户端配置文件 | 校验 TLS 连接时使用的证书 bundle 路径;未指定时若 BackupStorageLocation 提供 CA 证书则使用之 |
--output | -o | plaintext | 输出格式,合法值为plaintext与json;json仅适用于单个备份 |
其中--output json的引入是为了支持结构化输出,但源码中明确限制:结构化输出只对单个备份生效(避免大列表下内存溢出),若要逐个查看多个备份的结构化信息,需要循环执行命令。这一点在 describe.go 的注释与分支逻辑中均有体现。
2. 数据获取路径:Get 与 List 两种模式
命令的执行逻辑(Run函数)清晰地分为两条路径:
- 指定名称:对每个传入的名称,通过
kbClient.Get按Namespace + Name精确读取对应的Backup对象,追加到待输出列表; - 未指定名称:通过
labels.Parse解析--selector,再经kbClient.List在指定命名空间下列出全部(或满足 selector 的)备份。
随后,对于每个备份,命令还会额外拉取两类关联对象并随主输出一并渲染:
DeleteBackupRequest列表:按backup-name与backup-uid两个标签过滤,用于展示“Deletion Attempts”(删除尝试记录);PodVolumeBackup列表:按backup-name标签过滤,用于展示 Pod 卷文件系统备份(FS Backup)的明细。
这两次关联查询的标签构造在 describe.go 中实现,体现了 describe 输出“不只读一个 CRD、还要汇总关联状态”的设计。
3. 输出渲染:DescribeBackup 的区块化结构
文本输出的核心渲染函数是DescribeBackup,定义在 pkg/cmd/util/output/backup_describer.go。其输出从上到下大致分为以下区块:
- 元数据区:通过
DescribeMetadata输出备份的名称、命名空间、标签、注解等,测试用例中验证的Name:行即来自此区; - 阶段(Phase)区:输出备份当前阶段,并做颜色标记——
Completed显示为绿色,FailedValidation/PartiallyFailed/Failed显示为红色;若备份失败,还会追加提示(run velero backup logs <name> for more information)引导用户查看日志(backup_describer.go); - 资源策略区:若备份引用了资源策略(ResourcePolicy)或全局卷策略,会输出策略类型与名称;
- 校验错误区:
ValidationErrors非空时逐条以红色打印; - 结果区:
DescribeBackupResults输出备份过程中的 errors 与 warnings 计数(含明细下载逻辑); - 规格区:
DescribeBackupSpec完整罗列备份规格,包括 Included/Excluded Namespaces、Resources、Label selector、Storage Location、SnapshotVolumes、TTL、Hooks 等; - 状态区:
DescribeBackupStatus输出开始/完成时间、过期时间、备份进度(Items backed up)、卷信息等;开启--details时还会额外输出 Resource List(资源清单)与逐卷的 Snapshot ID / Type / AZ / IOPS 等细节; - 删除记录区:存在
DeleteBackupRequest时,输出每次删除尝试的时间戳与状态(含失败错误信息)。
对于卷信息,describeBackupVolumes会把输出组织为Velero-Native Snapshots、CSI Snapshots、Pod 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=db4. 查看详细信息与结构化输出
# 展示卷级细节(Snapshot ID、类型、可用区、IOPS 等) velero backup describe my-backup --details # 单个备份的 JSON 结构化输出 velero backup describe my-backup -o json5. 指定集群与命名空间
# 通过 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),仅供参考