ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Velero/Ark 删除备份命令详解:`ark delete backup` 的用法、确认机制与底层删除流程

Velero/Ark 删除备份命令详解:`ark delete backup` 的用法、确认机制与底层删除流程 Velero/Ark 删除备份命令详解ark delete backup的用法、确认机制与底层删除流程【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero本指南以 Velero 项目此前命名为 Ark命令前缀为ark官方 CLI 参考文档中ark delete backup命令为线索完整讲解其语法、全部命令行参数、交互式确认机制并结合当前仓库源码剖析该命令在后台触发删除的真正工作原理——即 DeleteBackupRequest删除备份请求驱动的异步删除流程。读完本文你将掌握如何安全、批量地删除备份理解命令返回成功 ≠ 备份立即消失的关键设计并能通过源码定位到删除链路的关键实现文件。一、命令定位属于哪个版本的文档为什么命令前缀是ark本文关联的原始文档位于 site/content/docs/v0.8.1/cli-reference/ark_delete_backup.md属于 Velero 项目 v0.8.1 时代的中文读者经常见到的 CLI 参考页之一。在该版本中二进制与命令前缀均为ark对应的现代版本命令则为velero backup delete。从命令树看ark delete backup是ark delete的子命令而ark delete下还有ark delete restore删除恢复与ark delete schedule删除定时调度其入口文档见 site/content/docs/v0.8.1/cli-reference/ark_delete.md。在现代代码库中这一命令树的实现集中在 pkg/cmd/cli/delete/delete.go 与 pkg/cmd/cli/backup/delete.go。二、命令语法与功能摘要原始文档给出的 Synopsis 非常简洁ark delete backup NAME [flags]其功能摘要为一行话Delete a backup删除一个备份。需要特别说明的是这条命令删除备份的含义是删除该备份在对象存储如 S3、MinIO、GCS 等中的备份文件以及为它创建的快照。命令行本身不会等待删除完成而是提交一个删除请求真正的清理工作由后台控制器异步执行详见下文第五节。三、Options本命令专属参数原始文档列出了两个仅属于该子命令的参数--confirm Confirm deletion -h, --help help for backup3.1--confirm跳过交互式确认--confirm是一个布尔标志含义是确认删除。如果在执行删除时不带--confirm命令会进入交互模式向终端询问确认只有用户输入Y才继续执行。这是防止误删备份的第一道防线。从现代源码看该标志由confirm.ConfirmOptions统一实现定义于 pkg/cmd/util/confirm/confirm.gotype ConfirmOptions struct { Confirm bool flagDescription string } func (o *ConfirmOptions) BindFlags(flags *pflag.FlagSet) { flags.BoolVar(o.Confirm, confirm, o.Confirm, o.flagDescription) }而ark delete backup/velero backup delete命令实际使用的是带描述文字的版本NewConfirmOptionsWithDescription(Confirm deletion)它被 pkg/cmd/cli/delete_options.go 中的NewDeleteOptions(backup)装配到删除命令上——这也与文档中--confirm的说明文字 Confirm deletion 完全对应。交互确认逻辑在 pkg/cmd/util/confirm/confirm.go 的GetConfirmation函数中它会循环读取标准输入提示Are you sure you want to continue (Y/N)?只有输入单个字符且为y大小写均可才返回 true输入n返回 false其他输入重新提示。3.2-h, --help查看命令帮助与其他 Cobra 命令一致-h/--help输出该子命令的帮助信息。3.3 确认机制在源码中的强制执行点在 pkg/cmd/cli/backup/delete.go 的Run函数开头删除动作被一个显式的确认闸门保护func Run(o *cli.DeleteOptions) error { if !o.Confirm !confirm.GetConfirmation() { // Dont do anything unless we get confirmation return nil } ... }也就是说只有当--confirm被显式传入或用户在交互提示中输入Y时删除流程才会继续否则直接返回 nil不产生任何删除请求。这也是--confirm参数之所以存在的全部意义。四、Options inherited from parent commands全局继承参数原始文档还列出了从父命令继承的全局参数这些参数适用于所有ark子命令用于控制 Kubernetes 连接与日志输出参数说明--alsologtostderr同时将日志写入标准错误与日志文件--kubeconfig string连接 Kubernetes apiserver 所用的 kubeconfig 文件路径若未设置依次尝试环境变量KUBECONFIG与集群内配置in-cluster configuration--kubecontext string连接 apiserver 时使用的 Kubernetes context未设置时默认使用当前 contextkubectl config current-context--log_backtrace_at traceLocation当日志命中file:N时输出堆栈信息默认:0即不触发--log_dir string非空时指定日志文件输出目录--logtostderr将日志输出到标准错误而非文件-n, --namespace stringArk 操作的命名空间v0.8.1 默认heptio-ark--stderrthreshold severity达到或超过该级别的日志输出到标准错误默认2即 ERROR-v, --v LevelV 日志verbose 日志级别--vmodule moduleSpec按文件过滤日志的patternN逗号分隔列表其中--namespace值得强调备份对象、删除请求等都存在于这个命名空间中默认值是heptio-ark。在现代版本中该默认值已改为velero可通过 pkg/cmd/cli/backup/backup.go 等命令装配代码进一步确认在仓库当前版本中执行时请以实际命名空间为准。五、命令背后DeleteBackupRequest 与异步删除控制器这是ark delete backup与普通kubectl delete最本质的区别CLI 并不直接删除备份对象与云资源而是为每个备份创建一条 DeleteBackupRequest删除备份请求由后台控制器接手完成全部清理工作。5.1 CLI 侧为每个备份提交删除请求在 pkg/cmd/cli/backup/delete.go 中命令先根据位置参数NAME逐个从集群读取 Backup 对象再对每个备份构建并提交 DeleteBackupRequestdeleteRequest : builder.ForDeleteBackupRequest(o.Namespace, ).BackupName(b.Name). ObjectMeta(builder.WithLabels(velerov1api.BackupNameLabel, label.GetValidName(b.Name), velerov1api.BackupUIDLabel, string(b.UID)), builder.WithGenerateName(b.Name-)).Result() if err : client.CreateRetryGenerateName(o.Client, context.TODO(), deleteRequest); err ! nil { errs append(errs, err) continue } fmt.Printf(Request to delete backup %q submitted successfully.\nThe backup will be fully deleted after all associated data (disk snapshots, backup files, restores) are removed.\n, b.Name)注意输出信息明确提示备份将在所有关联数据磁盘快照、备份文件、restores被移除后完全删除——这正是异步删除设计的直接体现也解释了为什么命令很快返回、而备份可能仍需一段时间才真正消失。5.2 CLI 侧的防御性检查同样是 pkg/cmd/cli/backup/delete.go提交请求前还有两道防御检查存储位置缺失检查如果备份未设置Spec.StorageLocation会报错cannot delete backup ... because it does not have a backup storage location set只读存储位置检查如果备份所在的 BackupStorageLocation 的AccessMode为ReadOnly会报错cannot delete backup ... because backup storage location ... is currently in read-only mode并跳过该备份。这两条规则也由单元测试覆盖见 pkg/cmd/cli/backup/delete_test.go测试构造了一个ReadOnly模式的 BSL 与关联备份断言Run返回包含 currently in read-only mode 的错误且不产生任何 DeleteBackupRequest 对象。5.3 控制器侧真正执行删除DeleteBackupRequest 创建后由备份删除控制器BackupDeletionReconciler消费。该控制器实现在 pkg/controller/backup_deletion_controller.go其职责包括清理该备份关联的**恢复restore**相关数据删除对象存储中的备份文件调用云厂商接口删除磁盘快照逻辑见 pkg/controller/backup_deletion_controller.go 附近对ProviderSnapshotID的处理删除 Backup 对象本身并清理已完成的删除请求对应 pkg/controller/backup_deletion_controller.go 的 Removing existing deletion requests for backup 逻辑。因此当你看到Request to delete backup xxx submitted successfully.时正确的解读是删除已进入编排流程最终完成时间取决于待清理数据量快照数量、备份文件大小与存储后端响应速度。六、实战示例基于官方文档的语法与源码中的示例pkg/cmd/cli/backup/delete.go以下命令均可直接使用现代版本将ark替换为velero# 1. 删除名为 backup-1 的备份交互式确认 ark delete backup backup-1 # 2. 跳过确认提示直接删除 backup-1 ark delete backup backup-1 --confirm # 3. 一次删除多个备份backup-1 与 backup-2 ark delete backup backup-1 backup-2 --confirm # 4. 按标签选择器批量删除删除 schedule-1 调度的所有备份 ark delete backup --selector velero.io/schedule-nameschedule-1 --confirm # 5. 删除所有备份现代版本支持 ark delete backup --all --confirm使用注意点务必先ark backup get现代版本为velero backup get确认要删除的备份名称与标签避免误删批量删除按标签 / --all务必带--confirm或预先在 CI 中通过 stdin 提供确认否则命令会在交互提示处挂起等待输入删除后可通过ark backup get观察备份对象是否最终消失以确认后台删除流程完成。七、关联文档与源码索引内容路径本文对应官方 CLI 文档site/content/docs/v0.8.1/cli-reference/ark_delete_backup.md父命令ark delete文档site/content/docs/v0.8.1/cli-reference/ark_delete.mdark backup命令总览文档site/content/docs/v0.8.1/cli-reference/ark_backup.md删除备份命令实现pkg/cmd/cli/backup/delete.go删除选项与确认机制pkg/cmd/cli/delete_options.go、pkg/cmd/util/confirm/confirm.go删除命令单元测试pkg/cmd/cli/backup/delete_test.go异步删除控制器pkg/controller/backup_deletion_controller.go结语ark delete backup是 Velero/Ark 数据生命周期管理中的关键一环。理解它需要同时掌握三个层面命令层面--confirm与全局参数的语义、API 层面DeleteBackupRequest 对象承担删除意图的传递、以及控制器层面快照、备份文件、restores 的异步清理编排。官方文档的语法表是速查入口而本文引用的源码则揭示了确认闸门、只读存储位置保护与提交成功≠删除完成的真实运行细节——这两者结合才能在生产环境中安全地管理备份的退役与清理。【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表