命令完整指南)
Ark/Velero CLI 参考ark get restores现velero restore get命令完整指南【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero导读ark get restores是 ArkVelero 的前身提供的核心查询命令用于列出 Kubernetes 集群中的 Restore 自定义资源及其执行状态。本指南以 v0.8.0 版本文档 site/content/docs/v0.8.0/cli-reference/ark_get_restores.md 为骨架结合当前仓库中velero restore get的实现源码完整讲解该命令的语法、全部命令行参数、输出格式与底层执行逻辑。读完本文你将掌握如何查询恢复任务、按标签过滤、切换 table/json/yaml 输出以及理解表格中每一列字段的含义。一、命令概览从ark到velero的演进Ark 是 Velero 的早期名称默认命名空间为heptio-arkv0.8.0 时期的查询命令写作ark get restores [flags]随着项目更名为 Velero该命令演变为当前仓库中实现的velero restore get。当前源码中Restore 相关的子命令统一挂在restore组下见 pkg/cmd/cli/restore/restore.goc.AddCommand( NewCreateCommand(f, create), NewGetCommand(f, get), NewLogsCommand(f), NewDescribeCommand(f, describe), NewDeleteCommand(f, delete), )因此本指南中的ark get restores与当前仓库的velero restore get指向同一功能参数含义一一对应可放心互换使用。二、命令语法与参数详解ark get restores的完整语法为ark get restores [flags]你也可以在命令后直接追加一个或多个 Restore 名称如ark get restores my-restore仅查询指定的恢复任务这与源码实现一致详见第三节。2.1 本命令专属参数参数类型默认值说明-h, --helpbool—显示restores子命令的帮助信息--label-columns stringArraystringArray无以逗号分隔的标签键列表这些标签会作为额外的列显示在表格中-o, --output stringstringtable输出显示格式。对 create 类命令而言该参数仅预览对象而不发送到服务端。合法值为table、json、yaml-l, --selector stringstring无标签选择器表达式只显示匹配的恢复任务--show-labelsboolfalse在表格最后一列显示对象的全部标签注当前源码在绑定输出相关参数时见下文源码解析--label-columns还注册了短标志-L可多次使用如-L label1 -L label2详见 pkg/cmd/util/output/output.go。2.2 从父命令继承的参数参数说明--alsologtostderr日志同时输出到标准错误和日志文件--kubeconfig string连接 Kubernetes API Server 使用的 kubeconfig 路径未设置时依次尝试环境变量KUBECONFIG与集群内配置--kubecontext string使用的 kubeconfig context未设置时默认使用当前 context即kubectl config current-context--log_backtrace_at traceLocation当日志命中file:N时输出堆栈跟踪默认:0--log_dir string非空时指定日志文件写入目录--logtostderr日志输出到标准错误而非文件-n, --namespace stringArk/Velero 操作的命名空间v0.8.0 默认heptio-ark当前版本默认velero--stderrthreshold severity达到或超过该级别的日志进入标准错误默认2-v, --v LevelV 级别日志的详细程度--vmodule moduleSpec按文件过滤日志的patternN逗号分隔设置三、源码级实现解析当前命令的实现位于 pkg/cmd/cli/restore/get.go 的NewGetCommand函数。理解它有助于解释上面各个参数的真实行为。3.1 按名称查询与全量列表两条路径命令执行时首先通过f.KubebuilderClient()获取 controller-runtime 风格的客户端随后根据是否传入名称参数走两条不同路径restores : new(api.RestoreList) if len(args) 0 { for _, name : range args { restore : new(api.Restore) err : kbClient.Get(context.TODO(), controllerclient.ObjectKey{Namespace: f.Namespace(), Name: name}, restore) cmd.CheckError(err) restores.Items append(restores.Items, *restore) } } else { parsedSelector, err : labels.Parse(listOptions.LabelSelector) cmd.CheckError(err) err kbClient.List(context.TODO(), restores, controllerclient.ListOptions{LabelSelector: parsedSelector, Namespace: f.Namespace()}) cmd.CheckError(err) }传入名称逐个Get指定名称的 Restore即使指定了--selector也不会生效直接走单条查询未传名称将-l/--selector字符串通过labels.Parse解析为 Kubernetes 标签选择器再以List拉取当前命名空间下所有匹配的 Restore。3.2 正在删除的恢复任务标记查询完成后命令会检查每个 Restore 是否带有删除时间戳若处于删除流程中则在状态后追加(Deleting)标记for i : range restores.Items { if !restores.Items[i].DeletionTimestamp.IsZero() { restores.Items[i].Status.Phase (Deleting) } }3.3 参数绑定与校验-l/--selector通过StringVarP注册输出相关参数-o/--output、--label-columns、--show-labels统一由output.BindFlags(c.Flags())绑定见 pkg/cmd/util/output/output.go。命令执行开头还会调用output.ValidateFlags(c)其中validateOutputFlag会拒绝table/json/yaml之外的任何输出格式install命令除外。四、输出格式详解table、json、yamlPrintWithFormat见 pkg/cmd/util/output/output.go根据-o的值分派到不同打印器table默认进入printTable针对*Restore/*RestoreList使用 Restore 专属列定义json/yaml进入printEncoded直接输出对象的序列化结果。若查询结果列表恰好只有一项会退化为直接打印单个对象便于脚本消费。4.1 表格列定义与字段映射table 格式下每个恢复任务按以下列输出列定义与字段映射见 pkg/cmd/util/output/restore_printer.go列数据来源说明Namerestore.Name恢复任务名称Backuprestore.Spec.BackupName该恢复任务对应的备份名称Statusrestore.Status.Phase恢复状态为空时显示NewStartedrestore.Status.StartTimestamp开始时间未设置或为零值时显示n/aCompletedrestore.Status.CompletionTimestamp完成时间规则同上Errorsrestore.Status.Errors恢复过程中产生的错误计数Warningsrestore.Status.Warnings恢复过程中产生的警告计数Createdrestore.CreationTimestamp.Time资源创建时间Selectormetav1.FormatLabelSelector(restore.Spec.LabelSelector)恢复任务自身的标签选择器用于从备份中筛选对象此外若指定--show-labels或--label-columnsNewPrinter会将其注入printers.PrintOptions{ShowLabels, ColumnLabels}见 output.go在表格末尾追加对应列。4.2 状态Phase取值全集Status列的取值定义在 pkg/apis/velero/v1/restore_types.go包括New恢复任务已创建尚未被 RestoreController 处理FailedValidation未通过控制器校验不会执行InProgress正在执行WaitingForPluginOperations/WaitingForPluginOperationsPartiallyFailed资源恢复完成异步插件操作仍在进行Finalizing/FinalizingPartiallyFailed收尾任务执行中即将进入终态Completed成功完成无错误PartiallyFailed执行完成但恢复个别资源时遇到 1 个以上错误Failed整个恢复无法执行失败原因记录在status.failureReason。与此同时Restore CRD 本身也通过kubebuilder:printcolumn声明了Backup、Status、Errors、Warnings、Age等打印列见 restore_types.go因此直接用kubectl get restores也能看到简要状态而velero restore get提供了更丰富、面向运维的字段视图。五、实战示例以下命令在 Ark v0.8.0 与当前 Velero 版本中均可对应执行将ark替换为velero即可。5.1 列出全部恢复任务# Ark v0.8.0 ark get restores # 当前版本 velero restore get输出示例列结构对应 4.1 节NAME BACKUP STATUS STARTED COMPLETED ERRORS WARNINGS CREATED SELECTOR my-restore my-backup Completed 2025-01-01 08:00:00 0000 UTC 2025-01-01 08:05:12 0000 UTC 0 0 2025-01-01 08:00:00 0000 UTC none5.2 按标签选择器过滤只显示带appnginx标签的恢复任务ark get restores -l appnginx5.3 切换输出格式ark get restores -o json ark get restores -o yaml ark get restores my-restore -o json # 指定名称时单条结果直接输出对象5.4 在表格中展示标签# 将指定标签显示为列 ark get restores --label-columns app # 在最后一列显示全部标签 ark get restores --show-labels六、测试验证命令行为有测试保障velero restore get的行为由单元测试覆盖见 pkg/cmd/cli/restore/get_test.go。测试TestNewGetCommand的流程如下通过 fake controller-runtime client 依次创建 3 个带abc标签的 Restore 对象调用NewGetCommand(f, velero restore get)并断言命令短描述为Get restores将 3 个名称作为参数传入并执行命令随后在标准输出中统计包含New状态的行断言数量与传入名称数一致。该测试同时验证了「按名称查询」路径与默认table输出的正确性可作为自行验证命令行为的参照。七、相关命令与延伸阅读ark get restores是ark get子命令家族的一员姊妹命令包括 ark get backups 与 ark get schedules。恢复任务的上游操作可参考ark restore create创建恢复、ark restore describe查看详情与ark restore logs查看日志。进一步深入命令入口聚合pkg/cmd/cli/restore/restore.go通用输出框架格式校验、表格/编码打印pkg/cmd/util/output/output.goRestore 表格列与字段映射pkg/cmd/util/output/restore_printer.goRestore 资源类型与状态定义pkg/apis/velero/v1/restore_types.go恢复控制器如何消费这些状态pkg/controller/restore_controller.go【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考