Dọn dẹp sai thứ tự là nguyên nhân số một gây tốn tiền ngoài ý muốn. Hai ALB và các EBS volume của PVC vẫn bị tính tiền kể cả khi bạn nghĩ đã xoá cluster. Làm đúng thứ tự dưới đây và chạy checklist xác minh ở cuối.
Nguyên tắc: dọn dẹp theo thứ tự ngược với lúc dựng. Quan trọng nhất là giải phóng các tài
nguyên do Kubernetes tạo ra (ALB, EBS) TRƯỚC khi terraform destroy — nếu không, AWS Load
Balancer Controller bị xoá cùng cluster sẽ không kịp dọn ALB, để lại load balancer mồ côi khiến
terraform destroy thất bại và bạn tiếp tục bị tính tiền.
Nếu đã từng sửa code, đảm bảo bản local là mới nhất (hoặc xoá và clone lại cho sạch):
cd vprofile-app && git pull
cd ../vprofile-helm && git pull
cd ../vprofile-infra && git pull
Xác định trước hai load balancer sẽ phải biến mất (một của vProfile, một của ArgoCD):
# Console: EC2 > Load Balancers (đúng region). Hoặc CLI:
aws elbv2 describe-load-balancers \
--query "LoadBalancers[].{Name:LoadBalancerName,DNS:DNSName}" --output table
Xoá Ingress trước để AWS Load Balancer Controller tự xoá 2 ALB (lúc này controller còn sống):
kubectl get ingress -A
kubectl delete ingress vpro-ingress -n vprofile
kubectl delete ingress argocd-ingress -n argocd
Xoá workload vProfile để PVC được xoá → EBS CSI tự xoá EBS volume của MySQL (reclaim policy
Delete). Cách gọn nhất là xoá namespace (hoặc xoá Application trong ArgoCD):
kubectl delete ns vprofile
kubectl get pvc -A # phải trống, không còn PVC nào treo
Chờ tới khi cả 2 ALB biến mất (kiểm tra lại EC2 > Load Balancers). Nếu sau vài phút ALB vẫn còn
hoặc Ingress không xoá được, xoá ALB thủ công trong AWS Console — nếu không terraform destroy
sẽ kẹt ở subnet/VPC vì còn ENI của load balancer.
Service account này được tạo bằng eksctl (kèm một CloudFormation stack). Xoá bằng delete:
eksctl delete iamserviceaccount \
--cluster vprofile-eks-cluster \
--namespace kube-system \
--name aws-load-balancer-controller
Lệnh này mất một chút thời gian (xoá luôn CloudFormation stack tương ứng). IAM policy
AWSLoadBalancerControllerIAMPolicy có thể giữ lại — không tốn tiền; xoá sau cũng được.
terraform destroy (xoá EKS, VPC, node group)cd vprofile-infra
terraform init # không bắt buộc, chạy cho chắc nếu đã sửa code
terraform destroy
Lệnh này xoá EKS control plane, node group (EC2 worker), VPC, public subnet, route table và
Internet Gateway. (Hạ tầng này dùng public subnet, không có NAT Gateway/Elastic IP nên không
phải lo hai khoản đó.) Đợi chạy xong và xác nhận Destroy complete!.
Muốn dựng lại để luyện tập? Bạn không cần làm lại từ đầu: chỉ cần terraform apply, rồi đi tiếp
từ bước tạo iamserviceaccount ở phần chuẩn bị EKS (IAM policy đã có sẵn).
Khuyến nghị: Stop, đừng Terminate. Dựng lại SonarServer khá mất công. Vào EC2 > Stop
instance để khỏi tốn tiền compute; khi cần luyện tập thì Start lại (nhớ cập nhật SONAR_HOST_URL
vì public IP đổi sau mỗi lần Stop/Start).
Nếu chắc chắn không dùng nữa:
SonarServer.sonar-sg.Lưu ý: EC2 ở trạng thái Stopped vẫn bị tính tiền cho EBS root volume (nhỏ), nhưng không tính tiền compute.
github-actions và terraform-admin.vprofile và argocd ở nhà cung cấp tên miền.AWSLoadBalancerControllerIAMPolicy.Đi qua từng mục trong AWS Console (đúng region đã dùng):
| Dịch vụ | Cần kiểm tra | Tốn tiền nếu bỏ sót |
|---|---|---|
| EC2 > Load Balancers | 2 ALB đã biến mất | ALB tính tiền theo giờ |
| EC2 > Volumes (EBS) | Không còn volume available/mồ côi (gp2 của PVC) | EBS tính tiền theo GB |
| EC2 > Instances | Worker node đã xoá; SonarServer Stopped/Terminated | compute |
| EKS > Clusters | vprofile-eks-cluster đã biến mất | control plane theo giờ |
| CloudFormation | Stack eksctl-* đã xoá | (kéo theo tài nguyên) |
| ECR | Repo đã xoá nếu không dùng | lưu trữ image |
| IAM | Access keys/PAT đã thu hồi | rủi ro bảo mật |
Hai thứ hay bị quên nhất và tốn tiền âm thầm: ALB còn sót (do xoá Ingress không thành công) và EBS volume mồ côi do PVC chưa xoá trước khi destroy cluster. Luôn kiểm tra hai mục này lần cuối.