Velero 资源删除命令实战:从 ark delete 到 velero delete 的完整 CLI 指南
2026/9/17 9:21:04 网站建设 项目流程

Velero 资源删除命令实战:从 ark delete 到 velero delete 的完整 CLI 指南

【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero

本篇技术指南以仓库中 v0.7.1 版本 CLI 参考文档 ark_delete.md 为核心,系统讲解备份工具(Heptio Ark / 现 Velero)中资源删除命令的完整用法:包括命令层级结构、全局参数、backup / restore / schedule 三个子命令的语义差异,并结合当前仓库源码剖析其底层实现机制(删除请求对象的生成、确认交互、标签选择器等)。读完本文,你将能正确、安全地在集群中删除 Ark/Velero 的备份、恢复与调度资源,并理解删除操作背后"非立即销毁"的异步语义。

ark delete 命令概览:删除 Ark 资源

根据 ark_delete.md 的说明,ark delete的作用是"删除 Ark 资源"(Delete ark resources),它是 Ark CLI 顶层命令树中的一个管理命令组,本身不直接删除任何对象,而是通过三个子命令分别删除备份、恢复和调度资源:

ark delete ├── ark delete backup # Delete a backup(删除备份) ├── ark delete restore # Delete a restore(删除恢复) └── ark delete schedule # Delete a schedule(删除调度)

顶层ark delete命令的 Options 部分只包含一个标志:

-h, --help help for delete

-h/--help用于查看该命令的帮助信息。这也印证了 cli-reference 目录 README 中的说明:CLI 参考目录中列出的所有命令及标志信息,都可以直接通过 CLI 的--help标志在终端中实时查看。

继承自父命令的全局参数详解

ark delete及所有子命令都会继承来自顶层ark命令的全局参数,这些参数控制的是 CLI 与 Kubernetes API Server 的通信方式以及日志输出行为。完整参数如下:

--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 pattern=N settings for file-filtered logging

逐个解读:

参数类型/默认值作用
--kubeconfigstring指定用于连接 Kubernetes API Server 的 kubeconfig 文件路径;若不设置,则依次尝试KUBECONFIG环境变量与集群内(in-cluster)配置
-n, --namespacestring,默认heptio-arkArk 操作的命名空间。v0.7.1 时代 Ark 默认部署在heptio-ark命名空间,资源对象(Backup、Restore、Schedule 等 CRD 实例)都存放在该命名空间下
--alsologtostderr布尔日志同时写入文件与标准错误输出
--logtostderr布尔日志写入标准错误输出而非文件
--log_dirstring非空时指定日志文件的输出目录
--log_backtrace_attraceLocation,默认:0当日志命中file:N时输出堆栈跟踪
--stderrthresholdseverity,默认2达到或超过该严重级别的日志输出到 stderr
-v, --vLevelV 日志的日志级别
--vmodulemoduleSpec以逗号分隔的pattern=N列表,按文件过滤日志级别

注意:v0.7.1 文档中默认命名空间为heptio-ark,这是 Ark 时期的默认值;当前仓库版本已将命名空间默认值调整为velero,具体以你实际使用的版本为准。

子命令详解:backup、restore、schedule

删除备份:ark delete backup

参考 ark_delete_backup.md,用法为:

ark delete backup NAME [flags]

该子命令"删除一个备份"(Delete a backup),NAME为要删除的 Backup 资源名称。其自有 Options 同样只有-h, --help

删除恢复:ark delete restore

参考 ark_delete_restore.md,用法为:

ark delete restore NAME [flags]

该子命令"删除一个恢复"(Delete a restore),NAME为 Restore 资源名称。

删除调度:ark delete schedule

参考 ark_delete_schedule.md,用法为:

ark delete schedule NAME [flags]

该子命令"删除一个调度"(Delete a schedule),NAME为 Schedule 资源名称。

三者均位于ark delete父命令之下(见文档末尾的 SEE ALSO 部分),并共享同一组继承自父命令的全局参数。需要特别说明的是,在 v0.7.1 中删除备份、恢复与调度使用的是ark delete <type> NAME动词-资源类型的命令形式;这与文档 ark.md 中描述的命令模型一致——Ark 采用类似kubectl的命令模型,同一操作存在两种等价写法,例如ark get backupark backup getark create scheduleark schedule create等价。

源码视角:velero 删除命令的底层实现机制

虽然 v0.7.1 文档以ark为命令名,但当前仓库源码中该命令体系已演进为velero命令,其实现位于 pkg/cmd/cli/delete/delete.go。从源码结构看,NewCommand负责组装delete命令组,注册了四个子命令,并为主命令和各子命令声明了复数别名:

backupCommand := backup.NewDeleteCommand(f, "backup") backupCommand.Aliases = []string{"backups"} backuplocationCommand := backuplocation.NewDeleteCommand(f, "backup-location") backuplocationCommand.Aliases = []string{"backup-locations"} restoreCommand := restore.NewDeleteCommand(f, "restore") restoreCommand.Aliases = []string{"restores"} scheduleCommand := schedule.NewDeleteCommand(f, "schedule") scheduleCommand.Aliases = []string{"schedules"}

可以看出,与 v0.7.1 文档相比,当前版本还额外增加了backup-location(备份存储位置)的删除命令。别名机制(backups/restores/schedules)让用户可以写velero delete backups这样的复数形式。

统一的 DeleteOptions:选择器与确认交互

三个资源删除子命令共享同一个选项结构体 pkg/cmd/cli/delete_options.go:

type DeleteOptions struct { *SelectOptions confirm.ConfirmOptions Client controllerclient.Client Namespace string }

从该结构体的组合方式可以推断,删除命令的核心设计包含两大部分:

  1. 资源选择(SelectOptions):支持按名称(命令行参数)、按标签选择器(--selector)或按全部(--all)三种方式圈定要删除的资源;
  2. 删除确认(ConfirmOptions):默认需要交互式确认,只有传入--confirm标志或用户交互确认后才真正执行。

对应的Run函数(例如 pkg/cmd/cli/backup/delete.go)在开头即执行确认检查:

if !o.Confirm && !confirm.GetConfirmation() { // Don't do anything unless we get confirmation return nil }

备份删除的异步语义:DeleteBackupRequest

值得深入理解的是,删除备份与删除恢复/调度走的是完全不同的实现路径:

  • 删除备份(backup):并不会立即删除 Backup 对象,而是为每个备份创建一个DeleteBackupRequest资源(见 pkg/cmd/cli/backup/delete.go),由后端的 backup deletion controller 异步执行真正的清理。命令输出也明确说明了这一点:"The backup will be fully deleted after all associated data (disk snapshots, backup files, restores) are removed."(备份将在所有关联数据——磁盘快照、备份文件、恢复——都被移除后彻底删除)。此外,该实现还会校验备份所引用的 BackupStorageLocation 的访问模式:若存储位置处于 read-only 模式,则会拒绝删除并报错(见 pkg/cmd/cli/backup/delete.go)。
  • 删除恢复(restore)与调度(schedule):直接调用Client.Delete删除对应的 Restore / Schedule 对象(见 pkg/cmd/cli/restore/delete.go 与 pkg/cmd/cli/schedule/delete.go),其中 Restore 同样提示其关联的对象存储文件会在之后被异步清理。

这正是文档标题"Delete ark resources"背后真正的工程语义:CLI 的 delete 命令只是提交删除请求,资源及其关联数据的物理清理由控制器在后台完成

实战示例(当前版本 velero 命令)

结合 pkg/cmd/cli/backup/delete.go、pkg/cmd/cli/restore/delete.go 与 pkg/cmd/cli/schedule/delete.go 中内置的 Example 文本,常用操作如下:

# 删除名为 backup-1 的备份 velero backup delete backup-1 # 删除备份且跳过交互确认 velero backup delete backup-1 --confirm # 同时删除多个备份 velero backup delete backup-1 backup-2 # 删除 schedule-1 调度产生的所有备份(按标签选择) velero backup delete --selector velero.io/schedule-name=schedule-1 # 删除所有备份 velero backup delete --all # 删除恢复 / 调度(支持标签选择器与 --all) velero restore delete restore-1 --confirm velero schedule delete schedule-1 --confirm velero restore delete --selector foo=bar

集群凭据的解析顺序

删除命令需要与 Kubernetes API Server 通信,因此正确配置集群凭据是执行任何ark delete/velero delete的前提。根据 cli-reference 目录 README,Ark(以及当前 Velero)按以下顺序查找集群凭据:

  1. --kubeconfig命令行标志指定的 kubeconfig 文件;
  2. $KUBECONFIG环境变量指向的 kubeconfig 文件;
  3. 集群内(in-cluster)配置——仅当 CLI 运行在集群内的 Pod 中时才可用。

这一查找顺序同样适用于 v0.7.1 文档中--kubeconfig参数的说明("If unset, try the environment variable KUBECONFIG, as well as in-cluster configuration")。

从 Ark 到 Velero 的命令演进与参考

仓库中保留了 v0.7.1 时代的完整 CLI 参考文档目录 site/content/docs/v0.7.1/cli-reference/,其中每个命令对应一个 Markdown 文件。而当前源码(pkg/cmd/cli/)显示命令名已从ark演进为velero,默认命名空间从heptio-ark调整为velero,删除命令组也增加了backup-location子命令并引入了--selector/--all/--confirm等更丰富的选项。若需查看完整的命令列表与标志,可在对应版本 CLI 中直接使用--help,或在仓库中查阅:

  • 删除命令组实现:pkg/cmd/cli/delete/delete.go
  • 通用删除选项:pkg/cmd/cli/delete_options.go
  • 备份删除实现与示例:pkg/cmd/cli/backup/delete.go
  • 恢复删除实现与示例:pkg/cmd/cli/restore/delete.go
  • 调度删除实现与示例:pkg/cmd/cli/schedule/delete.go
  • v0.7.1 删除命令参考:site/content/docs/v0.7.1/cli-reference/ark_delete.md

掌握ark deletevelero delete)命令组,是日常管理备份生命周期的基础能力:通过 backup、restore、schedule 三个子命令按需清理资源,结合--selector--all实现批量管理,并牢记删除请求的异步语义——提交删除后,关联的对象存储文件与云磁盘快照由后端控制器负责最终清理。

【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询