ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

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

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),仅供参考
返回列表