
Velero 定时备份命令参考create schedule 从 Cron 表达式到 Schedule CRD 的完整解析【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero本文基于 Velero v0.5.0 时期文档ark create scheduleCLI 参考页编写完整覆盖该命令的用法、全部选项及其继承的全局选项并结合当前仓库的 create.go 与 schedule_types.go 源码讲清该命令如何把命令行参数映射为 Schedule CRD 对象、以及定时备份的生命周期机制。读完后你可以直接用该命令创建周期性备份并理解每个选项在 API 对象中的落点。1. 命令概述从 ark 到 velero在 Velero 0.5.0 时代CLI 二进制名为ark创建定时备份的命令为ark create schedule。随着项目更名当前仓库中该命令的等价形式是velero create schedule命令实现位于 pkg/cmd/cli/schedule/create.go。命令的基本用法为velero create schedule NAME [flags]v0.5.0 文档中写作ark create schedule NAME [flags]见 ark_create_schedule.md。从源码结构看cobra 命令的Use字段声明为use NAME --schedulecreate.go#L42且Args校验为cobra.ExactArgs(1)create.go#L69即必须且只能提供一个 Schedule 名称--schedule表达式则是必填项Validate中若其长度为 0 会直接报错--schedule is requiredcreate.go#L110-L116。2. 完整选项参考v0.5.0 文档版以下为 v0.5.0 官方文档中create schedule的全部选项逐项继承不删减。stringArray、optionalBool等类型标记来自 pflag/cobra 的自动文档生成选项类型说明默认值--exclude-namespacesstringArray要从备份中排除的命名空间—--exclude-resourcesstringArray要从备份中排除的资源格式为 resource.group如storageclasses.storage.k8s.io—-h, --help—schedule 的帮助信息—--include-cluster-resourcesoptionalBool在备份中纳入集群级cluster-scoped资源trueoptionalBool[true]--include-namespacesstringArray要纳入备份的命名空间用*表示全部*--include-resourcesstringArray要纳入备份的资源格式为 resource.group如storageclasses.storage.k8s.io用*表示全部资源—--label-columnsstringArray以列形式展示的标签的逗号分隔列表—--labelsmapStringString应用到备份上的标签—-o, --outputstring输出显示格式。对 create 类命令仅打印对象但不提交到服务端。可用格式为table、json、yaml—--schedulestring以 cron 表达式指定该备份的周期性计划—-l, --selectorlabelSelector仅备份匹配该标签选择器的资源none--show-labels—在最后一列显示标签—--snapshot-volumesoptionalBool备份时是否对 PersistentVolume 做快照trueoptionalBool[true]--ttlduration备份在被垃圾回收之前可以存活多久24h0m0s2.1 继承自父命令的选项v0.5.0 文档列出的继承自父命令的全局选项如下均为 glog 日志与 kubeconfig 相关选项说明默认值--alsologtostderr日志同时输出到标准错误与文件—--kubeconfig与 Kubernetes apiserver 通信所用 kubeconfig 文件路径。若未设置则尝试环境变量KUBECONFIG以及集群内配置—--log_backtrace_at当日志命中 file:N 这一行时输出堆栈跟踪:0--log_dir若非空日志文件写入该目录—--logtostderr日志输出到标准错误而非文件—--stderrthreshold达到该阈值及以上的日志写入 stderr2-v, --vV 级别日志的日志等级—--vmodule用于文件级过滤日志的patternN逗号分隔列表—2.2-o选项的行为印证文档说明-o对 create 命令“打印对象但不提交服务端”。这一点在源码中得到印证Run中先调用output.PrintWithFormat(c, schedule)若printed为 true 则直接return不再执行后续的crClient.Createcreate.go#L184-L191。因此velero create schedule daily -o yaml是一个安全的“干跑”方式可用于审查即将创建的 Schedule 对象。3. 调度表达式cron 五段式与 every命令的 Long 描述create.go#L44-L56明确了两点cron 表达式使用 UTC 时间且支持every duration语法。3.1 cron 表达式字段字符位置字段含义可接受值1分钟 (Minute)0-59, *2小时 (Hour)0-23, *3日 (Day of Month)1-31, *4月 (Month)1-12, *5星期 (Day of Week)0-6, *3.2 every 语法除标准 cron 外表达式还可以写成every duration形式duration 由秒s、分m、时h组合而成例如every 2h30m。3.3 官方示例以下 4 个示例直接取自命令实现的Example字段create.go#L58-L68覆盖两种表达式风格与过滤、TTL 组合# 每 6 小时创建一次备份cron 五段式。 velero create schedule NAME --schedule0 */6 * * * # 用 every 记法实现同样的每 6 小时一次。 velero create schedule NAME --scheduleevery 6h # 每天备份 web 命名空间。 velero create schedule NAME --scheduleevery 24h --include-namespaces web # 每周备份一次每个备份保留 90 天2160 小时。 velero create schedule NAME --scheduleevery 168h --ttl 2160h0m0s4. 源码级实现选项如何变成 Schedule 对象4.1 选项结构复用 backup 的 CreateOptionscreate schedule的选项结构体CreateOptions内嵌了备份命令的BackupOptionscreate.go#L87-L93。这正是第 2 节那些 namespace/resource/labels/ttl 等选项与backup create完全一致的原因——调度命令本质上是一个“带模板的备份工厂”type CreateOptions struct { BackupOptions *backup.CreateOptions SkipOptions *SkipOptions Schedule string UseOwnerReferencesInBackup bool Paused bool }BindFlagscreate.go#L102-L108在复用备份选项之外额外绑定三个调度专属参数新增选项类型说明--schedulestringcron 表达式指定周期性计划--use-owner-references-in-backupbool是否为该 Schedule 生成的 Backup 设置 OwnerReferences。注意设为 true 后删除 schedule 会连带删除其生成的备份--pausedbool新建的 schedule 是否处于暂停状态备份侧选项的完整绑定逻辑见 backup/create.go#L144-L181例如--snapshot-volumes与--include-cluster-resources都通过NoOptDefVal cmd.TRUE实现了“单独写出--snapshot-volumes即等价于true”的 optionalBool 语义backup/create.go#L163-L175与 v0.5.0 文档中optionalBool[true]的类型标记相互印证。4.2 执行流程组装 spec 并提交Run函数create.go#L122-L195的核心流程从client.Factory获取 kubebuilder client将各选项值逐一映射进api.Schedule.Spec--include-namespaces→Template.IncludedNamespaces--exclude-namespaces→Template.ExcludedNamespaces--include-resources/--exclude-resources→Template.IncludedResources/Template.ExcludedResources-l选择器 →Template.LabelSelector--snapshot-volumes→Template.SnapshotVolumes--ttl→Template.TTL以及命名空间固定为 factory 的f.Namespace()即 velero 部署所在命名空间通常为velerov0.5.0 时代为ark将--schedule表达式写入Spec.Schedule同时写入UseOwnerReferencesInBackup与Paused支持-o干跑后直接返回否则调用crClient.Create提交成功时打印Schedule %q created successfully.create.go#L193。其中Template的类型就是BackupSpeccreate.go#L143-L166也就是说 Schedule 的 spec 模板与一次普通备份的 spec 完全同构——定时备份每次触发时服务端即按此模板实例化出一个具体的 Backup。5. Schedule CRD字段、阶段与打印列调度资源的 API 定义在 pkg/apis/velero/v1/schedule_types.go。5.1 ScheduleSpec 字段字段类型说明源码注释摘译templateBackupSpec将在给定计划上执行的备份定义schedule_types.go#L28-L30schedulestring定义备份运行时间的 Cron 表达式useOwnerReferencesInBackup*bool是否为生成的备份使用 OwnerReferencespausedbool该 schedule 是否被暂停skipImmediately*bool新建或取消暂停时若已到期是否跳过本次、顺延到下个计划时间为空时跟随服务端配置默认 falseschedule_types.go#L46-L515.2 生命周期阶段与状态SchedulePhase为枚举类型取值三个schedule_types.go#L56-L71NewSchedule 已创建但尚未被 ScheduleController 处理Enabled已通过校验将按计划触发备份FailedValidation未通过控制器校验不会触发备份。ScheduleStatus记录phase、lastBackup上次运行备份的时间、lastSkipped上次跳过时间与validationErrorsschedule_types.go#L74-L94。5.3 kubectl 打印列与命名规则从 kubebuilder 注解可见kubectl get sched会额外展示 Status、Schedule、LastBackup、Age、Paused 五列且资源短名为schedschedule_types.go#L102-L107。另有一个值得注意的实现细节由 schedule 派生的备份命名通过TimestampedName生成格式为schedule名-YYYYMMDDHHMMSSschedule_types.go#L138-L141这解释了为什么每次定时触发的备份名都带 14 位 UTC 时间戳后缀。6. v0.5.0 文档与当前仓库的差异说明v0.5.0 文档反映的是ark时期的选项集当前仓库实现veleroCLI在其上做了扩展阅读旧文档对照源码时需注意新增调度选项--paused、--use-owner-references-in-backup以及SkipOptions引入的--skip-immediatelycreate.go#L102-L108新增备份模板选项--storage-location、--volume-snapshot-locations并注册了名称补全函数create.go#L81-L82、细粒度资源过滤--include-cluster-scoped-resources等与旧参数互斥互斥校验见 backup/create.go#L235-L239、--ordered-resources、--resource-policies-configmap等默认值演变v0.5.0 文档标注--ttl默认24h0m0s当前源码中该 flag 以CreateOptions的零值作为默认绑定backup/create.go#L145因此以当前仓库为准的默认行为可能不同使用时建议显式指定--ttl选项归属变化--label-columns、--show-labels属于 v0.5.0 文档中的 get 类展示选项当前 create 命令并未绑定。7. 相关命令SEE ALSO按 v0.5.0 文档的 SEE ALSO 指向调度相关的命令族包括均以仓库根目录相对路径给出ark create — 创建 ark 资源ark schedule — 管理 schedulesark schedule create — 创建 scheduleark schedule get / ark schedule delete — 查看与删除 schedule。结合当前仓库创建后还可通过velero backup create --from-schedule name立即按该模板手动触发一次备份见 backup/create.go#L291-L293 的--from-schedule定义。8. 小结create schedule命令的价值在于把“备份范围选项”与“调度策略”合并成一个声明式资源所有过滤选项namespaces/resources/selector/labels/ttl原样落入spec.template调度表达式落入spec.schedule最终由服务端控制器按 cronUTC周期实例化 Backup。掌握第 2 节的完整选项表、第 3 节的两种表达式写法以及第 5 节的 CRD 阶段与状态字段即可独立完成从创建、干跑校验-o yaml、查看阶段kubectl get sched到暂停/删除的全流程操作。【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考