完整指南:从 `ark delete schedule` 到 `velero schedule delete`)
Velero/Ark 删除备份计划Schedule完整指南从ark delete schedule到velero schedule delete【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero本指南以 ArkVelero 的前身v0.8.1 的 CLI 参考文档 ark delete schedule 为骨架系统讲解如何删除 Kubernetes 备份计划Schedule并对照当前仓库源码解析velero schedule delete的完整实现——包括按名称删除、--confirm免确认、--selector标签批量删除、--all全量删除以及交互式确认机制。读完本文你将掌握在 Ark/Velero 中安全、精确地移除定时备份计划并理解删除计划与清理已有备份之间的边界。一、背景Schedule 在 Velero/Ark 中的角色在 Ark/Velero 中Schedule是一个可重复触发备份的 API 资源。它本质上是一条定时备份请求用户以 cron 表达式声明触发时刻Velero Server 一旦创建该计划便会启动备份流程随后等待下一个符合 cron 表达式的时刻并再次执行备份如此往复。从 Schedule API 类型文档 可以看到它的核心控制字段paused为true时计划暂停不再产生新备份恢复为false后按 cron 继续。skipImmediately创建或恢复计划时若备份立即到期是否跳过本次立即执行的备份一次性标志消费后自动复位。template该计划触发的每个备份所使用的 Backup spec 模板包含命名空间、资源、TTL、存储位置等。正因为 Schedule 会无限期地按 cron 产生备份运维中常见的删除场景包括备份策略调整更换 cron 频率或备份范围、临时计划使命完成、误创建的计划需要清理、以及希望彻底停止某条自动化备份链路。Ark 提供了delete子命令来执行这一操作。二、v0.8.1 时代ark delete schedule命令参考原文核心内容在 v0.8.1 版本中CLI 工具名为arkheptio-ark默认命名空间为heptio-ark。该版本对应的命令参考文档 ark_delete_schedule.md 是本文的直接依据。2.1 命令语法Synopsisark delete schedule NAME [flags]命令语义即删除一个备份计划Delete a schedule位置参数NAME指定要删除的计划名称。2.2 命令级 Options选项说明-h, --help显示schedule子命令的帮助信息2.3 继承自父命令的全局 Options这些选项由父命令ark根命令注入delete schedule同样可用选项说明--alsologtostderr同时将日志写入标准错误与文件--kubeconfig string用于连接 Kubernetes apiserver 的 kubeconfig 文件路径若未设置则依次尝试环境变量KUBECONFIG与集群内配置--kubecontext string连接 Kubernetes apiserver 时使用的上下文未设置时默认使用当前上下文即kubectl config current-context的值--log_backtrace_at traceLocation当日志命中file:N时输出堆栈跟踪默认:0--log_dir string非空时将日志文件写入该目录--logtostderr将日志写入标准错误而非文件-n, --namespace stringArk 操作的命名空间默认heptio-ark--stderrthreshold severity达到或超过该级别的日志输出到标准错误默认 2-v, --v LevelV 日志verbose log的日志级别--vmodule moduleSpec逗号分隔的patternN规则列表用于按文件过滤日志2.4 命令树中的位置ark delete schedule是ark delete的子命令。根据 ark_delete.mdark delete下还有ark delete backup删除备份、ark delete restore删除恢复等兄弟命令而ark schedule本身则包含create、delete、describe、get四个子命令见 ark_schedule.md。值得一提的是v0.8.1 同时支持动词-对象与对象-动词两种命令形态见 ark.md既可以执行ark delete schedule也可以执行ark schedule delete二者等价。三、现代 Velero 的velero schedule delete源码级解析随着 Ark 更名为 VeleroCLI 也由ark变为velero默认命名空间由heptio-ark变为velero。当前仓库中删除计划的实现位于 pkg/cmd/cli/schedule/delete.go功能在 v0.8.1 基础上有了显著增强。3.1 命令注册与参数绑定NewDeleteCommand函数delete.go创建名为delete [NAMES]的 cobra 命令并通过cli.NewDeleteOptions(schedule)构造共享的删除选项随后o.BindFlags(c.Flags())完成标志绑定。命令在 schedule.go 中与create、get、describe、pause、unpause一起挂载到velero schedule之下。DeleteOptions定义在 pkg/cmd/cli/delete_options.gotype DeleteOptions struct { *SelectOptions confirm.ConfirmOptions Client controllerclient.Client Namespace string }它内嵌了两组选项SelectOptionspkg/cmd/cli/select_option.go提供Names名称列表、--all标志与--selector/-l标签选择器决定删哪些计划。ConfirmOptionspkg/cmd/util/confirm/confirm.go提供--confirm布尔标志决定是否跳过确认提示。3.2 目标选择三选一名称 /--all/--selectorSelectOptions.Validateselect_option.go通过一个xor互斥校验强制约束必须且只能指定一种删除范围——要么给出具体名称要么指定--all要么指定--selector否则报错you must specify exactly one of: specific schedule name(s), the --all flag, or the --selector flag在Run函数delete.go中执行逻辑按此三选一分支展开若传入NAMES逐个通过o.Client.Get按命名空间名称获取Schedule对象否则默认分支将--selector转换为metav1.LabelSelectorAsSelector未指定时退化为labels.Everything()通过o.Client.List拉取匹配的ScheduleList。3.3 交互式确认机制删除是破坏性操作命令默认要求人工确认。核心逻辑在Run的开头delete.goif !o.Confirm !confirm.GetConfirmation() { return nil }即未加--confirm时会调用 confirm.go 中的GetConfirmation在终端输出提示Are you sure you want to continue (Y/N)?读取用户输入输入y不区分大小写继续删除输入n则直接返回不执行任何操作非法输入会循环重问。这在批量删除或全量删除场景下是一道重要的安全闸门。3.4 执行与输出确定目标集合后Run对每个Schedule调用o.Client.Delete通过 controller-runtime client成功则打印Schedule deleted: name单个对象的失败不会中断整体流程而是被收集进错误聚合器kubeerrs.NewAggregate最终一次性返回。若集合为空则输出No schedules found并正常返回。3.5 完整用法示例来自命令自带 Examplevelero schedule delete在源码中自带了覆盖各场景的示例delete.go# 删除名为 schedule-1 的计划会先弹出确认提示 velero schedule delete schedule-1 # 删除 schedule-1跳过确认提示适合脚本自动化 velero schedule delete schedule-1 --confirm # 一次删除多个计划 velero schedule delete schedule-1 schedule-2 # 删除所有带标签 foobar 的计划 velero schedule delete --selector foobar # 删除所有计划 velero schedule delete --all此外c.ValidArgsFunction cli.CompleteScheduleNames(f)为命令提供了名称自动补全能力交互式 Shell 下可按 Tab 自动补齐现存计划名。四、删除 Schedule 的影响边界已有备份会怎样这是运维中最关心的问题删除计划后它之前产生的备份会一起消失吗4.1 默认行为只删计划不删备份默认情况下Schedule与它触发的Backup是相互独立的资源。删除计划只是切断了未来按 cron 触发备份的链路已经产生的备份及其数据对象存储中的 tarball、卷快照等不会被删除。若需清理已有备份需另行执行velero backup delete对应命令参考见 ark_delete_backup 中的关联文档当前实现见 pkg/cmd/cli/backup/delete.go。4.2useOwnerReferencesInBackup级联删除开关在后续版本中Schedule 增加了useOwnerReferencesInBackup字段见 Schedule API 类型文档当该字段为true时计划产生的备份会带有对 Schedule 的 OwnerReference此时删除 ScheduleKubernetes 的垃圾回收机制会级联删除这些备份。该字段默认为false且文档明确提示if set to true, when schedule is deleted, backups will be deleted too.因此在开启此字段前务必确认这些备份已不再需要或已通过其他方式保留数据。4.3 与 pause 的取舍如果只是想暂时停止而不是永久移除某条备份计划现代 Velero 提供了更温和的替代方案velero schedule pause与velero schedule unpause注册于 schedule.go。暂停paused: true会停止产生新备份但保留计划定义随时可以恢复而delete则是彻底删除资源。根据业务需要二选一即可。五、实战演练完整的删除流程以下为一次典型删除操作的全过程以 v0.8.1 的ark命令为准现代 Velero 将ark替换为velero、heptio-ark替换为velero即可。步骤 1查看现有计划先通过ark schedule get参考 ark_schedule_get.md确认计划名称与状态ark schedule get步骤 2确认要删除的计划结合ark schedule describe NAME查看计划详情确保删除对象正确、确认 cron 表达式与备份模板符合预期。步骤 3执行删除ark delete schedule NAME命令会输出确认提示输入y后执行删除脚本场景下可加--confirmark delete schedule NAME --confirm步骤 4验证结果再次执行ark schedule get确认目标计划已从列表中消失同时按需确认该计划历史产生的备份仍然存在未被意外级联删除。步骤 5跨命名空间与集群上下文若 Velero Server 部署在非默认命名空间或需操作其他集群可借助全局选项ark delete schedule NAME -n namespace --kubeconfig path --kubecontext context六、小结ark delete schedule NAME [flags]即今天的velero schedule delete用于删除定时备份计划v0.8.1 时默认命名空间为heptio-ark。现代实现支持按名称、--selector标签选择器、--all三种互斥的删除范围见 select_option.go 的 xor 校验。删除默认需要交互确认--confirm可跳过相关实现见 confirm.go 与 delete.go。删除计划默认不影响已有备份仅当 Schedule 开启useOwnerReferencesInBackup时备份会随计划级联删除。如需临时停用而非删除优先考虑velero schedule pause/unpause。围绕删除计划这一操作本指南同时覆盖了 v0.8.1 命令参考的原始内容与现代源码实现读者可进一步结合 ark_delete_schedule.md、ark_schedule_create.md 与 Schedule API 类型文档 深入理解计划的创建、查询与删除全链路。【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考