ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

Velero `restore get` 命令详解:查询与筛选 Kubernetes 应用恢复任务

Velero `restore get` 命令详解:查询与筛选 Kubernetes 应用恢复任务 Velerorestore get命令详解查询与筛选 Kubernetes 应用恢复任务【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero本文以仓库中的命令参考文档 site/content/docs/v0.7.0/cli-reference/ark_restore_get.md 为骨架结合当前仓库中的 Go 源码与测试系统讲解 Velero 中用于列举和查询恢复Restore任务的restore get子命令。读者阅读本文后将掌握该命令的完整参数语义、默认输出列的含义、如何用标签与选择器精确筛选恢复任务以及如何切换到 JSON/YAML 输出做程序化消费。需要特别说明的是v0.7.0 时代该命令还叫ark restore get默认命名空间为heptio-ark随着项目更名如今命令为velero restore get默认命名空间为velero下文以现代命令名velero restore get为主线展开并在必要时标注历史差异。一、命令概览velero restore getvelero restore get用于获取列出或按名称查询当前命名空间下的恢复Restore对象。恢复对象是 Velero 从备份数据回放 Kubernetes 资源的执行单元通过velero restore create创建由服务端 restore controller 驱动执行。查询它的状态是运维人员判断一次数据恢复是否成功、是否出现错误或警告的第一入口。velero restore get [flags]命令本身不接收位置参数即可列出全部恢复也可以一次性传入一个或多个恢复名称进行精确查询例如# 列出全部恢复 velero restore get # 按名称精确查询多个恢复 velero restore get restore-20240101 restore-20240102从源码实现看pkg/cmd/cli/restore/get.go 的执行逻辑正是如此当传入args位置参数时逐个通过 controller-runtime 客户端按{namespace, name}查询单个 Restore 对象并拼装成列表未传参数时则解析--selector后执行列表查询。查询完成后代码还会检查每个 Restore 的DeletionTimestamp若对象正处于删除过程中会在状态相位后追加(Deleting)标记get.go#L63-L68避免用户把“正在删除的任务”误判为正常状态。对应地仓库中的单元测试 pkg/cmd/cli/restore/get_test.go 验证了该命令的核心行为向 fake client 依次创建名为b1、b2、b3的恢复对象后以b1 b2 b3作为位置参数执行NewGetCommand(f, velero restore get)断言执行无错误且输出中包含所有三个对象。这印证了“多名称查询 表格输出”是官方测试覆盖的标准路径。二、Options本命令专属参数velero restore get自身提供的参数如下语义与原文档一一对应参数简写类型默认值说明--help-h--显示get命令的帮助信息--label-columns-stringArray空逗号分隔的标签列表这些标签会作为额外的列展示在输出表格中--output-ostringtable输出显示格式可选table、json、yaml注意此处文档描述“For create commands, display the object but do not send it to the server”即该-o语义与 create 类命令一致但 get 命令只做读取展示--selector-lstring空仅显示匹配该标签选择器的恢复对象--show-labels-boolfalse在最后一列显示标签其中--label-columns与--show-labels均通过 pkg/cmd/util/output/output.go 中的BindFlags统一绑定到所有支持表格输出的 Velero 子命令上。--label-columns支持重复使用如-L label1 -L label2且标签名称大小写敏感实际渲染时由printers.NewTablePrinteroutput.go#L241-L250将ColumnLabels与ShowLabels注入表格列定义。2.1 用--selector精确筛选--selector复用 Kubernetes 标签选择器语法支持、、!以及集合运算in、notin、exists等。例如# 只显示带 environmentproduction 标签的恢复 velero restore get --selector environmentproduction # 组合条件排除测试环境且包含应用名 appweb 或 appdb velero restore get --selector environment!testing,app in (web,db)从源码看--selector的值被放入metav1.ListOptions.LabelSelector后经labels.Parse解析再作为client.ListOptions.LabelSelector传入 controller-runtime 客户端执行带标签过滤的列表查询get.go#L56-L60。该标签过滤发生在 Kubernetes API Server 侧而非客户端内存过滤因此对大规模恢复列表的查询效率更高。需要说明的是这里的“标签”指 Restore 对象自身的 metadata.labels例如通过velero restore create --labels或 kubectl 附加的标签与恢复内容中按资源标签筛选恢复范围RestoreSpec.LabelSelector是两个不同概念。后者用于控制“恢复哪些资源”前者用于“查询定位恢复任务本身”两者都定义在 pkg/apis/velero/v1/restore_types.go 中使用时不要混淆。2.2 输出格式--output/-o--output支持三种取值table默认、json、yaml。其中json与yaml输出的是 Restore 对象的完整序列化内容包括 spec 与 status适合脚本与自动化工具消费。从实现上看output.go#L113-L127 的PrintWithFormat在table模式下走表格渲染器在json/yaml模式下走编码器output.go#L129-L149 还包含一个细节如果查询结果列表里只有一个对象则直接输出该对象而不是包裹一层的列表便于脚本直接解析单个对象。# 以 YAML 形式查看恢复完整定义 velero restore get restore-20240101 -o yaml # 以 JSON 形式输出全部恢复便于 jq 处理 velero restore get -o json | jq .items[].status.phase若传入了非法格式如-o xmlValidateFlags会返回错误invalid output format xml - valid values are table, json, and yamloutput.go#L97-L108命令随即报错退出。2.3 自定义标签列与显示标签# 将 app 和 owner 两个标签作为独立列展示 velero restore get --label-columns app,owner # 使用多次 -L 的等价写法 velero restore get -L app -L owner # 在最后一列展示对象的全部标签 velero restore get --show-labels这两类输出定制能力均由 pkg/cmd/util/output/restore_printer.go 配合 Kubernetesprinters.NewTablePrinter的ColumnLabels/ShowLabels选项实现output.go#L241-L250与kubectl get的同类参数行为一致熟悉 kubectl 的用户可以无缝迁移。三、Options inherited from parent commands全局继承参数以下参数并非get独有而是继承自命令树的父级velero根命令在 site/content/docs/v0.7.0/cli-reference/ark_restore_get.md 中同样列出。它们控制客户端如何连接 Kubernetes API Server 以及日志行为参数类型默认值说明--alsologtostderrbool-同时将日志写入标准错误与日志文件--kubeconfigstring空kubeconfig 文件路径未设置时依次尝试环境变量KUBECONFIG与集群内配置--log_backtrace_attraceLocation:0当日志命中file:N时输出堆栈跟踪--log_dirstring空日志文件输出目录非空时启用文件日志--logtostderrbool-将日志写入标准错误而非文件--namespacestringheptio-arkv0.7.0/velero现行版本Ark/Velero 操作的命名空间即 Restore 对象所在的命名空间--stderrthresholdseverity2达到或超过该级别的日志转入标准错误--vLevel-V 日志的详细级别--vmodulemoduleSpec空按文件过滤的patternN日志级别配置逗号分隔其中--namespace是最常用的全局参数Velero 的 Restore、Backup 等 CRD 对象默认与 Velero 服务端同命名空间部署v0.7.0 默认heptio-ark如今默认velero。若服务端安装在非默认命名空间查询时必须显式指定# 在自定义命名空间 velero-staging 中列出恢复 velero restore get --namespace velero-staging从源码看命名空间最终通过f.Namespace()注入到单对象查询的ObjectKey与列表查询的ListOptions中get.go#L51、get.go#L59因此跨命名空间查询其他集群对象时务必带上正确的--namespace否则会得到空列表或 “not found” 错误。四、默认表格输出的列语义当未指定-o时velero restore get输出一张对齐的表格。表格列定义在 pkg/cmd/util/output/restore_printer.go 中每一行的单元格填充逻辑见 restore_printer.go#L51-L74。列及其数据来源如下列名数据来源说明Namerestore.Name恢复对象名称Backuprestore.Spec.BackupName该恢复基于的备份名称Statusrestore.Status.Phase恢复当前所处阶段为空时显示Newrestore_printer.go#L56-L59删除中会追加(Deleting)Startedrestore.Status.StartTimestamp恢复开始时间未设置时显示n/aCompletedrestore.Status.CompletionTimestamp恢复完成时间未设置时显示n/aErrorsrestore.Status.Errors恢复过程中的错误计数Warningsrestore.Status.Warnings恢复过程中的警告计数Createdrestore.CreationTimestamp.Time恢复对象创建时间Selectorrestore.Spec.LabelSelector恢复时用于筛选资源的标签选择器metav1.FormatLabelSelector格式化其中Started/Completed的占位符由 output.go#L252-L264 的formatTimestamp决定nil或零值时间戳渲染为n/a而不是 Go 默认的nil——例如一个未通过校验FailedValidation的恢复从未真正启动就不会有开始时间与完成时间。4.1 Status 相位的完整取值Status列展示的相位定义在 pkg/apis/velero/v1/restore_types.go 中当前版本包含以下取值New恢复对象已创建尚未开始执行FailedValidation恢复未通过校验如引用的备份不存在、参数非法InProgress恢复正在执行中WaitingForPluginOperations等待插件异步操作完成WaitingForPluginOperationsPartiallyFailed等待插件操作但已有部分失败Finalizing恢复进入收尾finalize阶段FinalizingPartiallyFailed收尾阶段已有部分失败Completed恢复成功执行完毕PartiallyFailed恢复执行到结束但存在部分失败Failed恢复未能执行。运维时可通过Status列快速判断Completed表示成功PartiallyFailed表示有警告类问题需要查看 Warnings 列或velero restore describe/logsFailed与FailedValidation则需要结合velero restore describe name的详细输出排查根因。五、典型使用场景与组合实战5.1 恢复后快速验收创建恢复后最常用的就是轮询velero restore get观察相位流转# 创建恢复基于备份 my-backup velero restore create --from-backup my-backup --name my-restore # 轮询查看状态直到 Completed / Failed velero restore get my-restoreNAME BACKUP STATUS STARTED COMPLETED ERRORS WARNINGS CREATED SELECTOR my-restore my-backup Completed 2026-09-16 01:00:00 0000 UTC 2026-09-16 01:03:12 0000 UTC 0 0 2026-09-16 00:59:58 0000 UTC none5.2 结合-o json与 jq 做自动化断言CI/CD 中可用-o json提取相位与错误计数做自动化判定# 提取相位 velero restore get my-restore -o json | jq -r .status.phase # 判断是否完全成功 [ $(velero restore get my-restore -o json | jq -r .status.phase) Completed ] \ [ $(velero restore get my-restore -o json | jq -r .status.errors) 0 ]5.3 大规模环境下的筛选当恢复对象数量很大时优先使用--selector在服务端过滤而不是全量拉取后本地处理# 只看生产环境的恢复 velero restore get -l environmentproduction # 只看最近标注了灾备演练用途的恢复 velero restore get -l dr-drilltrue --show-labels5.4 与其他 restore 子命令配合velero restore get隶属于velero restore命令族。从 pkg/cmd/cli/restore/restore.go 可以看出该命令族还包含create创建恢复、describe查看恢复详情、logs查看恢复日志、delete删除恢复。典型排查链路为get定位问题恢复 →describe查看详细阶段与原因 →logs拉取恢复日志定位具体报错。六、历史版本差异与迁移提示本文所述文档源自 v0.7.0 的命令参考页。需要提醒读者注意三处版本差异命令名v0.7.0 时代项目名为 Ark命令为ark restore get项目更名后为velero restore get。本文的命令示例均为现行语法。默认命名空间--namespace的默认值由heptio-ark变为velerov0.7.0 文档中默认heptio-ark。源码位置v0.7.0 时期的实现位于pkg/cmd/cli/restore/get.go演进至今仍保持同一文件路径命令的核心行为按名查询 / 列表查询 / 表格渲染基本一致当前实现额外增加了(Deleting)状态标注与formatTimestamp的n/a占位优化并在 pkg/cmd/cli/restore/get_test.go 中固化了行为测试。若你正在升级旧版 Ark/Velero 环境建议核对脚本中硬编码的命令名与命名空间参数并在升级后先运行一次velero restore get确认输出列与预期一致。【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表