Ark/Velero schedule create 命令详解:创建定时 Kubernetes 备份调度
2026/9/16 13:49:03 网站建设 项目流程

Ark/Velero schedule create 命令详解:创建定时 Kubernetes 备份调度

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

本文以 Ark(Velero 的前身)v0.4.0 的ark schedule create命令参考文档为核心,系统讲解如何通过该命令创建基于 cron 表达式的定时备份(Schedule),覆盖全部参数语义、定时表达式语法、实战示例以及底层的 Schedule 对象与调度控制器实现。读者学完后,将能够熟练编排"每天凌晨备份""每 6 小时备份"等周期性备份任务,并将其应用到灾难恢复与集群迁移等真实场景中。

命令概述与定位

ark schedule create是 Ark CLI 中用于创建定时备份调度的命令。与一次性执行备份的ark backup create不同,通过本命令创建的 Schedule 会按照给定的 cron 表达式周期性地自动触发备份,从而为集群提供持续性的数据保护能力。

命令的基本语法为:

ark schedule create NAME [flags]

其中NAME是调度对象的名称,--schedule参数(cron 表达式)为必填项。在当前的 Velero 代码库中,该命令对应的子命令注册于 pkg/cmd/cli/schedule/schedule.go,与getdescribedeletepauseunpause一同构成完整的调度管理命令组;在较新的版本中,命令形式演变为velero schedule create,其核心实现位于 pkg/cmd/cli/schedule/create.go。

该命令的上级命令为 ark schedule(Work with schedules),再上级为 ark(Back up and restore Kubernetes cluster resources)。

完整参数参考

本命令的创建参数与ark backup create高度一致,因为它们最终都作用在备份模板(Backup Template)上。以下参数均直接继承自原命令参考文档:

参数类型默认值含义
--exclude-namespacesstringArray要从备份中排除的命名空间
--exclude-resourcesstringArray要从备份中排除的资源,格式为resource.group,例如storageclasses.storage.k8s.io
-h, --help显示 create 子命令的帮助信息
--include-namespacesstringArray*要纳入备份的命名空间(使用*表示所有命名空间)
--include-resourcesstringArray*要纳入备份的资源,格式为resource.group(使用*表示所有资源)
--label-columnsstringArray以逗号分隔、需要作为表格列展示的标签列表
--labelsmapStringString应用到备份上的标签
-o, --outputstring输出显示格式。对 create 类命令,仅展示对象而不发送到服务器端。合法值为tablejsonyaml
--schedulestringcron 表达式,指定该备份循环执行的周期(必填
-l, --selectorlabelSelector<none>仅备份匹配该标签选择器的资源
--show-labelsbool在最后一列展示标签
--snapshot-volumesoptionalBooltrue作为备份的一部分对 PersistentVolume 进行快照
--ttlduration24h0m0s备份在被垃圾回收前可以保留的时间

在 pkg/cmd/cli/schedule/create.go 的BindFlags实现中,可以看到--schedule参数被绑定到Schedule字段,校验逻辑(Validate,见 create.go)会强制要求--schedule非空,否则直接返回--schedule is required错误——这与命令参考文档中将其标为必填项的语义完全一致。此外,现代版本还新增了--use-owner-references-in-backup(通过 OwnerReferences 关联调度与由其派生的备份,删除调度时级联删除备份)与--paused(创建即暂停调度)两个参数。

继承自父命令的全局参数

与 Ark 家族的其他命令一样,本命令继承了一组来自根命令的日志与连接配置参数:

参数含义
--alsologtostderr同时将日志写入标准错误与日志文件
--kubeconfig string连接 Kubernetes apiserver 使用的 kubeconfig 路径;未设置时依次尝试环境变量KUBECONFIG与集群内配置
--log_backtrace_at traceLocation当日志到达file:N时输出堆栈回溯(默认:0
--log_dir string若指定,日志文件将写入该目录
--logtostderr将日志输出到标准错误而非文件
--stderrthreshold severity达到或超过该级别的日志进入 stderr(默认 2)
-v, --v LevelV 级别日志的日志级别
--vmodule moduleSpec以逗号分隔的pattern=N设置,用于按文件过滤日志

cron 定时表达式语法

--schedule参数接收标准的5 字段 cron 表达式,且统一使用 UTC 时间计算。五个字段的位置、周期与取值范围如下表(源自 pkg/cmd/cli/schedule/create.go 中的命令长帮助文本):

字符位置含义可接受值
1分钟(Minute)0-59,*
2小时(Hour)0-23,*
3每月第几天(Day of Month)1-31,*
4月份(Month)1-12,*
5每周第几天(Day of Week)0-6,*

例如表达式0 7 * * *表示"每天 UTC 07:00 执行一次备份"。

@every 简化语法

除标准 cron 表达式外,调度表达式还支持@every <duration>语法(同样见 create.go),duration 可由秒(s)、分钟(m)、小时(h)组合而成,例如@every 2h30m。这种写法适合表达"每隔固定时间执行"这类不依赖具体时钟时刻的需求,语义比 cron 更直观。

典型使用示例

以下示例综合自命令源码中的Example帮助文本(create.go)以及 v0.4.0 配套的 Use Cases 文档,可直接复制运行:

每 6 小时备份一次(cron 写法):

ark schedule create NAME --schedule="0 */6 * * *"

每 6 小时备份一次(@every 写法):

ark schedule create NAME --schedule="@every 6h"

每天备份 web 命名空间:

ark schedule create NAME --schedule="@every 24h" --include-namespaces web

每周备份一次,每个备份保留 90 天(2160 小时):

ark schedule create NAME --schedule="@every 168h" --ttl 2160h0m0s

每日定时备份(灾难恢复场景):

ark schedule create <SCHEDULE NAME> --schedule "0 7 * * *"

执行成功后,Ark 会创建一个名为<SCHEDULE NAME>-<TIMESTAMP>的 Backup 对象,其中<TIMESTAMP>是每次调度触发时的时间戳,用于区分同一调度产生的不同备份实例。

底层原理:从命令到调度控制器

命令执行时发生了什么

ark schedule create被调用时,CLI 会走"Complete → Validate → Run"三步流程(create.go):

  1. Complete负责补齐备份模板相关的默认选项;
  2. Validate校验--schedule必填项及备份参数合法性;
  3. Run依据用户传入的全部参数组装出一个Schedule自定义资源对象(api.Schedule),其Spec.Template字段完整承载了IncludedNamespacesExcludedNamespacesIncludedResourcesLabelSelectorSnapshotVolumesTTLStorageLocationVolumeSnapshotLocations等备份配置(create.go),最后通过 Kubernetes 客户端调用crClient.Create将对象写入集群。

由此可以看到,schedule create本质上是在创建一份"备份模板 + 触发周期"的组合配置,实际备份行为由服务端的调度控制器按周期执行。

调度控制器如何触发备份

Schedule 对象创建完成后,由 Ark 服务端内置的 schedule 控制器负责周期性检查并触发备份。控制器的工作节奏由 Config 自定义资源中的scheduleSyncPeriod参数控制,默认值为1m0s,即每分钟检查一次 Schedule 对象,判断是否有备份需要触发(见 config-definition.md 中的主配置参数表)。相关的控制器实现位于 pkg/controller/schedule_controller.go。

因此,ark schedule create是"声明式"的:命令执行后只需等待控制器按 cron 周期自动产出带时间戳的 Backup 对象即可,无需人工干预。

实战场景:定时备份驱动的灾难恢复与集群迁移

v0.4.0 的 Use Cases 文档 给出了两个以定时备份为核心的真实场景,本命令在其中扮演入口角色。

场景一:灾难恢复(基于 Schedules 与 Restore-Only 模式)

  1. 在 Ark server 首次部署后,建立每日备份(替换<SCHEDULE NAME>为自定义名称):

    ark schedule create <SCHEDULE NAME> --schedule "0 7 * * *"
  2. 发生灾难后,需要重建集群资源;

  3. 更新 Ark 的 Config(default)对象,将restoreOnlyMode设为true,以禁止在恢复过程中创建或删除 Backup 对象(关于 Config 的完整字段说明见 config-definition.md,其中restoreOnlyMode开启后,备份、调度与过期备份删除功能均被关闭,仅允许基于对象存储中的既有备份执行恢复);

  4. 用最近一次的备份创建恢复:

    ark restore create <SCHEDULE NAME>-<TIMESTAMP>

该流程的价值在于:由于备份已按计划持续产生,灾难发生时总存在可用的最近时间点备份可供回滚,将停机损失降到最低。

场景二:集群迁移(基于 Backups 与 Restores)

  1. (集群 1)若尚未配置周期性备份,先对整个集群执行一次备份:

    ark backup create <BACKUP-NAME>

    默认 TTL 为 24 小时,可通过--ttl调整保留时长;

  2. (集群 2)确保新集群 Ark Config 中的persistentVolumeProviderbackupStorageProvider与集群 1 完全一致,使两个 Ark 实例指向同一个对象存储 bucket;

  3. (集群 2)确认 Ark 的 Backup 对象已创建——Ark 会通过云存储同步机制将存储桶中的备份文件同步为 Backup 资源;

  4. (集群 2)确认目标 Backup(<BACKUP-NAME>)已出现后,执行恢复:

    ark restore create <BACKUP-NAME>

需要特别说明的是,v0.4.0 时代的 Ark不支持跨云厂商的持久卷迁移,该场景默认要求两个集群由同一云厂商托管。

相关命令与后续操作

创建调度后,通常配合以下命令进行管理与查看(对应 ark schedule 命令组):

  • ark schedule get:查看已创建的调度;
  • ark schedule delete:删除不再需要的调度;
  • ark schedule create:创建新的调度(本文主题);
  • 在现代 Velero 中,还可通过velero schedule pause/velero schedule unpause暂停与恢复调度(注册见 pkg/cmd/cli/schedule/schedule.go),以及velero schedule describe查看调度详情。

完整的命令索引位于 site/content/docs/v0.4.0/cli-reference 目录,可结合 ark_backup_create 与 ark_restore_create 等命令参考文档,串起"定时备份 → 手动恢复"的完整数据保护链路。

小结

ark schedule create是 Ark/Velero 定时备份能力的核心入口命令,本文完整梳理了其全部参数、cron 与@every两种调度表达式、实战示例,并结合源码解释了命令创建 Schedule 对象、调度控制器按scheduleSyncPeriod周期触发备份的底层机制,以及定时备份在灾难恢复与集群迁移场景中的具体用法。掌握了本命令,即可为集群建立起"自动、持续、可回滚"的备份基线。

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

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

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

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

立即咨询