资讯动态

Velero CLI 备份删除命令完全指南:`velero backup delete` 的用法、参数与源码解析

发布时间:2026/9/16 11:51:42 来源:尧图企业网站定制
Velero CLI 备份删除命令完全指南velero backup delete的用法、参数与源码解析【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero导读本文围绕 Velero早期名为 ArkCLI 中的velero backup delete旧版本为ark backup delete命令展开系统讲解如何安全、批量地删除 Kubernetes 集群备份及其关联的对象存储数据。读完本文你将掌握该命令的完整语法、全部可用参数、命名行删除 / 标签选择器批量删除 / 全量删除三种典型用法以及删除确认机制、只读存储位置保护、异步删除请求DeleteBackupRequest等底层实现原理并能够结合源码定位命令处理链路。一、命令概览Delete a backupvelero backup delete命令的作用是删除一个备份Delete a backup它属于velero backup命令族的子命令。在历史版本v0.7.x 时代项目名为 Ark中该命令名为ark backup delete当前仓库中命令名已演进为velero backup delete但其命令行语义与 v0.7.1 文档保持一致。从当前仓库的 CLI 定义看该子命令注册于 pkg/cmd/cli/backup/delete.go其Short描述为 Delete backups并内置了多个可直接参考的示例Example# 删除名为 backup-1 的备份 velero backup delete backup-1 # 删除名为 backup-1 的备份且不弹出确认提示 velero backup delete backup-1 --confirm # 同时删除 backup-1 和 backup-2 两个备份 velero backup delete backup-1 backup-2 # 删除由 schedule-1 定时计划触发的所有备份 velero backup delete --selector velero.io/schedule-nameschedule-1 # 删除所有备份 velero backup delete --all1.1 基本语法velero backup delete NAME [flags]即velero backup delete 备份名称后跟若干可选 flag。二、完整参数说明2.1 命令自身选项v0.7.1 文档中该命令自身的选项只有一个-h, --help help for delete即-h/--help用于查看帮助信息。随着命令演进当前版本的命令还通过 DeleteOptions 绑定了两组对实际删除操作至关重要的 flag确认类继承自 pkg/cmd/util/confirm/confirm.goFlag类型说明--confirmbool跳过交互式确认提示直接执行删除选择类继承自 pkg/cmd/cli/select_option.goFlag缩写类型说明--all无bool删除所有备份--selector-lstring只删除匹配该标签选择器的备份注意这三类选择方式指定名称、--all、--selector是互斥的必须且只能指定其中一种否则命令校验会直接报错详见下文源码解析。2.2 继承自父命令的全局选项ark backup delete同样继承ark父命令的全部全局参数用于配置 Kubernetes 连接与日志输出--alsologtostderr log to standard error as well as files --kubeconfig string Path to the kubeconfig file to use to talk to the Kubernetes apiserver. If unset, try the environment variable KUBECONFIG, as well as in-cluster configuration --log_backtrace_at traceLocation when logging hits line file:N, emit a stack trace (default :0) --log_dir string If non-empty, write log files in this directory --logtostderr log to standard error instead of files -n, --namespace string The namespace in which Ark should operate (default heptio-ark) --stderrthreshold severity logs at or above this threshold go to stderr (default 2) -v, --v Level log level for V logs --vmodule moduleSpec comma-separated list of patternN settings for file-filtered logging关键参数说明--kubeconfig指定访问 Kubernetes apiserver 的 kubeconfig 路径若未设置则依次尝试环境变量KUBECONFIG和集群内配置in-cluster configuration。CLI 侧可参考 pkg/client/config.go 的配置解析实现。-n, --namespaceVelero 操作所在的命名空间默认值为heptio-ark当前版本默认命名空间为velero。备份资源与备份存储位置BackupStorageLocation都从该命名空间读取。--logtostderr/--log_dir/-v等标准 glog 风格日志参数用于控制日志输出位置与详细级别。三、典型使用场景与操作步骤3.1 删除单个备份velero backup delete my-backup执行后 CLI 会首先通过confirm.GetConfirmation()交互式地向终端输出确认提示Are you sure you want to continue (Y/N)?输入Y后命令才会真正发起删除请求输入N则直接中止不会产生任何副作用。交互逻辑定义在 pkg/cmd/util/confirm/confirm.go它从标准输入读取单字符并循环校验只接受y/Y与n/N。3.2 非交互式删除脚本中使用velero backup delete my-backup --confirm--confirm直接跳过确认环节适用于 CI/CD 流水线或脚本自动化场景。3.3 批量删除多个备份velero backup delete backup-1 backup-2命令依次对每个名称执行查找与删除请求某个名称不存在不会阻塞其他备份的删除而是会收集错误并在最终统一返回详见源码解析。3.4 按标签选择器批量删除velero backup delete --selector velero.io/schedule-nameschedule-1删除所有由schedule-1这个定时计划创建出的备份。Velero 在创建计划触发的备份时会打上velero.io/schedule-name标签因此可以用该选择器精准圈定删除范围。选择器语法遵循 Kubernetes LabelSelector 规范相关实现可参考 pkg/cmd/util/flag 下的标签选择器类型。3.5 删除全部备份velero backup delete --all删除当前命名空间下的全部备份。该操作影响范围大务必在确认后再执行。四、源码级解析命令内部到底做了什么下面结合当前仓库源码剖析velero backup delete的完整执行链路。4.1 命令组装与执行入口在 pkg/cmd/cli/backup/delete.go 中Run函数被依次调用三个步骤cmd.CheckError(o.Complete(f, args)) cmd.CheckError(o.Validate(c, f, args)) cmd.CheckError(Run(o))Complete填充命名空间、构造 Kubernetes client并把命令行参数解析为待删除的备份名称列表见 pkg/cmd/cli/delete_options.go。Validate进行互斥校验见下节。Run真正的删除逻辑。4.2 互斥校验规则Validate最终落到 pkg/cmd/cli/select_option.goif !xor(hasNames, hasAll, hasSelector) { return errors.New(you must specify exactly one of: specific backup name(s), the --all flag, or the --selector flag) }即指定备份名称、--all、--selector三选一多选或全不选都会直接报错。这与--selector与--all之间的语义冲突保护机制一致——如果既传了名称又传了--all命令会拒绝执行避免产生歧义。4.3 确认与备份筛选逻辑Run的第一步是确认若未指定--confirmif !o.Confirm !confirm.GetConfirmation() { return nil }然后根据选择方式筛选目标备份pkg/cmd/cli/backup/delete.go有名称列表逐个Get备份对象取不到的错误会被收集到errs中继续处理其他名称。无名称构造 LabelSelectorList出所有匹配备份--all场景下 selector 为空等价于labels.Everything()。若筛选结果为空命令输出No backups found并正常返回不会报错。4.4 逐备份校验存储位置并创建删除请求这是删除命令的核心。对每个备份pkg/cmd/cli/backup/delete.go 会执行以下检查与动作读取备份的 StorageLocation若b.Spec.StorageLocation为空直接报错 cannot delete backup ... because it does not have a backup storage location set。读取对应的 BackupStorageLocation并缓存bslCache避免重复查询。只读模式保护若该存储位置处于ReadOnly访问模式则拒绝删除并报错。测试用例 pkg/cmd/cli/backup/delete_test.go 专门验证了这一行为当 BSL 为只读时删除失败且不会产生任何 DeleteBackupRequest。创建 DeleteBackupRequest为每个备份生成一个DeleteBackupRequest对象标签包含备份名与备份 UIDvelero.io/backup-name、velero.io/backup-uid名称采用备份名-前缀 自动生成后缀WithGenerateName。提交请求通过client.CreateRetryGenerateName发送到 apiserver成功后输出提示信息说明备份的完整删除将在所有关联数据磁盘快照、备份文件、恢复记录都被清理后完成Request to delete backup my-backup submitted successfully. The backup will be fully deleted after all associated data (disk snapshots, backup files, restores) are removed.这里揭示了 Velero 删除模型的关键设计velero backup delete命令不是直接删除对象存储中的数据而是创建一个 DeleteBackupRequest 自定义资源。后续由 backup_deletion_controller.go 等控制器异步消费该请求统一协调删除备份 CR 本身、备份文件对象存储、磁盘快照云厂商快照与关联的恢复记录。这意味着删除是异步、渐进、幂等的命令返回不代表数据即刻消失。4.5 错误聚合多个备份删除过程中收集到的错误在最后通过kubeerrs.NewAggregate(errs)统一返回便于用户一次看到所有失败项而不是遇到一个错误就中断全部操作。五、与删除相关的其他资源父命令与兄弟命令查看 ark_backup.mdark backup下还有create、describe、download、get、logs等子命令覆盖备份的完整生命周期。删除前建议先用ark backup get见 ark_backup_get.md确认目标备份名称。删除请求 CRD 定义DeleteBackupRequest 的 API 类型定义于 pkg/apis/velero/v1可通过kubectl get deletebackuprequests -n velero查看命令提交的删除请求状态。底层删除动作对象存储与快照的物理清理逻辑可参考 pkg/backup/delete_helpers.go 以及 delete 相关的 item action 实现。六、注意事项与最佳实践删除是不可逆操作一旦备份的关联数据磁盘快照、备份文件被清除将无法恢复该备份。执行前建议先用velero backup describe或get确认目标。确认机制保护交互式环境下命令默认要求Y/N确认自动化场景务必显式添加--confirm否则命令会阻塞等待标准输入。只读存储位置是硬性保护当备份所在 BackupStorageLocation 被设置为只读访问模式时删除命令会拒绝执行并报错——这是防止误删只读归档数据的最后一道防线测试见 pkg/cmd/cli/backup/delete_test.go。三选一约束备份名称、--all、--selector不能混用否则命令校验失败。删除是异步的命令成功仅代表 DeleteBackupRequest 已提交真正清理对象存储与快照由后台控制器完成可通过监控 DeleteBackupRequest 的状态确认最终完成情况。【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价