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子命令与create、describe、delete、pause、unpause一起挂载在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-columns(stringArray类型):以逗号分隔的标签键列表,指定后这些标签的值会作为额外列展示在表格中。源码中由 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):输出格式,支持table、json、yaml三种取值。当以json或yaml输出时,返回的是完整的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逻辑分为两条路径:
- 带名称参数:
schedules之外传入的名称会被逐个调用crClient.Get精确取出,并追加到ScheduleList.Items中,即支持velero get schedules <name1> <name2>...的精确查询形式; - 不带名称参数:解析
-l/--selector为labels.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定义一一对应):
| 列名 | 来源字段 | 说明 |
|---|---|---|
| Name | metadata.name | 计划名称 |
| Status | status.phase | 取值New/Enabled/FailedValidation,为空时按New显示 |
| Created | metadata.creationTimestamp | 创建时间 |
| Schedule | spec.schedule | Cron 表达式,定义备份触发时间 |
| Backup TTL | spec.template.ttl | 由该计划生成的备份的保留时长 |
| Last Backup | status.lastBackup | 最近一次备份的相对时间(human-readable) |
| Selector | spec.template.labelSelector | 模板中的标签选择器 |
| Paused | spec.paused | 是否已暂停 |
需要注意:ScheduleSpec还包含useOwnerReferencesInBackup、skipImmediately等字段,它们不会出现在默认表格中,但可通过-o yaml完整查看。status.lastSkipped与status.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=value、key!=value、key in (v1,v2)等)。
相关命令(SEE ALSO)
- ark get — Get ark resources(获取各类 ark/velero 资源的父命令入口)
同一目录下还有ark_get_backups.md、ark_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),仅供参考