@@ -84,11 +84,33 @@ jobs:
8484 # Delete Karpenter Resources (Updated)
8585 # ---------------------------
8686
87- - name : Scale down to release nodes first
87+ # Replace the Karpenter cleanup section in your workflow with this enhanced version
88+
89+ # ---------------------------
90+ # Scale down workloads FIRST
91+ # ---------------------------
92+ - name : Scale down all workloads before cleanup
8893 run : |
89- kubectl scale deployment --all --replicas=0 -n ${{ vars.APP_NAMESPACE }} || true
90- sleep 30 # Let Karpenter scale down naturally
91- continue-on-error : true
94+ echo "Scaling down all deployments and deleting services to trigger LB cleanup..."
95+
96+ # Scale down ALL deployments across ALL namespaces (not just app namespace)
97+ kubectl get deployments --all-namespaces -o json | jq -r '.items[] | "\(.metadata.namespace) \(.metadata.name)"' | while read namespace deployment; do
98+ echo "Scaling down deployment $deployment in namespace $namespace"
99+ kubectl scale deployment $deployment --replicas=0 -n $namespace || true
100+ done
101+
102+ # Scale down daemonsets that might be running
103+ kubectl get daemonsets --all-namespaces -o json | jq -r '.items[] | "\(.metadata.namespace) \(.metadata.name)"' | while read namespace daemonset; do
104+ echo "Deleting daemonset $daemonset in namespace $namespace"
105+ kubectl delete daemonset $daemonset -n $namespace --ignore-not-found || true
106+ done
107+
108+ # Delete ALL services of type LoadBalancer IMMEDIATELY
109+ echo "Deleting LoadBalancer services..."
110+ kubectl get services --all-namespaces -o json | jq -r '.items[] | select(.spec.type=="LoadBalancer") | "\(.metadata.namespace) \(.metadata.name)"' | while read namespace service; do
111+ echo "Deleting service $service in namespace $namespace"
112+ kubectl delete service $service -n $namespace --ignore-not-found || true
113+ done
92114
93115 - name : Delete Karpenter Provisioners and AWSNodeTemplates
94116 run : |
0 commit comments