ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

Velero Schedule Create 命令详解:用 Cron 表达式自动化 Kubernetes 备份

Velero Schedule Create 命令详解:用 Cron 表达式自动化 Kubernetes 备份 Velero Schedule Create 命令详解用 Cron 表达式自动化 Kubernetes 备份【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero导读本文基于 Velero 仓库中ark schedule create现为velero schedule create的命令参考文档系统讲解如何用 Cron 表达式创建周期性的 Kubernetes 备份任务。你将掌握velero schedule create的完整语法、全部选项的语义与默认值、Cron 表达式规范与every扩展写法并深入了解该命令背后 Schedule CRD 对象与 Schedule Controller 的调度实现原理。读完本文你可以直接写出可运行的生产级备份调度命令并懂得如何用-o yaml预检配置、用--paused与--skip-immediately精确控制触发时机。一、命令概述与基本语法velero schedule create用于创建一个 Schedule 自定义资源CRD它描述何时执行何种备份通过 Cron 表达式指定周期通过备份模板Template指定每次备份的具体行为包含哪些命名空间、是否快照卷、TTL 等。命令的基本语法为velero schedule create NAME --schedule [flags]注本文对应仓库文档最早以 Ark 项目名义发布因此原文档标题为ark schedule create默认命名空间为heptio-ark项目演进为 Velero 后命令统一为velero schedule create默认命名空间为velero。当前仓库源码中的全部示例均使用velero前缀见 pkg/cmd/cli/schedule/create.go。参数约束NAME是必填的位置参数命令通过cobra.ExactArgs(1)强制要求恰好一个参数create.go--schedule是必填 flag代码在Validate阶段检查若为空直接报错--schedule is requiredcreate.goSchedule 名称需符合 Kubernetes DNS-1123 子域规范由底层 Backup 选项的validation.IsDNS1123Subdomain校验见 pkg/cmd/cli/backup/create.go。二、Cron 表达式规范--schedule 核心语法--schedule使用标准 5 段式 Cron 表达式各字段定义如下来源于命令的 Long 描述见 create.go字符位置时间段可接受值1分钟Minute0-59, *2小时Hour0-23, *3每月第几日Day of Month1-31, *4月份Month1-12, *5每周第几日Day of Week0-7, *注意两点细节时区当前仓库源码中Long描述明确标注表达式使用 UTC 时间using UTC time原文档未提及此点实际以源码为准。而原文档中第 5 位 Day of Week 的可接受值为0-7,*源码最新版本为0-6,*两者均为合法区间0 与 7 通常都表示周日使用者应依据自己所装版本确认。校验方式Schedule Controller 在服务端使用cron.ParseStandard解析表达式若解析失败Schedule 进入FailedValidation状态且不会触发备份详见下文第五节。every 扩展写法除标准 Cron 表达式外--schedule还支持every duration语法duration 可由秒s、分钟m、小时h组合例如--scheduleevery 2h30m这种写法适合每隔固定时长备份一次的场景语义直观、无需换算成 Cron 字段。三、常用示例以下示例均来自源码Example字段create.go可直接复制运行# 每 6 小时创建一次备份 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 2160h0m0s注意源码示例中保留了velero create schedule这种旧式书写create与schedule顺序与最终子命令略有出入当前主命令的标准写法为velero schedule create NAME ...两种形式在功能上等价本文其余示例统一采用标准写法。四、Options 全量参考创建命令专属选项原文档列出的选项与当前仓库实现高度一致以下按语义分组整理并补充源码中的默认值与约束选项类型/默认值说明--schedule stringstring必填Cron 表达式指定备份的重复执行周期create.go--include-namespaces stringArray默认*要备份的命名空间*表示全部backup/create.go--exclude-namespaces stringArray默认空从备份中排除的命名空间--include-resources stringArray默认空要备份的资源格式为resource.group如storageclasses.storage.k8s.io*表示全部资源--exclude-resources stringArray默认空要从备份中排除的资源同样采用resource.group格式--include-cluster-resources optionalBool[true]默认未设置是否备份集群范围资源不加值时视为trueNoOptDefVal机制见 backup/create.go--snapshot-volumes optionalBool[true]默认未设置是否对 PersistentVolume 做快照仅写--snapshot-volumes即等价于truebackup/create.go--ttl duration默认720h0m0s30 天备份可被垃圾回收前的存活时长--selector / -l labelSelector默认none只备份匹配该标签选择器的资源--labels mapStringString默认空应用到备份对象上的标签--label-columns stringArray默认空输出时作为列的逗号分隔标签列表--show-labelsbool在最后一列显示标签-o, --output string默认空输出格式对 create 类命令仅展示对象而不发送到服务端合法值为table、json、yaml-h, --help—create 子命令帮助其中optionalBool[true]的含义是该 flag 为三态——不写、写true、写false均有独立语义。以--snapshot-volumes为例源码注释说明参数未设置时视为truebackup/create.go而--include-cluster-resources未设置时则由服务端默认值决定。继承自父命令的选项选项说明--kubeconfig stringkubeconfig 文件路径未设置时依次尝试环境变量KUBECONFIG与集群内配置--kubecontext string与 apiserver 通信所用上下文未设置时使用当前上下文kubectl config current-context-n, --namespace stringVelero 操作所在的命名空间Ark 时代默认heptio-ark--logtostderr/--alsologtostderr/--log_dir string/--log_backtrace_at/--stderrthreshold severity默认 2/-v, --v Level/--vmodule moduleSpec标准 glog 日志控制选项新版仓库中额外提供的选项当前仓库的CreateOptions还支持原文档未收录的若干选项例如--paused新建的 Schedule 是否立即暂停见 create.go--skip-immediately是否立即跳过下一次到期的备份skip_options.go--storage-location、--volume-snapshot-locations指定备份存储位置与卷快照位置--csi-snapshot-timeout、--item-operation-timeout、--data-mover、--default-volumes-to-fs-backup、--ordered-resources等备份级高级选项完整清单见 backup/create.go。五、命令背后的实现Schedule CRD 与控制器velero schedule create的底层动作是构造并提交一个Schedule自定义资源。从 Run 方法 可以看到完整链路通过f.KubebuilderClient()获取 controller-runtime 客户端将全部 flag 组装进api.ScheduleSpecTemplate字段完整承载了备份模板命名空间、资源、选择器、快照、TTL、存储位置等Schedule字段存放 Cron 表达式若指定了-o yaml|json|table则先打印对象但不提交output.PrintWithFormat否则调用crClient.Create把 Schedule 写入集群并输出Schedule NAME created successfully.。ScheduleSpec 结构Schedule 的规格定义见 pkg/apis/velero/v1/schedule_types.go关键字段包括Template BackupSpec每次触发时创建 Backup 所依据的模板Schedule stringCron 表达式UseOwnerReferencesInBackup *bool若为 trueSchedule 被删除时其产生的 Backup 会一并被级联删除源码 flag 帮助文本明确提示了该风险Paused bool暂停标记SkipImmediately *bool暂停恢复后是否跳过立即到期的备份为空时跟随服务端配置默认 false。Schedule Controller 的调度逻辑Schedule 创建后由 pkg/controller/schedule_controller.go 负责驱动核心流程为校验与状态流转控制器用cron.ParseStandard解析表达式对空表达式/解析 panic 均有防护成功则置Enabled失败则置FailedValidation并填充ValidationErrorsschedule_controller.go到期判断getNextRunTime以LastBackup或LastSkipped取较新者为基准计算下一次执行时间超过该时间即视为到期schedule_controller.go防重入checkIfBackupInNewOrProgress会检查是否存在该 Schedule 产生的、仍处于New/InProgress状态的备份存在则本次跳过避免备份任务重叠执行schedule_controller.go创建备份submitBackup调用getBackup生成备份对象名称格式为schedule名-UTC时间戳TimestampedName实现于 schedule_types.go创建后更新LastBackup时间schedule_controller.go。此外控制器对暂停的 Schedule 直接跳过处理SetupWithManager 中的 Predicate见 schedule_controller.go且不会追赶错过的执行——源码注释明确说明如果存在漏跑或失败的运行不会试图追赶只在到点触发备份。六、实践建议与验证手段创建前用-o yaml预检velero schedule create daily-backup --schedule0 2 * * * -o yaml只会打印将提交的 Schedule 对象而不会写集群适合核对命名空间、TTL、快照开关等配置是否符合预期该行为由-o/--output的语义保证。用--include-namespaces收窄范围默认备份全部命名空间生产环境建议显式列出目标命名空间配合--exclude-namespaces排除敏感命名空间。TTL 按保留策略设置默认 30 天720h0m0s需长期保留的备份可像示例那样显式加大。观察调度是否生效创建后可用velero schedule get查看状态若显示FailedValidation可执行velero schedule describe查看具体校验错误成功启用后到点会生成名为schedule-时间戳的 Backup 对象。暂停与恢复需要临时停用备份如维护窗口可用velero schedule pause/velero schedule unpause配合--skip-immediately可控制恢复后是否立即补跑。总结velero schedule create是 Velero 定时备份能力的入口它把备份内容Template与执行节奏Cron/every封装为一个 Schedule 自定义资源再由 Schedule Controller 在集群内可靠地驱动生成 Backup。掌握本命令的完整选项与背后机制即可将 Kubernetes 应用的周期性保护纳入自动化体系。【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表