Velero 前身 Ark 的定时备份查看命令:`ark schedule get` 完整使用指南
2026/9/16 13:31:12 网站建设 项目流程

Velero 前身 Ark 的定时备份查看命令:ark schedule get完整使用指南

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

本篇文章聚焦于当前仓库site/content/docs/v0.8.0/cli-reference/ark_schedule_get.md所讲解的ark schedule get命令。在 Velero(当时名为 Heptio Ark)v0.8.0 时代,ark是唯一的命令行入口,而ark schedule get用于以表格、JSON 或 YAML 格式查看集群中已创建的定时备份(Schedule)资源。读完本文,你将掌握该命令的全部参数语义、与ark schedule create/describe/delete的配合方式,以及它在源码与控制器中的底层行为。

命令定位:Schedule 是备份自动化的核心

在 v0.8.0 中,Schedule 是一个自定义资源(CRD),它把「cron 表达式 + 备份参数」绑定在一起:一旦创建,Ark 服务端就会周期性地检查所有 Schedule 对象,当满足 cron 时间条件时自动发起一次备份。ark schedule get的作用就是列出这些 Schedule 资源及其当前状态,属于日常巡检备份策略的第一步。

该命令由ark schedule子命令树承载,父命令定义见 site/content/docs/v0.8.0/cli-reference/ark_schedule.md,其说明为 "Work with schedules",并聚合了createdeletedescribeget四个子命令。

命令语法与 Synopsis

ark schedule get [flags]

ark backup getark restore get一致,get不接收位置参数(NAME),而是将符合筛选条件的全部 Schedule 资源列表返回。这与describe不同——ark schedule describe [NAME1] [NAME2] [NAME...]需要显式指定名称,见 site/content/docs/v0.8.0/cli-reference/ark_schedule_describe.md。

参数详解(Options)

ark schedule get自身的参数如下:

参数类型默认值含义
-h, --helpbool-显示get子命令的帮助信息
--label-columns stringArraystring[]逗号分隔的标签键列表,这些标签将作为额外的列显示在输出表格中
-o, --output stringstringtable输出展示格式,合法值为tablejsonyaml
-l, --selector stringstring仅显示匹配该标签选择器的 Schedule 资源
--show-labelsboolfalse在表格最后一列展示资源的全部标签

各参数要点如下:

  • --output-o:默认以对齐的表格打印,便于人眼阅读;指定-o json-o yaml时可获得完整的资源对象序列化结果,适合脚本消费或与其他工具(如jqyq)管道衔接。注意文档中特别说明:对于create类命令,-o json/yaml的含义是「显示对象但不发送到服务端」,而get命令下则是直接输出服务端返回对象的序列化形式。
  • --label-columns:例如 Schedule 创建时打了env=prod标签,可用--label-columns env把该标签单独列为一列,方便按环境快速区分多条备份策略。该参数可重复传入多次以同时显示多列。
  • --selector-l:与 Kubernetes 标签选择器语法一致(如env=prodenv!=devenv in (prod, staging)),在客户端侧对返回列表做过滤。
  • --show-labels:在表格最右侧追加一列,集中展示每个 Schedule 的全部标签(key=value 形式,逗号分隔)。

继承自父命令的全局参数

ark schedule get还继承了所有ark命令共享的全局参数(来自父命令链arkark schedule):

参数类型默认值含义
--alsologtostderrbool-同时将日志写入文件与标准错误输出
--kubeconfig stringstring用于连接 Kubernetes apiserver 的 kubeconfig 文件路径;未设置时依次尝试环境变量KUBECONFIG与集群内配置
--kubecontext stringstring指定要使用的 kubeconfig context;未设置时使用kubectl config current-context的当前上下文
--log_backtrace_at traceLocationstring:0当日志命中file:N时输出堆栈追踪
--log_dir stringstring非空时把日志文件写入该目录
--logtostderrbool-日志直接输出到标准错误而非文件
-n, --namespace stringstringheptio-arkArk 工作所在的 Kubernetes 命名空间
--stderrthreshold severityint2达到或超过该阈值的日志输出到 stderr
-v, --v Levelint0V 级别日志的详细程度
--vmodule moduleSpecstring按文件过滤的pattern=N日志级别设置

其中-n, --namespace值得特别注意:v0.8.0 版本 Ark 默认命名空间是heptio-arkark schedule get只会列出该命名空间下的 Schedule。这一行为与测试用例的断言一致——在 pkg/cmd/cli/schedule/get_test.go 中,TestNewGetCommandListsOnlyTheVeleroNamespace明确验证了 get 命令只查询 Velero(Ark)命名空间。

源码实现:从命令注册到列表获取

命令的注册与实现位于 pkg/cmd/cli/schedule/get.go,核心入口为NewGetCommand(f client.Factory, use string) *cobra.Command。它被 pkg/cmd/cli/schedule/schedule.go 中的NewCommand挂载为ark schedule get子命令,与NewDescribeCommand并列。

从源码结构可以推断其典型执行链路:

  1. NewGetCommand通过 Cobra 注册get命令及上述 flags(label-columnsoutputselectorshow-labels);
  2. 运行时借助client.Factory构造 Ark 自定义资源的客户端;
  3. 调用 ScheduleList 的列表接口(受-n/--namespace约束),再按selectorlabel-columnsshow-labels在展示层处理。

同目录下的 pkg/cmd/cli/schedule/describe.go 与 pkg/cmd/cli/schedule/describe_test.go 则验证了describe的「按名称查看单个 Schedule 详情」行为,可与get的「批量列表」形成互补。

与创建命令配合:理解你看到的输出

Schedule 的输出内容直接源于ark schedule create时指定的参数。create命令要求--schedule参数必须是 cron 表达式,其字段含义(详见 site/content/docs/v0.8.0/cli-reference/ark_schedule_create.md):

字符位置时间周期可接受值
1分钟0-59,*
2小时0-23,*
3日(月中的某天)1-31,*
41-12,*
5星期(周中的某天)0-7,*

创建示例:

ark schedule create daily-backup --schedule="0 */6 * * *" --include-namespaces default --ttl 24h

该命令会创建一个每日每 6 小时触发一次、只备份default命名空间、保留 24 小时的 Schedule。随后执行ark schedule get即可看到这条策略;若想确认它具体触发了哪些 Backup,可结合 site/content/docs/v0.8.0/cli-reference/ark_backup_get.md 中的ark backup get -l velero.io/schedule-name=daily-backup(按 Schedule 标签过滤)来追踪其产出的备份。

标签选择器实战

假设你维护了多条备份策略:

ark schedule create app-prod-nightly --schedule="0 2 * * *" --labels app=web,env=prod ark schedule create app-staging-nightly --schedule="0 3 * * *" --labels app=web,env=staging ark schedule create db-prod-nightly --schedule="30 2 * * *" --labels app=db,env=prod
  • 只看生产环境策略:ark schedule get -l env=prod
  • 只显示 web 应用策略并展示标签列:ark schedule get -l app=web --label-columns env --show-labels
  • 输出机器可读格式:ark schedule get -o jsonark schedule get -o yaml

底层机制:Schedule 如何被周期检查

ark schedule get展示的是服务端 Schedule 资源的即时快照,而这些资源之所以能产生定时备份,依赖服务端的周期同步机制。

在 pkg/controller/schedule_controller.go 中,控制器定义了scheduleSyncPeriod = time.Minute,并通过kube.NewPeriodicalEnqueueSource以该周期对ScheduleList进行周期入队扫描(pkg/controller/schedule_controller.go)。也就是说:Ark 服务端每分钟检查一次全部 Schedule,判断是否有 cron 触发点需要发起备份。

该同步周期也可通过 Ark 服务端配置覆盖。在 v0.8.0 中,服务端配置是一个名为default的自定义 Config 资源(位于heptio-ark命名空间),其中的scheduleSyncPeriod键控制「Ark 检查 Schedule 资源以决定是否发起备份」的频率,默认1m0s;与之配套的backupSyncPeriod(默认60m)控制从对象存储同步已有备份文件、gcSyncPeriod(默认60m)控制清理超过 TTL 的备份文件。完整参数表见 site/content/docs/v0.8.0/config-definition.md。

结合这两部分,可以形成完整的认知闭环:ark schedule get看到的是 Schedule 资源在 API 层面的状态;而 Schedule 真正「跑起来」是靠服务端每分钟一次的周期扫描。修改 Config 中的scheduleSyncPeriod会影响该扫描频率。

常见排查与使用建议

  • 看不到任何 Schedule:先确认是否已用ark schedule create创建过资源,再用ark schedule get -n heptio-ark显式指定命名空间;检查当前 kubeconfig 上下文是否指向目标集群(--kubecontext)。
  • 需要了解某条策略的完整详情(如包含/排除的资源、TTL、PV 快照开关):改用ark schedule describe <NAME>,其参数见 site/content/docs/v0.8.0/cli-reference/ark_schedule_describe.md。
  • 需要删除不再需要的策略:使用ark schedule delete <NAME>,入口见 site/content/docs/v0.8.0/cli-reference/ark_schedule.md 的父命令树。
  • 输出用于自动化-o json/-o yaml可配合jq等工具提取 Schedule 的spec.schedulespec.templatestatus等字段做断言或监控。

结语

ark schedule get虽是一个仅 5 个自有参数的列表命令,却是运维 Ark 定时备份体系的第一入口。结合--label-columns--selector--show-labels可以做精细化的策略筛选,配合-o json/yaml可融入脚本自动化;而其输出背后,是每分钟一次的scheduleSyncPeriod周期扫描机制(见 pkg/controller/schedule_controller.go)。理解这一点,你就能把「命令行看到什么」与「服务端如何执行」串成一条完整的链路。

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

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

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

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

立即咨询