集群清理
清理 TFRS Operator 及其管理的基础设施。
判断部署方式
# 检查是否有 Helm releases
helm list -A | grep -E "tfrs-operator|tfrcluster|tfrtenant"
# 有输出 → Helm 部署
# 无输出 → Kustomize 部署
Helm 部署清理
从 v0.2.0-alpha1 开始,Operator 支持级联删除:删除 CR 时会自动清理其管理的所有基础设施组件、Helm releases 和 namespace。无需手动卸载 Istio、cert-manager 等基础设施。
1. 按顺序卸载 Helm releases
重要
必须按 TFRServer → TFRTenant → TFRCluster → Operator 的顺序卸载,确保 Operator 在运行状态下处理每个 CR 的级联删除。
# 查看所有相关 releases
helm list -A | grep -E "tfrserver|tfrtenant|tfrcluster|tfrs-operator"
# Step 1: 卸载 TFRServer
helm uninstall tfrserver -n <tenant-namespace>
# Step 2: 卸载 TFRTenant(等待 TFRServer 完全清理后)
helm uninstall tfrtenant
# Step 3: 卸载 TFRCluster(等待 TFRTenant 完全清理后)
helm uninstall tfrcluster -n tfrs-infra
# Step 4: 卸载 Operator
helm uninstall tfrs-operator -n tfrs-operator-system
验证清理进度
每步卸载后,可通过以下命令验证 CR 是否已完全删除:
# 检查 CR 是否还在
kubectl get tfrservers,tfrtenants,tfrclusters -A
# 检查基础设施是否已清理
helm list -A | grep -E "istio|cert-manager|cnpg|minio|rabbitmq"
2. 清理残留资源
级联删除会自动清理基础设施 namespace,但以下资源需手动清理:
# 删除残留的空 namespace(Helm 不会自动删除其 release 所在的 namespace)
kubectl delete ns tfrs-infra tfrs-operator-system 2>/dev/null
3. 删除 CRD(可选)
CRD 由 Helm 标准行为保留(防止数据丢失),如需完全清理:
# TFRS CRDs
kubectl delete crd tfrclusters.infra.tfrobotserver.cn \
tfrtenants.infra.tfrobotserver.cn \
tfrservers.tfrobot.tfrobotserver.cn
# 基础设施 CRDs(级联删除不会清理这些)
kubectl get crd | grep -E "istio|cert-manager|cnpg|rabbitmq|minio" | awk '{print $1}' | xargs kubectl delete crd
Kustomize 部署清理
注意
不要使用 make undeploy,它会同时删除 CRD,导致后续 Helm 卸载失败。
1. 删除 CR 资源
kubectl get tfrservers,tfrtenants,tfrclusters -A
kubectl delete tfrserver <name> -n <namespace>
kubectl delete tfrtenant <name>
kubectl delete tfrcluster <name>
2. 卸载基础设施 Helm releases
TFRCluster 通过 Helm SDK 安装基础设施,必须在删除 CRD 之前卸载:
# 查看 releases
helm list -A | grep -E "istio|cert-manager|cnpg|minio|rabbitmq"
# Istio(按顺序)
helm uninstall istio-ingress -n istio-ingress
helm uninstall istiod -n istio-system
helm uninstall istio-cni -n istio-system
helm uninstall istio-base -n istio-system
# 其他 Operators
helm uninstall cert-manager -n cert-manager
helm uninstall cnpg -n cnpg-system
helm uninstall operator -n minio-operator
helm uninstall rabbitmq-cluster-operator -n rabbitmq-system
3. 删除 Operator(手动)
kubectl delete deployment tfrs-operator-controller-manager -n tfrs-operator-system
4. 删除 namespace
for ns in cert-manager cnpg-system istio-ingress istio-system \
minio-operator rabbitmq-system tfrs-infra tfr-image-credentials \
tfrs-operator-system; do
kubectl delete deployments,statefulsets,daemonsets --all -n $ns 2>/dev/null
done
kubectl delete ns cert-manager cnpg-system istio-ingress istio-system \
minio-operator rabbitmq-system tfrs-infra tfr-image-credentials \
tfrs-operator-system
5. 删除集群级资源
Kustomize 部署会创建 RBAC 和 Webhook 等集群级资源,需手动清理:
kubectl get clusterrole,clusterrolebinding,validatingwebhookconfiguration,mutatingwebhookconfiguration \
-o name | grep tfrs-operator | xargs kubectl delete
6. 删除 CRD
kubectl delete crd tfrclusters.infra.tfrobotserver.cn \
tfrtenants.infra.tfrobotserver.cn \
tfrservers.tfrobot.tfrobotserver.cn
FAQ
CR 卡在 Terminating 状态
Operator 已删除导致 finalizer 无法处理:
kubectl patch <resource> <name> -p '{"metadata":{"finalizers":null}}' --type=merge
Helm uninstall 失败:CRD 已删除
过早删除 CRD(如误用 make undeploy)导致 Helm 无法识别资源:
# 直接删除 Helm release 记录
kubectl delete secret -n <namespace> -l owner=helm
# 示例:清理 tfrs-infra namespace 中的所有 Helm records
kubectl delete secret -n tfrs-infra -l owner=helm
Namespace 删除被拒绝
某些云平台(如腾讯云 TKE)禁止删除含 Pod 的 namespace:
# 先删除所有 workload
kubectl delete deployments,statefulsets,daemonsets,replicasets --all -n <namespace>
# 等待 Pod 终止
kubectl get pods -n <namespace> -w
# 再删除 namespace
kubectl delete namespace <namespace>