十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Ark(Velero 前身)`ark schedule` 命令全解析:定时备份的创建、查询与运维

Ark(Velero 前身)`ark schedule` 命令全解析:定时备份的创建、查询与运维 ArkVelero 前身ark schedule命令全解析定时备份的创建、查询与运维【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero导读ark schedule是 ArkVelero 的前身项目CLI 中管理定时备份Schedule的入口命令。本文以 v0.9.0 文档为骨架完整梳理ark schedule及其create/get/describe/delete四个子命令的语法、参数与使用场景并结合当前仓库中 pkg/cmd/cli/schedule 的 CLI 实现、schedule_controller.go 的控制器逻辑与 schedule_types.go 的 API 类型定义深入讲解 Cron 表达式的校验规则、调度的执行时机判定与备份命名规则。读完本文你将能独立完成按周期自动备份 Kubernetes 集群资源的完整配置与日常运维。说明v0.9.0 时代的命令行工具名为ark对应项目即今天广泛使用的 Velero当前仓库中命令已演进为velero schedule ...其语义与 v0.9.0 文档保持一致文中会同步说明两者差异。命令概览ark schedule的职责边界ark schedule本身是一个命令分组group command对应源码 pkg/cmd/cli/schedule/schedule.go 中Use: schedule、Short: Work with schedules的定义其作用是聚合以下四个子命令子命令作用对应文档ark schedule create创建定时备份计划ark_schedule_create.mdark schedule get列出已存在的调度计划ark_schedule_get.mdark schedule describe查看单个/多个调度的详细信息ark_schedule_describe.mdark schedule delete删除调度计划ark_schedule_delete.md直接运行ark schedule或ark schedule -h只会打印帮助信息ark schedule [command] Available Commands: create Create a schedule delete Delete a schedule describe Describe schedules get Get schedules Flags: -h, --help help for schedule在现在的 Velero 版本中该分组命令对应为velero schedule子命令为velero schedule create/get/describe/delete/pause/unpause其中pause暂停与unpause恢复是后续版本新增的能力见源码 pkg/cmd/cli/schedule/pause.go 与 pkg/cmd/cli/schedule/unpause.go。全局继承参数每个子命令都会携带的选项ark schedule的所有子命令都会自动继承父命令的全局选项这些选项主要控制 kubeconfig 连接方式、日志输出与命名空间。由于它们对所有 ark 命令通用理解一次即可参数说明--alsologtostderr除了写入日志文件外同时将日志输出到标准错误--kubeconfig string连接 Kubernetes apiserver 使用的 kubeconfig 路径未设置时依次尝试环境变量KUBECONFIG与集群内配置--kubecontext string指定 kubeconfig 中的 context默认使用kubectl config current-context对应的当前上下文--log_backtrace_at traceLocation当日志命中file:N时输出堆栈信息默认:0--log_dir string非空时指定日志文件写入目录--logtostderr将日志输出到标准错误而非文件-n, --namespace stringArk 操作的命名空间v0.9.0 默认heptio-ark当前 Velero 版本默认velero--stderrthreshold severity达到该级别及以上的日志输出到 stderr默认 2即 ERROR-v, --v LevelV 级别日志verbose的日志等级--vmodule moduleSpec逗号分隔的patternN形式的文件过滤日志配置其中--namespace是最常用的参数Ark 的 Schedule、Backup 等自定义资源都存放在该命名空间下因此查询调度时务必保证-n与安装 Ark 时使用的命名空间一致。创建定时备份ark schedule create命令语法与核心机制ark schedule create NAME --schedule [flags]--schedule是必填参数要求使用 Cron 表达式且按UTC 时间计算源码 pkg/cmd/cli/schedule/create.go 第 44 行明确指出 using UTC time。v0.9.0 文档给出了标准五段式 Cron 的位置与取值范围字符位置字符含义可接受值1分钟Minute0-59, *2小时Hour0-23, *3每月第几天Day of Month1-31, *4月份Month1-12, *5每周第几天Day of Week0-7, *官方示例ark create schedule NAME --schedule0 */6 * * *该示例表示每 6 小时触发一次备份在每小时的第 0 分钟执行。v0.9.0 文档同时保留了ark create schedule这一等价的命令别名写法。从源码角度看create子命令通过flags.StringVar(o.Schedule, schedule, o.Schedule, A cron expression specifying a recurring schedule for this backup to run)create.go接收表达式并在创建Schedule对象时将其写入spec.schedule字段见 schedule_types.go 中ScheduleSpec.Schedule的定义A Cron expression defining when to run the Backup。create 专用选项详解参数默认值说明--exclude-namespaces stringArray空从备份中排除的命名空间列表--exclude-resources stringArray空从备份中排除的资源格式为resource.group例如storageclasses.storage.k8s.io--include-cluster-resources optionalBool[true]true是否在备份中包含集群级cluster-scoped资源--include-namespaces stringArray*需要包含的命名空间*表示全部--include-resources stringArray空需要包含的资源格式为resource.group*表示全部资源--label-columns stringArray空在get输出中作为附加列展示的标签列表--labels mapStringString空应用到备份对象上的标签-o, --output string空输出格式create 命令下仅展示对象而不提交到服务端可选table、json、yaml--schedule string必填指定备份运行周期的 Cron 表达式-l, --selector labelSelectornone只备份匹配该标签选择器的资源--show-labelsfalse在输出中显示标签列--snapshot-volumes optionalBool[true]true是否在备份中对 PersistentVolume 做快照--ttl duration720h0m0s30 天备份在可以被垃圾回收前保留的时长其中--ttl默认 30 天即每个由该调度生成的备份在创建 720 小时后才允许被 GC 清理--snapshot-volumes控制是否同时快照持久卷CSI 卷与云提供商原生快照均受此开关约束-o json/yaml可以预先检视将要创建的 Schedule 对象定义非常适合在 CI 中做 dry-run 验证。一个完整的创建示例ark schedule create daily-backup \ --schedule0 2 * * * \ --include-namespacesdefault,app1 \ --include-cluster-resourcestrue \ --ttl168h \ --snapshot-volumestrue \ -n heptio-ark该命令在 UTC 每日 02:00 触发备份仅包含default与app1两个命名空间快照持久卷保留 7 天168 小时。通过-o yaml可预览最终提交的对象例如ark schedule create dry-run --schedule0 2 * * * -o yaml。查询与展示get与describeark schedule get列表视图ark schedule get [flags]参数说明-h, --help帮助信息--label-columns stringArray需要作为附加列显示的标签-o, --output string输出格式默认table可选json、yaml-l, --selector string只显示匹配该标签选择器的调度--show-labels在最后一列显示标签默认表格输出会展示调度的名称、阶段Phase、调度表达式、上次备份时间与年龄。从 API 定义看这些列由 CRD 的 printcolumn 注解生成Status取自.status.phase、Schedule取自.spec.schedule、LastBackup取自.status.lastBackup、Paused取自.spec.paused见 schedule_types.go。-o json/-o yaml则导出完整对象便于审计或二次处理。ark schedule describe单对象详情ark schedule describe [NAME1] [NAME2] [NAME...] [flags]参数说明-h, --help帮助信息-l, --selector string只显示匹配该标签选择器的调度与get不同describe可同时传入多个名称[NAME1] [NAME2] ...并展示更详细的状态信息包括调度的 Phase、LastBackup 时间、LastSkipped 时间以及校验错误ValidationErrors等字段。关于 Phase 状态的理解查询调度时你看到的 Phase 对应 schedule_types.go 中定义的三种枚举值New调度已创建但尚未被 ScheduleController 处理Enabled调度已通过校验将按spec.schedule触发备份FailedValidation调度未通过控制器校验如 Cron 表达式非法不会触发任何备份。当调度处于FailedValidation时应通过describe查看ValidationErrors字段定位具体原因例如 invalid schedule: ...。删除调度ark schedule deleteark schedule delete NAME [flags]delete子命令通过名称删除指定的 Schedule 对象除-h, --help外无额外专属参数全局参数仍全部可用如-n指定命名空间。需要特别注意删除 Schedule 不会自动删除它已经生成的 Backup 对象。从 schedule_controller.go 的submitBackup逻辑可见调度创建备份时只是通过c.Create(ctx, backup)提交独立的 Backup 资源二者生命周期相互独立。若需清理历史备份请另行使用ark backup delete对应 ark_backup_delete.md。源码视角调度控制器如何到点触发备份理解 CLI 参数如何落地关键在于 ScheduleController 的实现pkg/controller/schedule_controller.go。其核心流程如下解析并校验 Cron 表达式控制器通过parseCronSchedule调用cron.ParseStandard解析spec.schedule。源码对空字符串做了防御先检查长度再用recover()包裹cron.Parse因为其对空串会 panic。解析失败时调度进入FailedValidation阶段并记录错误信息第 185-223 行。判定是否到期ifDue→getNextRunTime计算逻辑为取status.lastBackup无则为创建时间与status.lastSkipped中较晚的时间作为基准调用cronSchedule.Next(lastBackupTime)得到下一次运行时刻若当前时间晚于该时刻则认为到期第 286-300 行。避免重叠执行checkIfBackupInNewOrProgress会检查是否存在由该调度创建、且仍处于New或InProgress阶段的备份存在则跳过本次触发避免备份任务重叠堆积第 225-249 行。创建备份并记录时间到期后调用submitBackup通过getBackup生成备份对象并创建随后更新status.lastBackup。备份名称由TimestampedName生成格式为{scheduleName}-{YYYYMMDDHHMMSS}见 schedule_types.go这也是你看到定时备份名称形如daily-backup-20260916020000的原因。此外控制器注释明确指出 Dont attempt to catch up if there are any missed or failed runs第 269-270 行即错过或失败的运行不会补跑只会等待下一个调度时间点。与当前 Velero 版本的衔接v0.9.0 文档中的ark命令在当前仓库中已演变为velero命令但schedule子命令集的语义基本未变velero schedule create NAME --schedule0 */6 * * *创建定时备份velero schedule get/velero schedule describe/velero schedule delete对应查询与删除新增的velero schedule pause/velero schedule unpause可临时暂停/恢复调度对应ScheduleSpec.Paused字段schedule_types.go。对应 CLI 源码位于 pkg/cmd/cli/schedule 目录Schedule CRD 的类型定义与校验约束含kubebuilder:validation:Enum与 printcolumn 注解位于 schedule_types.go控制器完整逻辑可继续阅读 schedule_controller.go 及其测试 schedule_controller_test.go。若要进一步理解备份本身的创建与恢复流程可参考 ark_backup_create 与 ark_restore_create 文档。【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表