Skip to main content

卸载与数据保留

helm uninstall 并不会删干净——有四类对象被刻意保留,备份数据本身也完全不受影响。本文说明哪些留、哪些走,以及需要彻底清除时该怎么做。

前置条件​

  • 您的角色是集群管理员,具备删除 CRD 与 ClusterRole 的权限。
  • 卸载前请确认没有正在运行的备份或还原任务。

卸载后会发生什么​

helm uninstall supkube -n supkube
│
┌─────────┴────────────────────────────────────────┐
▼ ▼
被删除 被保留
────────────────────────────── ──────────────────────────────
Deployment ① 带 keep 注解
backend / frontend / dex supkube-fingerprint-secret
Service / Ingress <release>-eula ConfigMap
ClusterRole / Binding clusters.supkube.io CRD
ServiceAccount
Velero 子 Chart 的工作负载 ② crds/ 目录(Helm 3 从不删)
importpolicies.supkube.io
⚠ PVC ③ Helm 不拥有(后端运行期自建)
supkube-local-store-data 变换规则 ConfigMap
本地备份库数据一并销毁 preflight-fix-*
supkube-license-status
supkube-settings
supkube-bsl-*-credentials
──────────────────────────────
完全不受影响
──────────────────────────────
对象存储里的备份数据
CSI 卷快照
启用过 localStore 的集群,卸载会销毁本地备份库

supkube-local-store-data 这个 PVC 没有 helm.sh/resource-policy: keep 注解,是普通的 Helm 管理对象,helm uninstall 会直接删掉它。底层 PV 是否一并消失取决于 StorageClass 的 reclaimPolicy(托管 CSI 通常默认 Delete)。

也就是说:一次标准卸载就会把「本地备份库」里的全部备份销毁。

卸载前若要保留这些备份,二选一:

# 方案 A:先给 PVC 打 keep 注解,让 Helm 不删它
kubectl -n supkube annotate pvc supkube-local-store-data \
helm.sh/resource-policy=keep

# 方案 B(更稳):先把备份复制到云端存储位置

三种保留机制​

保留不是只有一种原因,共三类,排查时要分开看:

机制对象说明
① 显式 keep 注解supkube-fingerprint-secret删掉后重装会生成新共享密钥,再也认不出旧集群写入的还原点,跨集群信任链断裂
①<release>-eula ConfigMap记录 EULA 接受状态,避免重装时重复确认
①clusters.supkube.io CRD删 CRD 会级联删除所有 Cluster 资源,多集群注册信息随之丢失
② crds/ 目录importpolicies.supkube.io CRD位于 Chart 的 crds/ 目录,Helm 3 从设计上就不会自动删除
③ Helm 不拥有见下节后端运行期自建,没有 managed-by: Helm 标签,Helm 无从删起

第三类:运行期自建对象​

这些对象由后端在运行过程中创建,Helm 从不知道它们存在,因此卸载后会全部留在集群里:

对象来源
strip-clusterip、strip-nodeport、strip-loadbalancer-ip、strip-pv-binding、common-cluster-relocation 及各自的 -rules内置变换规则与变换集,后端启动时创建
preflight-fix-*冲突预检「一键修复」生成的变换规则,数量随使用增长
supkube-license-status许可证状态事件的挂载点
supkube-settings孤儿资源清理的设置
supkube-bsl-*-credentials Secret创建存储位置时由 SupKube 代建的对象存储凭据
对象存储凭据会留在集群里

最后一条是安全相关事实:您在界面上填写的对象存储 Access Key,落成的 Secret 不归 Helm 管理,卸载后仍然留在集群中。

如果卸载的动机涉及凭据轮换或环境移交,必须单独清理:

kubectl -n supkube get secret -l app.kubernetes.io/managed-by=supkube
备份数据不在集群里

对象存储(BSL)中的备份数据不归 Helm 管理,卸载 SupKube 不会删除任何一个字节。同样,集群内的 CSI 卷快照也不会被清理。

反过来说:卸载 SupKube 不等于清理了备份。若您的意图是"停止付费/释放存储",卸载后还需要单独处理对象存储桶。

标准卸载​

helm uninstall supkube -n supkube

确认工作负载已经消失:

kubectl -n supkube get deploy,svc,ingress

此时命名空间里应当只剩下被保留的对象。

重装(保留历史)​

如果您只是想重装而非清除,不要删除上面那四类对象,直接重新执行 helm install 即可:

helm install supkube supkube/supkube \
-n supkube --create-namespace \
-f values.yaml

指纹密钥、EULA 状态与多集群注册信息都会被新实例复用,跨集群信任链保持完整。

彻底清除​

不可逆

以下操作会永久删除多集群注册信息与跨集群信任密钥。执行前请确认不再需要识别历史还原点。

按顺序执行,先删自定义资源再删 CRD,避免残留终结器(finalizer)卡住删除:

# 1. 先删自定义资源
kubectl -n supkube delete clusters.supkube.io --all
kubectl -n supkube delete importpolicies.supkube.io --all

# 2. 再删 CRD
kubectl delete crd clusters.supkube.io importpolicies.supkube.io

# 3. 删除被保留的 Secret 与 ConfigMap
kubectl -n supkube delete secret supkube-fingerprint-secret
kubectl -n supkube delete configmap supkube-eula

# 4. 清理运行期自建对象(含对象存储凭据)
kubectl -n supkube get secret -l app.kubernetes.io/managed-by=supkube
kubectl -n supkube delete secret -l app.kubernetes.io/managed-by=supkube

# 5. 最后删除命名空间
kubectl delete namespace supkube
这里没有删 PVC 的步骤

因为 supkube-local-store-data 在 helm uninstall 那一步就已经被删掉了(见上文)。如果您当时打了 keep 注解把它保住,现在需要手工删:

kubectl -n supkube delete pvc supkube-local-store-data

删除它等于删除「本地备份库」里的全部备份,云端对象存储的备份不受影响。

许可证与其他残留​

许可证 Secret(supkube-license)由您带外创建,不归 Helm 管理,因此第 5 步删除命名空间时才会一并消失。若您只做了第 1–4 步而保留命名空间,请视需要单独删除。

卸载内置 Velero​

内置 Velero 是子 Chart,随主 Chart 一起卸载。但 Velero 自己的 CRD(backups.velero.io 等)同样不会被自动删除:

一个开关会改变这个行为

Velero 上游 Chart 有一个 cleanUpCRDs 选项。打开时它会注册一个卸载前执行的 Job,把 Backup / Restore / BackupStorageLocation / VolumeSnapshotLocation / PodVolumeRestore 这五类自定义资源全部删掉——注意删的是资源实例,不是 CRD 定义,选项名有误导性。

SupKube 的 values.yaml 没有覆盖这个值,沿用上游默认的 cleanUpCRDs: false,所以默认不会发生。但如果您显式打开过它,卸载时备份元数据会连同一起被清掉。

kubectl get crd | grep velero.io

删除这些 CRD 会永久丢失备份元数据——即便对象存储里的数据还在,也需要重新配置存储位置让 Velero 重新同步元数据才能恢复可见性。除非确定要彻底移除,否则建议保留。

验证方法​

确认保留项确实还在(标准卸载后):

kubectl -n supkube get secret supkube-fingerprint-secret
kubectl get crd clusters.supkube.io importpolicies.supkube.io

确认彻底清除后无残留:

kubectl get crd | grep -E 'supkube\.io|velero\.io'
kubectl get ns supkube

两条命令都应当返回空或 NotFound。

相关文档​