You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Terraform彻底删除EKS集群及Kubernetes在AWS中创建的关联资源?

我来给你梳理几个更优雅的方案,帮你摆脱繁琐的Shell脚本,让terraform destroy自动清理这些EKS关联资源:

方案1:用Terraform的EKS + Kubernetes Provider联动管理

其实你可以直接用Terraform的Kubernetes Provider来管理集群内的Ingress、PVC等资源,同时让这些资源和AWS云资源形成完整的依赖链:

  • 当你用Kubernetes Provider定义Ingress并配置好AWS Load Balancer Controller的注解时,Terraform会追踪到这个Ingress对应的ALB资源。执行terraform destroy时,Terraform会先删除Ingress资源,AWS Load Balancer Controller会自动同步删除对应的ALB、目标组、关联安全组等AWS资源。
  • 对于PVC,只要你使用的StorageClassreclaimPolicy设为Delete(这是默认值),当Terraform删除PVC时,对应的EBS存储卷会被自动清理。
  • 关键是要确保Kubernetes Provider正确关联到你的EKS集群,并且AWS Load Balancer Controller也是通过Terraform部署的,这样整个依赖关系会被Terraform自动识别。
方案2:利用Terraform生命周期配置与数据源追踪未直接管理的资源

如果有些关联资源是EKS自动创建但没被Terraform直接定义的,你可以这样处理:

  • 用data数据源引用这些AWS资源(比如通过标签查询自动生成的ALB),然后在EKS集群资源中配置depends_on,确保这些关联资源在集群销毁前被清理。
  • 借助lifecycle块的destroy_before_create等配置,调整资源的销毁顺序——比如先删除所有K8s命名空间(命名空间删除会自动清理内部所有资源),再销毁EKS集群,这样关联的AWS资源会被同步清理。
方案3:封装EKS环境为Terraform模块

把整个EKS环境(集群、节点组、Load Balancer Controller、StorageClass、业务K8s资源等)封装成一个Terraform模块,在模块内部定义好所有资源的依赖顺序:

  • 模块内先定义EKS集群,再部署Load Balancer Controller和StorageClass,最后定义业务相关的Ingress、PVC等资源。
  • 当执行terraform destroy时,Terraform会自动按照反向依赖顺序销毁资源:先删业务K8s资源→再删Load Balancer Controller→再删节点组→最后删EKS集群,所有关联的AWS资源都会被自动清理,完全不需要额外脚本。
额外注意事项
  • 确保所有K8s资源都是通过Terraform管理的,手动创建的资源Terraform无法追踪,需要先通过terraform import导入到状态中。
  • 检查StorageClass的reclaimPolicy,如果设为Retain的话,PVC删除后EBS卷会保留,需要手动调整为Delete才能自动清理。
  • 对于Route 53记录,如果是Ingress自动创建的,确保AWS Load Balancer Controller配置了对应的注解,这样Ingress删除时记录会被同步删除。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 19:27:54