ARTICLE DETAIL

资讯详情

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

Velero 定时备份计划命令详解:从 ark schedule create 到 velero schedule create

Velero 定时备份计划命令详解:从 ark schedule create 到 velero schedule create Velero 定时备份计划命令详解从 ark schedule create 到 velero schedule create【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero本文全面解析 Kubernetes 备份工具 Velero其前身为 Heptio Ark中用于创建定时备份计划的命令行指令。在 v0.6.0 时代该命令名为ark schedule create在后继版本中更名为velero schedule create二者语法与选项保持一致。通过本文你将完整掌握该命令的全部参数含义、Cron 表达式与every两种调度写法、实战示例以及其背后 Schedule 自定义资源CRD的底层实现原理从而为集群建立起自动化、可回收的周期性备份能力。命令概述用 Schedule 把备份变成自动化任务在 Velero/Ark 的体系里schedule定时计划是一个与backup备份、restore恢复并列的核心操作类型。它的作用是以固定的时间间隔自动触发备份——正如 v0.6.0 概念文档 所述The schedule operation allows you to back up your data at recurring intervals。一个 Schedule 实际上是 Backup 的包装器wrapper当调度被触发时它会在后台创建对应的 Backup 资源计划创建的备份以SCHEDULE NAME-TIMESTAMP命名其中时间戳格式为YYYYMMDDhhmmss如daily-backup-20260916003000。ark schedule create NAME命令的作用正是创建这样一个 Schedule 自定义资源将其提交给 Kubernetes API Server随后由运行在集群内的 ScheduleController 负责在指定时刻执行备份。关于命令名的版本说明本文基于 v0.6.0 时代的命令参考文档该版本中 CLI 名为ark。在项目演进为 Velero 后CLI 统一更名为velero对应命令变为velero schedule create。从当前仓库的 schedule 子命令实现 可以看到现代版本还扩展了describe、pause、unpause等子命令但create的核心语义与参数始终向下兼容。本文示例以历史命令ark为主同时标注现代写法。命令语法与使用格式原文档给出的命令语法为ark schedule create NAME [flags]NAME必填的 Schedule 名称cobra.ExactArgs(1)强制要求恰好一个位置参数见 create.go创建成功后生成的备份将以该名称加时间戳命名。[flags]用于定义备份模板的过滤范围、快照行为、TTL 等选项下文逐一说明。现代写法为velero schedule create NAME [flags]其Use字段标注为create NAME --schedule并在校验逻辑中强制要求--schedule参数见 create.go当--schedule为空时直接返回错误--schedule is required。核心选项详解完整参数表以下是原文档完整收录的ark schedule create选项每条选项均对应备份模板中的一项配置最终写入 Schedule 的spec.templateBackupSpec字段选项类型默认值含义--exclude-namespacesstringArray空备份中要排除的命名空间列表--exclude-resourcesstringArray空备份中要排除的资源列表格式为resource.group如storageclasses.storage.k8s.io-h, --help--查看 create 命令帮助--include-cluster-resourcesoptionalBooltrue是否在备份中包含集群作用域资源--include-namespacesstringArray*要纳入备份的命名空间列表使用*表示所有命名空间--include-resourcesstringArray空要纳入备份的资源列表格式为resource.group如storageclasses.storage.k8s.io使用*表示所有资源--label-columnsstringArray空逗号分隔的标签列表用于在get输出中作为列展示--labelsmapStringString空应用到备份上的标签键值对-o, --outputstring空输出显示格式。对 create 命令仅展示对象但不提交到服务器。合法值table、json、yaml--schedulestring必填Cron 表达式指定该备份的周期执行计划-l, --selectorlabelSelectornone仅备份匹配该标签选择器的资源--show-labels-false在输出最后一列显示标签--snapshot-volumesoptionalBooltrue是否在备份过程中对 PersistentVolume 做快照--ttlduration720h0m0s备份在被垃圾回收garbage collected前可保留的时长过滤类选项精确控制备份范围--include-namespaces/--exclude-namespaces通过命名空间白名单/黑名单划定备份对象范围。默认包含全部命名空间*排除优先级高于包含。--include-resources/--exclude-resources按resource.group格式控制资源类型例如只备份deployments.apps或排除storageclasses.storage.k8s.io。未指定时默认包含所有资源类型。--include-cluster-resources类型为optionalBool即布尔值可省略写为--include-cluster-resources等效于true也可显式写false关闭。集群作用域资源如 Namespace、ClusterRole是否纳入备份由它决定。-l, --selector按 Kubernetes 标签选择器过滤仅备份符合条件的对象典型用法如--selector appnginx。它写入备份模板的spec.template.labelSelector字段见 create.go。行为类选项快照、TTL 与元数据--snapshot-volumes同样为optionalBool默认true。开启时备份会对集群内的 PersistentVolume 通过云厂商 API 制作磁盘快照在不具备云快照能力的环境如 Minio 本地演示可设为false。该值最终映射到BackupSpec.SnapshotVolumes字段。--ttl指定备份的生存期到达 TTL 后备份资源与其在对象存储中的备份文件会被 GC 控制器一并清理。默认720h0m0s即 30 天可用如2160h0m0s90 天等 Go duration 格式表达。--labels/--label-columns/--show-labels为备份附加自定义标签便于批量检索与运维分类并在ark schedule get时按标签列展示。-o, --output将待创建的 Schedule 对象以table、json或yaml格式打印到终端而不实际提交——适合先预览即将写入集群的 CR 内容。该能力在现代实现中由output.PrintWithFormat完成见 create.go配合output.ClearOutputFlagDefault保证 create 场景下默认为空。调度表达式Cron 语法与 every 写法--schedule是唯一必填参数。现代源码 create.go 的 Long 描述中给出了完整的调度语法说明标准 Cron 表达式UTC 时间调度采用标准的 5 段 Cron 表达式且以UTC 时区解释字段位置含义可接受值1分钟Minute0-59,*2小时Hour0-23,*3日Day of Month1-31,*4月Month1-12,*5星期Day of Week0-6,*例如0 */6 * * *表示每 6 小时整点执行一次每 6 小时的 0 分触发。every 简化语法除 Cron 外调度还支持every duration形式duration 可由秒s、分m、小时h自由组合例如every 2h30m。这一写法更直观适合固定间隔而非某日某时的场景。两者在创建后都会写入 Schedule 的spec.schedule字段由集群内的控制器解析并定时触发。实战示例从最简单的周期备份到精细化策略现代源码 create.go 内置了 4 个官方示例以下全部继承并逐条解释现代命令以velero代替ark即可示例 1每 6 小时备份一次Cron 写法ark schedule create NAME --schedule0 */6 * * *示例 2每 6 小时备份一次every 写法ark schedule create NAME --scheduleevery 6hevery 6h与0 */6 * * *效果等价后者更易读。示例 3每天备份指定命名空间ark schedule create NAME --scheduleevery 24h --include-namespaces web通过--include-namespaces web将备份范围限定到web命名空间避免全集群备份带来的存储开销。示例 4每周备份保留 90 天ark schedule create NAME --scheduleevery 168h --ttl 2160h0m0s每周168 小时一次全量备份TTL 设为 90 天2160 小时配合 GC 自动清理过期备份。预览不提交验证你的参数创建前可用-o yaml预览将要提交的 Schedule 对象确认过滤条件、TTL 等参数无误后再实际创建ark schedule create NAME --scheduleevery 24h --include-namespaces web -o yaml从父命令继承的全局选项ark schedule create还会从父命令ark继承一组日志与连接配置选项原文档完整列出如下--alsologtostderr 日志同时输出到标准错误与文件 --kubeconfig string kubeconfig 文件路径用于连接 Kubernetes API Server。 若未设置依次尝试环境变量 KUBECONFIG 与集群内配置 --log_backtrace_at traceLocation 当日志命中 file:N 时输出堆栈跟踪默认 :0 --log_dir string 日志文件输出目录非空时启用 --logtostderr 日志输出到标准错误而非文件 --stderrthreshold severity 达到该级别及以上的日志输出到 stderr默认 2 -v, --v Level V 日志级别 --vmodule moduleSpec 按文件过滤的 patternN 设置列表其中--kubeconfig在实际使用中最为关键当在集群外执行命令时需通过它或KUBECONFIG环境变量指定目标集群的访问凭据未指定时 CLI 会尝试使用集群内配置即 Pod 内 ServiceAccount 模式。底层原理Schedule 自定义资源与控制器ScheduleSpec 结构体CLI 参数如何落盘ark schedule create的所有选项最终被组装为一个Schedule自定义资源。当前仓库中 schedule_types.go 定义的ScheduleSpec结构清晰地展示了这一点type ScheduleSpec struct { // Template 是定义在该调度上运行的 Backup 的模板 Template BackupSpec json:template // Schedule 是定义何时运行 Backup 的 Cron 表达式 Schedule string json:schedule // UseOwnerReferencesInBackup 指定是否在由该 Schedule 创建的 // Backup 上使用 OwnerReferences若为 true删除 Schedule 时其 // 创建的备份也会一并删除 UseOwnerReferencesInBackup *bool json:useOwnerReferencesInBackup,omitempty // Paused 指定该调度是否暂停 Paused bool json:paused,omitempty ... }可以看到--schedule、--ttl、--include-namespaces、--snapshot-volumes等 CLI 选项全部落入spec.template即BackupSpec而调度表达式本身单独存于spec.schedule——这正是现代实现中 create.go 的 Run 函数 组装对象的字段映射IncludedNamespaces、SnapshotVolumes、TTL、LabelSelector等逐项对应BackupOptions中的同名选项。控制器协作与生命周期Schedule 资源的生命周期由三个阶段Phase标记New已创建、尚未被控制器处理、Enabled校验通过、按计划触发备份、FailedValidation未通过校验、不会触发备份定义见 schedule_types.go。集群内的 ScheduleController 持续监听这些资源按spec.schedule计算下一次触发时间并在到期时以模板创建 Backup。此外服务端通过scheduleSyncPeriodv0.6.0 默认1m0s周期性地检查 Schedule 资源是否到期该参数在 Config 定义文档 中有明确说明——因此新创建的 Schedule 最长约一个同步周期后才会被检测并生效。行为细节与注意事项创建即触发根据 concepts.md 的说明Schedule 在首次创建时就会立即执行一次备份此后按周期触发。若希望创建后先静默可在现代版本中使用--paused或后续的velero schedule pause子命令。命名规则由计划生成的备份命名为SCHEDULE NAME-TIMESTAMP时间戳为YYYYMMDDhhmmss可在ark backup get中与手动备份区分。备份非严格原子计划触发的备份同样遵循 Backup 的一般特性集群对象在备份瞬间的变更可能被包含或遗漏快照过程为异步执行因此命令返回快、不受卷大小影响。相关命令与后续管理创建完成后的 Schedule 管理命令如下现代 CLI 均已实现参见 schedule 子命令目录 与 v0.6.0 的 ark schedule 参考命令用途ark schedule get列出当前集群中的所有 Schedule 及其状态ark schedule describe NAME查看某个 Schedule 的详细配置与最近执行情况ark schedule delete NAME删除 Schedule现代版本中若创建时启用use-owner-references-in-backup其产生的备份也会级联删除ark schedule pause/unpause NAME现代版本暂停/恢复某个计划暂停期间不再触发备份结合ark backup get与 TTL 机制你可以构建定时备份 自动过期清理的完整数据保护闭环为集群提供持续的灾备保障。本文涉及的仓库文件索引命令参考原文档site/content/docs/v0.6.0/cli-reference/ark_schedule_create.md现代命令实现含示例与校验pkg/cmd/cli/schedule/create.goSchedule 子命令注册pkg/cmd/cli/schedule/schedule.goSchedule CRD 结构定义pkg/apis/velero/v1/schedule_types.goSchedule 操作概念说明site/content/docs/v0.6.0/concepts.md服务端scheduleSyncPeriod等配置参数site/content/docs/v0.6.0/config-definition.md【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表