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 describe与ark 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 | -l | string | 仅展示匹配该 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 string | Ark 操作的命名空间(默认"heptio-ark"),即 Backup 自定义资源所在命名空间 |
--stderrthreshold severity | 达到或超过该级别的日志输出到 stderr(默认2,即 ERROR) |
-v, --v Level | V 日志的日志级别 |
--vmodule moduleSpec | 按pattern=N的逗号分隔列表,进行文件级过滤日志 |
其中-n, --namespace是使用该命令时最需要留意的参数:v0.7.0 默认值为heptio-ark。如果备份创建在其它命名空间,必须显式指定-n <namespace>,否则命令将找不到备份对象(对应源码中f.Namespace()被用于kbClient.Get的ObjectKey与kbClient.List的ListOptions,见 describe.go)。
命令执行流程与底层实现
从当前仓库源码 describe.go 可以完整还原该命令的执行链路:
- 加载客户端配置:
client.LoadConfig()读取 CLI 配置文件(如 CA 证书路径caCertFile),失败时仅输出 WARNING 而不中断; - 创建 controller-runtime 客户端:通过
f.KubebuilderClient()获取用于读写 Backup 及关联 CRD 资源的客户端; - 数据获取:
- 指定名称:逐个
kbClient.Get读取 Backup 对象; - 未指定名称:
kbClient.List列出全部 Backup(可结合--selector过滤); - 对每个 Backup 额外列出其关联的
DeleteBackupRequest(删除请求)与PodVolumeBackup(Pod 卷备份,即文件系统级卷备份记录),用于在输出中展示"Deletion Attempts"与"Pod Volume Backups"部分(describe.go);
- 指定名称:逐个
- 格式化输出:调用
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)
Name、Namespace等对象元数据(d.DescribeMetadata(backup.ObjectMeta));Phase:备份当前阶段,包括New、Queued、InProgress、Completed、PartiallyFailed、Failed、Deleting等;其中失败类阶段以红色输出,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 selector与Or label selector:备份的资源选择标签;Storage Location:备份存储位置(BSL 名称);Velero-Native Snapshot PVs:是否启用原生快照(false / true / auto);File System Backup (Default):是否默认启用文件系统级备份(DefaultVolumesToFsBackup);Snapshot Move Data与Data Mover:快照数据移动配置;TTL:备份保留时长;CSISnapshotTimeout、ItemOperationTimeout:各类操作的超时设置;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 中的describeNativeSnapshots、describeCSISnapshots与describePodVolumeBackups):
- Velero-Native Snapshots:原生云平台快照列表(无则显示
<none included>); - CSI Snapshots:CSI 快照列表;
- Pod Volume Backups:文件系统级卷备份(restic 等上传器),按
Completed、Failed、In 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=nginx、tier 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 文档与当前仓库实现,可以总结出以下演进点,便于读者在不同版本间切换使用:
- 命令更名:
ark→velero,ark backup describe→velero backup describe; - 默认命名空间变化:
heptio-ark→velero; - 新增参数:现代版本新增了
--details(展示更详细的卷/操作信息)、-o/--output json(仅对单个备份输出 JSON 结构化数据)、--cacert(自定义 CA 证书)与--insecure-skip-tls-verify(跳过对象存储 TLS 校验),定义见 describe.go; - 数据来源演进:卷快照信息从对象存储下载(
DownloadRequest)并区分原生快照、CSI 快照与数据移动(Data Movement)三种方式,v0.7.0 时代则主要依赖VolumeSnapshots状态; - 输出能力增强:新增资源策略(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),仅供参考