ark restore delete:Ark/Velero 恢复删除命令详解
ark restore deleteArk/Velero 恢复删除命令详解【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero导读ark restore delete是 Velero早期名为 ArkCLI 中用于删除 Restore恢复对象的命令。本文以仓库中 ark_restore_delete.md 文档为主体骨架结合当前仓库 pkg/cmd/cli/restore/delete.go 的源码实现深入讲解命令语法、参数选项、执行流程以及删除后的实际影响帮助你正确、安全地清理 Kubernetes 集群中的恢复任务记录。命令概览ark restore delete命令用于删除一个或多个 Restore。该命令实际删除的是 Velero 在 Kubernetes 集群中创建的Restore 自定义资源CR并最终触发关联的外部资源对象存储中的恢复文件清理。ark restore delete NAME [flags]命令行选项该命令本身仅支持一个-h, --help选项选项说明-h, --help显示 delete 子命令的帮助信息真正影响删除行为的能力来自父命令继承的全局选项以及命令运行时交互主要包括选项说明-n, --namespace stringArk 操作的命名空间默认heptio-ark--kubeconfig string用于连接 Kubernetes apiserver 的 kubeconfig 文件路径未设置时尝试环境变量KUBECONFIG及集群内配置--kubecontext string连接 Kubernetes apiserver 使用的 context默认取当前 context即kubectl config current-context--alsologtostderr同时将日志输出到标准错误和文件--logtostderr将日志输出到标准错误而非文件--log_dir string非空时指定日志文件目录--log_backtrace_at traceLocation当日志命中file:N时输出堆栈跟踪默认:0--stderrthreshold severity达到或超过该级别的日志输出到 stderr默认 2即 ERROR-v, --v LevelV 日志的日志级别--vmodule moduleSpec逗号分隔的patternN形式的文件过滤日志设置注意heptio-ark是 Ark 早期版本的默认命名空间在后续更名为 Velero 的版本中默认命名空间相应变为velero。删除流程解析从源码 pkg/cmd/cli/restore/delete.go 可以看出命令执行经过Complete、Validate、Run三个阶段Complete通过 Factory 获取目标命名空间与 controller-runtime clientValidate校验三种删除方式的互斥关系Run执行删除。三种选择目标的方式互斥在 pkg/cmd/cli/select_option.go 中SelectOptions.Validate()通过xor函数强制校验必须且只能指定一种删除目标否则报错you must specify exactly one of: specific restore name(s), the --all flag, or the --selector flag。方式用法说明按名称ark restore delete restore-1可同时指定多个名称空格分隔按标签选择器ark restore delete --selector appfoo删除匹配标签选择器的所有 Restore-l为短选项全部ark restore delete --all删除命名空间内所有 Restore注意--all、--selector与名称列表三种方式不可混用违反互斥校验将直接报错终止。确认机制删除属于破坏性操作默认会弹出交互式确认pkg/cmd/util/confirm/confirm.goAre you sure you want to continue (Y/N)?输入Y或y继续输入N或n则中止其他输入会循环重试。若在脚本或 CI 中执行可通过--confirm标志跳过确认该标志在 delete_options.go 中默认绑定说明文字为 “Confirm deletion”。实际使用示例以下示例基于当前仓库 delete.go 中的Example字段命令名对应后续 Velero 版本# 删除名为 restore-1 的恢复 ark restore delete restore-1 # 不提示确认直接删除 restore-1 ark restore delete restore-1 --confirm # 同时删除 restore-1 和 restore-2 ark restore delete restore-1 restore-2 # 删除所有打了 foobar 标签的恢复 ark restore delete --selector foobar # 删除所有恢复 ark restore delete --all提示源码示例中展示的是velero restore delete这是 Ark 更名为 Velero 之后的命令形态本文档对应 v0.8.0 版本使用ark作为二进制名。删除后的实际行为集群侧删除 Restore CRRun函数pkg/cmd/cli/restore/delete.go的执行逻辑按名称删除逐个对每个名称执行Client.Get获取 Restore 对象并加入待删除列表若某个名称不存在错误会被聚合收集最终输出errs:与聚合错误而不是中断整个命令按选择器/全部删除调用Client.List使用metav1.LabelSelectorAsSelector将标签选择器转换为选择器列出全部或匹配的 Restore若列表为空输出No restores found并正常退出逐个调用Client.Delete删除 Restore 对象。删除成功后终端会打印类似如下信息Request to delete restore restore-1 submitted successfully. The restore will be fully deleted after all associated data (restore files in object storage) are removed.存储侧异步清理恢复文件关键点在于CLI 只是发出删除请求Restore 的最终清除是异步完成的。输出信息明确说明“restore 只有在关联数据对象存储中的 restore 文件被移除后才会被完全删除”。其底层机制是Finalizer终结器。在 pkg/controller/restore_controller.go 的deleteExternalResources中校验restore.Spec.BackupName是否为空为空则直接返回无关联外部资源通过fetchBackupInfo获取备份信息若备份不存在IsNotFound跳过对象存储文件删除并返回校验 BSLBackupStorageLocation是否可用不可用则报错返回通过插件管理器获取backupStore调用backupStore.DeleteRestore(restore.Name)删除对象存储中的恢复文件全部成功后Finalizer 才会被移除Restore CR 才真正从集群中消失。从源码结构看DeleteRestore是 pkg/persistence 中BackupStore接口提供的方法负责清理对象存储中与该恢复相关的文件。对应的测试用例位于 restore_controller_test.go模拟backupStore.On(DeleteRestore, ...)以及 backup_deletion_controller_test.go。删除范围说明删除 Restore不会删除或回滚已恢复到集群中的资源——恢复操作一旦执行其效果已经写入目标集群删除 Restore 对象只是清理该次恢复操作的元数据与对象存储记录删除 Restore不会影响其对应的 Backup 及其备份数据。命令行测试与验证仓库中 pkg/cmd/cli/restore/delete_test.go 提供了该命令的单元测试验证要点使用 fake controller-runtime client 在cmdtest.VeleroNameSpace中创建restore-name-1在default命名空间创建restore-name-2命令Short描述为Delete restores通过--confirm标志解析后执行Complete/Validate/Run再执行命令验证删除逻辑可正常完成。这从测试角度印证了命令作用于指定命名空间且跨命名空间的名称如default下的restore-name-2由于目标命名空间不同会返回not found测试断言输出中包含restores.velero.io restore-name-2 not found。总结要点说明命令格式ark restore delete NAME [flags]目标选择名称列表 /--selector/--all三选一互斥校验确认机制默认交互确认--confirm跳过执行方式只删除 Kubernetes 中的 Restore CR不触碰已恢复的资源与 Backup清理时机对象存储中的恢复文件由控制器 Finalizer 异步删除底层实现pkg/cmd/cli/restore/delete.go、pkg/cmd/cli/select_option.go、pkg/cmd/cli/delete_options.go如需查看该命令的父命令能力可参考 ark restore包含 create、describe、get、logs 等子命令。理解“CLI 发起删除 → 控制器 Finalizer 异步清理外部资源”的两阶段机制是正确使用ark restore delete的关键。【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考