跳到主要内容
版本:0.3.0-dev0

集群清理

清理 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>