Velero 卸载机制详解:`velero uninstall` 命令的删除范围与源码级实现原理

发布时间:2026/9/17 10:09:26

Velero 卸载机制详解:`velero uninstall` 命令的删除范围与源码级实现原理 Velero 卸载机制详解velero uninstall命令的删除范围与源码级实现原理【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero本文围绕 Velero 官方文档 Uninstalling Velero 讲解如何从 Kubernetes 集群中彻底卸载 Velero。内容从一条核心命令出发结合当前仓库的 CLI 源码完整剖析velero uninstall的可用参数、删除范围、执行顺序以及底层 Finalizer 处理逻辑读完你可以安全地执行卸载操作并理解每一步背后删什么、按什么顺序删、为什么这样删。一条命令完成卸载官方文档给出的卸载方式非常简洁如果希望将 Velero 从集群中完全卸载执行以下命令即可移除velero install创建的所有资源velero uninstall该命令由 CLI 中的 uninstall 子命令 实现并在 velero CLI 根命令 处通过uninstall.NewCommand(f)注册。命令参数与交互确认--force跳过交互确认命令定义了一个可选布尔参数见 uninstall.go参数类型/默认值作用--forcebool默认false强制卸载跳过是否确认卸载的交互提示--namespacestring默认velero指定 Velero 所在的命名空间来自 CLI 全局持久化参数当未使用--force时命令会先打印You are about to uninstall Velero.然后调用 confirm 包 从标准输入读取确认交互式提示Are you sure you want to continue (Y/N)?只有输入单个y不区分大小写才会继续输入n则直接返回、什么都不做输入非单字符时循环重新询问。因此在脚本、CI/CD 流水线等非交互场景下应显式加上--force以避免命令卡在等待输入velero uninstall --force命令自带的示例也说明了如何为自定义命名空间卸载velero uninstall --namespace staging删除范围velero install创建了哪些资源Run 函数 是卸载的执行主体从源码看整个卸载过程恰好覆盖三类集群资源与velero install的安装产物一一对应Velero 所在命名空间默认velero。命名空间删除会连带清掉其中的 Deployment、Service、ServiceAccount、ConfigMap含备份仓库配置、Secret、Pod 等所有命名空间内资源。ClusterRoleBinding。其命名规则来自 pkg/install/resources.go默认命名空间下名为velero若 Velero 安装在非默认命名空间则名为velero-namespace。它指向cluster-adminClusterRole 和该命名空间下的veleroServiceAccount。Velero 的全部 CRD。删除时使用标签选择器componentvelero精确匹配见 install 包的 Labels()并通过DeleteAllOf一次性删除同时还会清理历史遗留的 v1beta1 版本 CRDv1 CRD 已不存在时才会提示 V1Beta1 Velero CRDs not found, skipping...。需要注意的边界对于不存在的资源命令会打印跳过信息如Velero ClusterRoleBinding velero does not exist, skipping.而不是报错因此对已部分清理过的集群重复执行该命令是安全的。从源码的删除范围可以推断velero uninstall只操作集群内资源不会触碰外部对象存储对象桶中的备份文件、快照等数据。如果你需要彻底清除备份数据需要在卸载后另行手动清理对应的对象存储内容。集群中由备份/恢复流程创建的业务资源如恢复出来的工作负载不属于安装产物也不在本次删除范围内。执行顺序为什么先删命名空间Run的执行流程与直觉不同——它先删除命名空间再删 ClusterRoleBinding 和 CRD。源码中有明确注释uninstall.go// The CRDs cannot be removed until the namespace is deleted to avoid the problem in issue #3974 // so if the namespace deletion fails we error out here即 CRD 必须等命名空间删除完成后才能移除否则会触发上游 issue #3974 描述的问题。因此如果命名空间删除失败命令会立即报错退出Errors while attempting to uninstall Velero: ...不会继续执行后续步骤。deleteNamespace 的具体做法是先检查命名空间是否存在不存在则跳过调用deleteResourcesWithFinalizer处理携带 Finalizer 的资源下一节详述发起命名空间删除随后以 5ms 间隔轮询直到命名空间真正消失期间每轮打印一个.表示仍在等待命名空间消失后输出Velero namespace velero deleted。Finalizer 处理优雅删除与强制删除两级策略命名空间内的 Restore、DataUpload、DataDownload 资源携带 Finalizer若直接删除命名空间会因 Finalizer 未移除而卡住。deleteResourcesWithFinalizer 注释中解释了设计动机携带 Finalizer 的资源需要对应的 controller 处理完 Finalizer 后才能真正删除所以必须在删除运行这些 controller 的 Pod 之前处理这些资源controller 处理 Finalizer 时可能遇到错误并不断重试因此必须设置超时——超时后强制移除 Finalizer否则删除流程会无限卡住。具体流程分两级第一级优雅删除最长 1 分钟checkResources 检查集群中是否存在restores.velero.io、datauploads.velero.io、datadownloads.velero.io三个 CRD存在哪类就把对应的 ListRestoreList/DataUploadList/DataDownloadList加入待删除列表gracefullyDeleteResources 并发地对每类资源发起常规删除然后以 1 秒为间隔轮询在gracefulDeletionMaximumDuration定义为 1 分钟内等待它们全部消失。源码注释说明as of v1.12 支持的就这三类资源的 Finalizer后续若新增 Finalizer 类型可在此函数中扩展。涉及的 Finalizer 名称可对照 controller 源码确认资源类型Finalizer定义位置Restorerestores.velero.io/external-resources-finalizerrestore_controller.goDataUpload / DataDownloadvelero.io/data-upload-download-finalizerdata_upload_controller.go第二级强制删除优雅删除超时后若 1 分钟后资源仍未删除干净说明 Finalizer 处理卡住forcedlyDeleteResources 会先删除veleroDeployment 并等待其消失——注释解释原因是防止 controller 在下一步移除 Finalizer 后又把 Finalizer 加回去、或又新建携带 Finalizer 的资源然后遍历每类残留资源用 controllerutil.RemoveFinalizer Patch 手工摘除对应的 Finalizer使资源可以被命名空间级联删除真正清理掉。完整流程小结综合源码velero uninstall的实际执行链路为交互确认--force 跳过 └─ 检查并清理携带 Finalizer 的资源 ├─ 优雅删除 轮询等待≤ 1 分钟 └─ 超时则删除 velero Deployment手工移除 Finalizer └─ 删除 velero 命名空间并轮询等待其消失 └─ 失败则直接报错退出对应 issue #3974 的约束 └─ 删除 ClusterRoleBindingvelero / velero-namespace └─ 按标签 componentvelero 删除 v1 与历史 v1beta1 CRD └─ 输出 Velero uninstalled ⛵几点使用建议适用前提集群中存在由velero install安装的 Velero且当前 kubeconfig 对目标命名空间、ClusterRoleBinding 和 CRD 均有删除权限若使用自定义命名空间安装务必带上相同的--namespace参数否则默认只会作用于velero命名空间。卸载前建议确认已不再需要该命名空间内的备份/恢复记录CR 会随命名空间一起删除并自行评估对象存储中备份数据的去留。验证卸载结果可执行kubectl get ns velero、kubectl get clusterrolebindings | grep velero、kubectl get crd | grep velero.io确认命名空间、ClusterRoleBinding 与 CRD 均已不存在。相关源码与文档位置卸载命令实现与执行流程pkg/cmd/cli/uninstall/uninstall.go交互确认逻辑pkg/cmd/util/confirm/confirm.go安装资源与标签定义卸载范围的对照依据pkg/install/resources.goFinalizer 常量定义pkg/controller/restore_controller.go、pkg/controller/data_upload_controller.goCLI 命令注册入口pkg/cmd/velero/velero.go官方卸载文档v1.11 版site/content/docs/v1.11/uninstalling.md【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/17 10:09:26

用Spacedesk把旧平板变扩展屏:局域网虚拟副屏实战指南

手头只有一台笔记本电脑,又需要第二块屏幕的时候,大多数人第一反应是买便携屏,或者翻出一台旧显示器接HDMI。但如果你手边刚好有一台旧平板、旧手机,甚至是一台不常用的Windows老本子,这套“局域网虚拟扩展屏”方案能直…

2026/9/17 11:14:41

Win11下JDK1.8与JDK17双环境管理实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/17 11:14:41

AI/Agent大规模部署为何首选PolarDB?六大能力深度解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/17 11:14:41

OpenClaw开源AI工具链:GPT-5.4适配与记忆热插拔技术解析

1. OpenClaw 项目概览:当开源工具链遇上AI新范式OpenClaw作为开源AI工具链的标杆项目,近期迎来里程碑式更新。这个最初由开发者社区孵化的项目,如今已成长为支持多模态AI开发的完整生态平台。最新版本的核心升级点在于对GPT-5.4架构的深度适配…

2026/9/17 11:14:41

OpenMontage:面向AI智能体的声明式任务编排引擎

1. 项目概述:OpenMontage 不是视频剪辑软件,而是一套面向 AI 原生工作流的“智能编排引擎”OpenMontage 这个名字一出来,很多人第一反应是“哦,又一个开源视频编辑工具”,毕竟 montage 在影视行业里就是“剪辑、拼接”…

2026/9/17 11:14:41

公共管理大数据实战:数据治理、预测分析与可视化

简介:这份资料以《大数据在公共管理中的应用》为主题的PPT演示文稿,面向公共管理、行政管理及相关专业的师生与政务信息化从业者,适合课堂汇报、专题培训与政策研究等场景使用。内容从大数据的概念与来源切入,梳理海量性、高速性、…

2026/9/17 11:09:40

PeopleSoft Application Engine 批处理执行与重启排错

简介:面向PeopleSoft开发与运维人员的中文技术文档,围绕人力系统中的Application Engine批量处理、定时任务与模块集成展开。内容基于Enterprise PeopleTools 8.50 PeopleBook整理翻译,涵盖应用引擎概述、实施步骤、程序元素与Meta-SQL&#…

2026/9/16 12:52:37

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/17 0:03:13

WiFi密码安全测试:从原理到实战的字典暴力破解指南

1. 写在前面:我为什么要研究WiFi密码这件事先交代一下背景。我身边有不少朋友,家里的WiFi密码常年是"12345678"或者"88888888",问就是"好记"。直到有一次,隔壁邻居蹭网蹭到我家路由器后台都进不去&…

2026/9/17 0:03:13

redis-py服务控制与监控函数实战:从ping到slowlog的巡检指南

我用 redis-py 写了快五年的业务代码,坦白说,真正让我觉得这个客户端“像一个成熟工具箱”的,不是 get/set 那套基本操作,而是它那批专门做服务控制与状态监控的辅助函数。日常开发里,大家把redis.Redis(host..., deco…

2026/9/17 0:03:13

SpringBoot+Vue3实现中小企业设备管理系统开发实践

1. 项目概述与核心价值中小企业设备管理系统是制造业、服务业等领域的基础信息化工具。传统设备管理往往依赖Excel表格或纸质记录,存在数据孤岛、流程混乱、维护成本高等痛点。这套基于Java SpringBootVue3MyBatis的技术方案,通过前后端分离架构实现了设…

2026/9/16 22:55:57

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/16 22:56:09

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/16 22:56:16

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码