Teardown is part of the platform design. The EKS demo environment should not be left running after evidence capture because the cluster, worker nodes, and load balancers can exceed the low-idle cost guardrail.
Use this order to reduce orphaned AWS resources:
- Capture final screenshots, logs, and notes.
- Delete ArgoCD applications or disable sync for tenant apps.
- Delete Kubernetes Ingress resources and wait for ALB deletion.
- Delete tenant workloads and namespaces.
- Uninstall cluster add-ons if they were installed manually.
- Run Terraform destroy.
- Verify no AWS resources remain.
Inspect before deletion:
kubectl get applications -n argocd
kubectl get ingress -A
kubectl get svc -A
kubectl get pods -ADelete or sync-delete ArgoCD apps:
kubectl delete application -n argocd bethel-atlanta demo-church tenant-policies shared-namespaces
kubectl delete application -n argocd pulpit-v2-rootIf application names differ, list them first and delete the actual names.
Wait for ingress cleanup:
kubectl get ingress -ADo not continue until AWS load balancers created by Kubernetes ingress are gone or actively deleting.
terraform -chdir=terraform plan -destroy -var-file=environments/dev/dev.tfvars
terraform -chdir=terraform destroy -var-file=environments/dev/dev.tfvarsCheck for leftovers:
aws eks describe-cluster --region us-east-1 --name pulpit-v2-dev-eks
aws elbv2 describe-load-balancers --region us-east-1
aws ec2 describe-nat-gateways --region us-east-1
aws ec2 describe-volumes --region us-east-1 --filters Name=status,Values=available
aws ecr describe-repositories --region us-east-1Expected result after full cleanup:
- EKS cluster not found
- no Pulpit V2 ALBs
- no Pulpit V2 target groups
- no unexpected NAT gateways
- no unattached EBS volumes from the demo
- no ECR repositories unless intentionally retained
| Symptom | Likely cause | Fix |
|---|---|---|
| Terraform destroy hangs on VPC | load balancer, ENI, or security group still exists | delete ingress and wait for controller cleanup |
| ALB remains after cluster deletion | ingress was removed after controller disappeared | delete ALB manually and record the incident |
| Namespace stuck terminating | finalizer remains on custom resource | inspect finalizers and delete dependent CRs first |
| ECR repository blocks destroy | images remain and force delete disabled | empty repo or enable force delete for demo |
| ExternalSecret stuck | CRD or operator removed before CR cleanup | delete ExternalSecret resources before removing the operator |
Capture at least:
terraform destroysuccess- EKS cluster absence
- ALB absence
- notes about any manual cleanup
Add the evidence to deployment-evidence.md after a real demo run.