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,与get、describe、delete、pause、unpause一同构成完整的调度管理命令组;在较新的版本中,命令形式演变为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-namespaces | stringArray | — | 要从备份中排除的命名空间 |
--exclude-resources | stringArray | — | 要从备份中排除的资源,格式为resource.group,例如storageclasses.storage.k8s.io |
-h, --help | — | — | 显示 create 子命令的帮助信息 |
--include-namespaces | stringArray | * | 要纳入备份的命名空间(使用*表示所有命名空间) |
--include-resources | stringArray | * | 要纳入备份的资源,格式为resource.group(使用*表示所有资源) |
--label-columns | stringArray | — | 以逗号分隔、需要作为表格列展示的标签列表 |
--labels | mapStringString | — | 应用到备份上的标签 |
-o, --output | string | — | 输出显示格式。对 create 类命令,仅展示对象而不发送到服务器端。合法值为table、json、yaml |
--schedule | string | — | cron 表达式,指定该备份循环执行的周期(必填) |
-l, --selector | labelSelector | <none> | 仅备份匹配该标签选择器的资源 |
--show-labels | bool | — | 在最后一列展示标签 |
--snapshot-volumes | optionalBool | true | 作为备份的一部分对 PersistentVolume 进行快照 |
--ttl | duration | 24h0m0s | 备份在被垃圾回收前可以保留的时间 |
在 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 Level | V 级别日志的日志级别 |
--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):
Complete负责补齐备份模板相关的默认选项;Validate校验--schedule必填项及备份参数合法性;Run依据用户传入的全部参数组装出一个Schedule自定义资源对象(api.Schedule),其Spec.Template字段完整承载了IncludedNamespaces、ExcludedNamespaces、IncludedResources、LabelSelector、SnapshotVolumes、TTL、StorageLocation、VolumeSnapshotLocations等备份配置(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 模式)
在 Ark server 首次部署后,建立每日备份(替换
<SCHEDULE NAME>为自定义名称):ark schedule create <SCHEDULE NAME> --schedule "0 7 * * *"发生灾难后,需要重建集群资源;
更新 Ark 的 Config(
default)对象,将restoreOnlyMode设为true,以禁止在恢复过程中创建或删除 Backup 对象(关于 Config 的完整字段说明见 config-definition.md,其中restoreOnlyMode开启后,备份、调度与过期备份删除功能均被关闭,仅允许基于对象存储中的既有备份执行恢复);用最近一次的备份创建恢复:
ark restore create <SCHEDULE NAME>-<TIMESTAMP>
该流程的价值在于:由于备份已按计划持续产生,灾难发生时总存在可用的最近时间点备份可供回滚,将停机损失降到最低。
场景二:集群迁移(基于 Backups 与 Restores)
(集群 1)若尚未配置周期性备份,先对整个集群执行一次备份:
ark backup create <BACKUP-NAME>默认 TTL 为 24 小时,可通过
--ttl调整保留时长;(集群 2)确保新集群 Ark Config 中的
persistentVolumeProvider与backupStorageProvider与集群 1 完全一致,使两个 Ark 实例指向同一个对象存储 bucket;(集群 2)确认 Ark 的 Backup 对象已创建——Ark 会通过云存储同步机制将存储桶中的备份文件同步为 Backup 资源;
(集群 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),仅供参考