You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何删除本地Kubernetes部署资源?解决自动重建无需硬重置K8s

解决K8s资源自动重建的彻底清理方案

兄弟,这种删完资源立马自动重建的坑我踩过好几次!核心问题就是你只删了底层的Pod、ReplicaSet或者Deployment,但有更高层级的控制器在盯着这些资源,一发现没了就自动重建。不用硬重置集群,按下面的步骤来就能彻底清干净:

第一步:先搞清楚「谁」在重建资源

这是最关键的一步,找到根源才能对症下药:

  • 选一个自动重建的Pod,用命令查看它的创建来源:
    kubectl describe pod <你的Pod名称> -n <对应命名空间>
    
    拉到Events区域,找类似Created by <控制器类型>/<控制器名称>的日志,比如StatefulSet、DaemonSet、CronJob或者自定义Operator,这就是重建的源头。
  • 也可以全局排查所有可能的控制器资源,避免漏掉:
    kubectl get statefulsets,daemonsets,cronjobs,operators --all-namespaces
    
  • 如果你用了Helm部署应用,一定要检查有没有残留的release:
    helm list --all-namespaces
    
    Helm会追踪它创建的所有资源,只要release还在,手动删资源后它会自动补回来。

第二步:针对不同源头的清理方法

情况1:是StatefulSet/DaemonSet在搞事

不要只删Pod!先删掉对应的控制器,再清理底层资源:

# 先删StatefulSet(替换成你的控制器名称和命名空间)
kubectl delete statefulset <控制器名称> -n <命名空间>
# 或者删DaemonSet
kubectl delete daemonset <控制器名称> -n <命名空间>
# 最后再删残留的Pod
kubectl delete pod --all -n <命名空间>

情况2:是CronJob自动触发重建

CronJob会定期创建Job,Job又会创建Pod,所以要先暂停再删除:

# 先暂停CronJob,防止它继续触发新任务
kubectl patch cronjob <CronJob名称> -n <命名空间> -p '{"spec":{"suspend":true}}'
# 删除所有关联的Job
kubectl delete job --all -n <命名空间>
# 最后删除CronJob本身
kubectl delete cronjob <CronJob名称> -n <命名空间>

情况3:是Helm Release残留

直接卸载对应的Helm release,它会自动清理所有关联资源:

helm uninstall <release名称> -n <命名空间>

如果release已经被标记为failedpending,可以加--purge参数强制清理(旧版Helm),新版用helm uninstall即可。

情况4:是自定义Operator在自动恢复

比如Prometheus Operator、Istio Operator这类,它们会通过自定义资源(CR)来管理实例:

  1. 先找到对应的自定义资源,比如Prometheus的CR:
    kubectl get prometheus --all-namespaces
    
  2. 删除对应的CR实例,Operator就会停止重建资源:
    kubectl delete prometheus <实例名称> -n <命名空间>
    
  3. 最后如果不需要这个Operator了,再删掉Operator本身的Deployment/StatefulSet。

第三步:确认彻底清理干净

做完上面的步骤后,用下面的命令检查对应命名空间的资源,确保没有残留的控制器或Pod:

kubectl get all -n <命名空间>

如果还有资源,重复第一步排查是不是还有没找到的控制器。

内容的提问来源于stack exchange,提问作者MikeZ

火山引擎 最新活动