Velero CLI 详解:get schedules 命令的完整参数、输出格式与源码实现
2026/9/16 12:01:04 网站建设 项目流程

Velero CLI 详解:get schedules 命令的完整参数、输出格式与源码实现

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

本文以 Velero(早期名为 ARK)CLI 参考文档中get schedules命令为对象,完整讲解该命令的 Synopsis、全部选项与继承选项,并结合当前仓库源码解析其参数绑定、列表查询、标签选择器过滤以及表格渲染的底层实现。读完本文,你不仅能正确执行get schedules查看备份计划(Schedule),还能理解每一列输出的来源以及table/json/yaml三种输出格式的差异。

命令概览(Synopsis)

get schedules用于列出 Velero 集群中的备份计划(Schedule 资源)。v0.5.0 时期该命令以ark作为前缀,命令形式为:

ark get schedules [flags]

在后续版本中,命令行前缀由ark重命名为velero,功能与参数保持一致,即当前的velero get schedules [flags]。当前仓库中该命令的注册入口位于 schedule.go,其中get子命令与createdescribedeletepauseunpause一起挂载在schedule父命令之下。

完整选项说明

以下为文档原文中该命令的全部选项,与源码中参数绑定结果一致:

-h, --help help for schedules --label-columns stringArray a comma-separated list of labels to be displayed as columns -o, --output string Output display format. For create commands, display the object but do not send it to the server. Valid formats are 'table', 'json', and 'yaml'. (default "table") -l, --selector string only show items matching this label selector --show-labels show labels in the last column

逐项解释:

  • -h, --help:帮助信息,cobra 框架自动生成。
  • --label-columnsstringArray类型):以逗号分隔的标签键列表,指定后这些标签的值会作为额外列展示在表格中。源码中由 output.go 的BindFlags统一绑定,其原始描述为 "Accepts a comma separated list of labels that are going to be presented as columns. Names are case-sensitive. You can also use multiple flag options like -L label1 -L label2...",即标签名区分大小写,也可以多次传 flag。
  • -o, --output(默认table):输出格式,支持tablejsonyaml三种取值。当以jsonyaml输出时,返回的是完整的ScheduleList对象(含 spec 与 status 全部字段),适合管道给jq等工具二次加工;table则是带列定义的摘要视图。
  • -l, --selector:Kubernetes 标准标签选择器表达式,仅显示匹配的 Schedule。注意其使用前提是“不指定具体名称”——源码中该 flag 绑定到metav1.ListOptions.LabelSelector,仅在 List 查询路径生效(见下文)。
  • --show-labels:在表格最后一列显示对象的全部 labels。

这些选项并非在get命令中手写,而是由 pkg/cmd/util/output/output.go 中的BindFlags统一注入到pflag.FlagSet,并由ValidateFlags做合法性校验。get命令的源码(get.go)中只需一行output.BindFlags(c.Flags())即可获得全部输出能力,这解释了为什么所有资源类型的get命令选项完全一致。

继承自父命令的全局选项

文档同时列出了从父命令继承的日志与集群连接选项:

--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 --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 --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

这些是 glog 风格日志与 kubeconfig 连接选项。使用要点:

  • --kubeconfig指定 apiserver 连接配置文件;未设置时依次尝试环境变量KUBECONFIG与 in-cluster 配置。CLI 客户端的 kubeconfig 解析逻辑位于 pkg/client/config.go。
  • -v/--v控制日志级别,排查命令行为异常时可调高;--logtostderr--alsologtostderr--log_dir--stderrthreshold--log_backtrace_at--vmodule用于更细粒度的日志落盘与过滤。

源码解析:查询逻辑与名称参数

从源码结构看,get.go 的Run逻辑分为两条路径:

  1. 带名称参数schedules之外传入的名称会被逐个调用crClient.Get精确取出,并追加到ScheduleList.Items中,即支持velero get schedules <name1> <name2>...的精确查询形式;
  2. 不带名称参数:解析-l/--selectorlabels.Selector(为空时返回全量选择器),然后crClient.List一次性拉取匹配的全部 Schedule。

拿到ScheduleList后交给output.PrintWithFormat渲染:当指定-o json|yaml时直接打印序列化对象并返回;默认走 table 路径。

关于表格各列的来源,schedule_printer.go 定义了固定列:

Name | Status | Created | Schedule | Backup TTL | Last Backup | Selector | Paused

逐列对应的字段(与 schedule_types.go 中的ScheduleSpec/ScheduleStatus定义一一对应):

列名来源字段说明
Namemetadata.name计划名称
Statusstatus.phase取值New/Enabled/FailedValidation,为空时按New显示
Createdmetadata.creationTimestamp创建时间
Schedulespec.scheduleCron 表达式,定义备份触发时间
Backup TTLspec.template.ttl由该计划生成的备份的保留时长
Last Backupstatus.lastBackup最近一次备份的相对时间(human-readable)
Selectorspec.template.labelSelector模板中的标签选择器
Pausedspec.paused是否已暂停

需要注意:ScheduleSpec还包含useOwnerReferencesInBackupskipImmediately等字段,它们不会出现在默认表格中,但可通过-o yaml完整查看。status.lastSkippedstatus.validationErrors同理——排查计划校验失败(FailedValidation)时,-o yaml输出是最直接的手段。

实战示例

以下命令均可在当前仓库对应的 CLI 上执行(以velero前缀表示,v0.5.0 时期等价命令前缀为ark):

# 1. 列出所有备份计划(默认 table 格式) velero get schedules # 2. 按标签选择器过滤(例如只看待办/生产环境计划) velero get schedules -l environment=production # 3. 查看指定计划(精确名称查询路径) velero get schedules nightly-backup # 4. 以 yaml 输出完整 spec/status,便于排查校验错误或 skipImmediately 等隐藏字段 velero get schedules nightly-backup -o yaml # 5. 将 label 值展示为额外列(例如 app 标签) velero get schedules --label-columns app # 6. 最后一列显示全部 labels velero get schedules --show-labels

结合源码可以预期几个行为:指定名称时不受-l影响;-o json/-o yaml的输出包含ScheduleList全部items-l的表达式语法即 Kubernetes 标准 label selector(key=valuekey!=valuekey in (v1,v2)等)。

相关命令(SEE ALSO)

  • ark get — Get ark resources(获取各类 ark/velero 资源的父命令入口)

同一目录下还有ark_get_backups.mdark_get_restores.md等同风格 CLI 参考页,其get子命令同样复用 pkg/cmd/util/output 的输出框架,阅读方法完全一致。

小结

get schedules是 Velero 管理备份计划的核心只读入口:无参数时全量 List,带名称时精确 Get,-l过滤、-o控制格式、--label-columns/--show-labels增强表格信息。理解 get.go 的双路径查询与 schedule_printer.go 的列映射后,你可以把该命令的每一项输出对应到ScheduleCRD 的具体字段,从而在备份计划出现FailedValidation、备份长时间不触发等场景下快速定位问题。

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

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

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

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

立即咨询