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逐个解读:
| 参数 | 类型/默认值 | 作用 |
|---|---|---|
--kubeconfig | string | 指定用于连接 Kubernetes API Server 的 kubeconfig 文件路径;若不设置,则依次尝试KUBECONFIG环境变量与集群内(in-cluster)配置 |
-n, --namespace | string,默认heptio-ark | Ark 操作的命名空间。v0.7.1 时代 Ark 默认部署在heptio-ark命名空间,资源对象(Backup、Restore、Schedule 等 CRD 实例)都存放在该命名空间下 |
--alsologtostderr | 布尔 | 日志同时写入文件与标准错误输出 |
--logtostderr | 布尔 | 日志写入标准错误输出而非文件 |
--log_dir | string | 非空时指定日志文件的输出目录 |
--log_backtrace_at | traceLocation,默认:0 | 当日志命中file:N时输出堆栈跟踪 |
--stderrthreshold | severity,默认2 | 达到或超过该严重级别的日志输出到 stderr |
-v, --v | Level | V 日志的日志级别 |
--vmodule | moduleSpec | 以逗号分隔的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 backup与ark backup get、ark create schedule与ark 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 }从该结构体的组合方式可以推断,删除命令的核心设计包含两大部分:
- 资源选择(SelectOptions):支持按名称(命令行参数)、按标签选择器(
--selector)或按全部(--all)三种方式圈定要删除的资源; - 删除确认(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)按以下顺序查找集群凭据:
--kubeconfig命令行标志指定的 kubeconfig 文件;$KUBECONFIG环境变量指向的 kubeconfig 文件;- 集群内(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 delete(velero delete)命令组,是日常管理备份生命周期的基础能力:通过 backup、restore、schedule 三个子命令按需清理资源,结合--selector与--all实现批量管理,并牢记删除请求的异步语义——提交删除后,关联的对象存储文件与云磁盘快照由后端控制器负责最终清理。
【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考