Skip to content

Commit 093cfb5

Browse files
committed
fix
1 parent 6a36451 commit 093cfb5

File tree

2 files changed

+114
-35
lines changed

2 files changed

+114
-35
lines changed

.github/workflows/destroy.yml

Lines changed: 87 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,18 @@ jobs:
2626
echo "APP_NAME: ${{ vars.APP_NAME }}"
2727
echo "KARPENTER_NODEPOOL_NAME: ${{ vars.KARPENTER_NODEPOOL_NAME }}"
2828
echo "KARPENTER_NODECLASS_NAME: ${{ vars.KARPENTER_NODECLASS_NAME }}"
29+
echo "KARPENTER_NODE_ROLE: ${{ vars.KARPENTER_NODE_ROLE }}"
30+
echo "KARPENTER_INSTANCE_PROFILE: ${{ vars.KARPENTER_INSTANCE_PROFILE }}"
2931
echo "KARPENTER_NAMESPACE: ${{ vars.KARPENTER_NAMESPACE }}"
3032
if [[ -z "${{ vars.KARPENTER_NODEPOOL_NAME }}" ]]; then
3133
echo "WARNING: KARPENTER_NODEPOOL_NAME variable not found. Karpenter resources may not be deployed."
3234
fi
35+
if [[ -z "${{ vars.KARPENTER_NODE_ROLE }}" ]]; then
36+
echo "WARNING: KARPENTER_NODE_ROLE variable not found. Karpenter resources may not be deployed."
37+
fi
38+
if [[ -z "${{ vars.KARPENTER_INSTANCE_PROFILE }}" ]]; then
39+
echo "WARNING: KARPENTER_INSTANCE_PROFILE variable not found. Karpenter resources may not be deployed."
40+
fi
3341
if [[ -z "${{ vars.KARPENTER_NAMESPACE }}" ]]; then
3442
echo "WARNING: KARPENTER_NAMESPACE variable not found. Karpenter resources may not be deployed."
3543
fi
@@ -73,18 +81,71 @@ jobs:
7381
continue-on-error: true
7482

7583
# ---------------------------
76-
# Delete Karpenter Resources
84+
# Delete Karpenter Resources (Updated)
7785
# ---------------------------
78-
- name: Delete Karpenter Resources
86+
- name: Delete Karpenter Provisioners and AWSNodeTemplates
87+
run: |
88+
echo "Deleting Karpenter Provisioners..."
89+
kubectl delete provisioner ${{ vars.KARPENTER_NODEPOOL_NAME }} --ignore-not-found -n ${{ vars.KARPENTER_NAMESPACE }} || true
90+
kubectl delete provisioner --all -n ${{ vars.KARPENTER_NAMESPACE }} --ignore-not-found || true
91+
92+
echo "Deleting Karpenter AWSNodeTemplates..."
93+
kubectl delete awsnodetemplate ${{ vars.KARPENTER_NODECLASS_NAME }} --ignore-not-found -n ${{ vars.KARPENTER_NAMESPACE }} || true
94+
kubectl delete awsnodetemplate --all -n ${{ vars.KARPENTER_NAMESPACE }} --ignore-not-found || true
95+
96+
echo "Waiting for resources to be cleaned up..."
97+
sleep 10
98+
continue-on-error: true
99+
100+
- name: Clean up Karpenter CRDs and Webhooks
101+
run: |
102+
echo "Deleting Karpenter CRDs..."
103+
kubectl delete crd provisioners.karpenter.sh --ignore-not-found || true
104+
kubectl delete crd awsnodetemplates.karpenter.k8s.aws --ignore-not-found || true
105+
106+
echo "Deleting Karpenter webhooks..."
107+
kubectl delete validatingwebhookconfiguration defaulting.webhook.karpenter.sh --ignore-not-found || true
108+
kubectl delete validatingwebhookconfiguration validation.webhook.karpenter.sh --ignore-not-found || true
109+
kubectl delete mutatingwebhookconfiguration defaulting.webhook.karpenter.sh --ignore-not-found || true
110+
111+
echo "Deleting Karpenter finalizers if stuck..."
112+
kubectl patch crd provisioners.karpenter.sh -p '{"metadata":{"finalizers":[]}}' --type=merge || true
113+
kubectl patch crd awsnodetemplates.karpenter.k8s.aws -p '{"metadata":{"finalizers":[]}}' --type=merge || true
114+
continue-on-error: true
115+
116+
117+
- name: Uninstall Karpenter Helm Release
79118
run: |
80-
kubectl delete nodepool ${{ vars.KARPENTER_NODEPOOL_NAME }} -n ${{ vars.KARPENTER_NAMESPACE }} --ignore-not-found || true
81-
kubectl delete ec2nodeclass ${{ vars.KARPENTER_NODECLASS_NAME }} -n ${{ vars.KARPENTER_NAMESPACE }} --ignore-not-found || true
82-
helm uninstall karpenter-config -n ${{ vars.KARPENTER_NAMESPACE }} || true
119+
echo "Uninstalling Karpenter Helm release..."
83120
helm uninstall karpenter -n ${{ vars.KARPENTER_NAMESPACE }} || true
121+
122+
echo "Waiting for pods to terminate..."
123+
kubectl wait --for=delete pod -l app.kubernetes.io/name=karpenter -n ${{ vars.KARPENTER_NAMESPACE }} --timeout=120s || true
124+
125+
echo "Force deleting any remaining pods..."
126+
kubectl delete pods --all -n ${{ vars.KARPENTER_NAMESPACE }} --force --grace-period=0 || true
127+
continue-on-error: true
128+
129+
- name: Clean up Karpenter CRDs and Webhooks
130+
run: |
131+
echo "Deleting Karpenter CRDs..."
132+
kubectl delete crd nodepools.karpenter.sh --ignore-not-found || true
133+
kubectl delete crd provisioners.karpenter.sh --ignore-not-found || true
134+
kubectl delete crd awsnodetemplates.karpenter.k8s.aws --ignore-not-found || true
135+
kubectl delete crd ec2nodeclasses.karpenter.k8s.aws --ignore-not-found || true
136+
137+
echo "Deleting Karpenter webhooks..."
138+
kubectl delete validatingwebhookconfiguration defaulting.webhook.karpenter.sh --ignore-not-found || true
139+
kubectl delete validatingwebhookconfiguration validation.webhook.karpenter.sh --ignore-not-found || true
140+
kubectl delete mutatingwebhookconfiguration defaulting.webhook.karpenter.sh --ignore-not-found || true
141+
142+
echo "Deleting Karpenter finalizers if stuck..."
143+
kubectl patch crd nodepools.karpenter.sh -p '{"metadata":{"finalizers":[]}}' --type=merge || true
144+
kubectl patch crd ec2nodeclasses.karpenter.k8s.aws -p '{"metadata":{"finalizers":[]}}' --type=merge || true
84145
continue-on-error: true
85146

86147
# ---------------------------
87-
# Uninstall Helm Releases
148+
# Uninstall Other Helm Releases
88149
# ---------------------------
89150
- name: Uninstall Helm Releases
90151
run: |
@@ -102,14 +163,17 @@ jobs:
102163
kubectl delete namespace ${{ vars.APP_NAMESPACE }} --ignore-not-found
103164
kubectl delete namespace ${{ vars.MONITORING_NAMESPACE }} --ignore-not-found
104165
kubectl delete namespace ${{ vars.ARGOCD_NAMESPACE }} --ignore-not-found
105-
kubectl delete namespace ${{ vars.KARPENTER_NAMESPACE }} --ignore-not-found
106166
kubectl delete namespace ingress-nginx --ignore-not-found
167+
168+
# Delete Karpenter namespace last and force if needed
169+
kubectl delete namespace ${{ vars.KARPENTER_NAMESPACE }} --ignore-not-found --timeout=60s || true
170+
kubectl delete namespace ${{ vars.KARPENTER_NAMESPACE }} --force --grace-period=0 --ignore-not-found || true
107171
continue-on-error: true
108172

109173
# ---------------------------
110174
# Delete CRDs (Prometheus & Grafana)
111175
# ---------------------------
112-
- name: Delete CRDs
176+
- name: Delete Monitoring CRDs
113177
run: |
114178
kubectl get crd -o name | grep -E 'prometheus|grafana|alertmanager|servicemonitor|prometheusrule' | xargs -r kubectl delete || true
115179
continue-on-error: true
@@ -123,6 +187,19 @@ jobs:
123187
kubectl delete pv --all || true
124188
continue-on-error: true
125189

190+
# ---------------------------
191+
# Final cleanup verification
192+
# ---------------------------
193+
- name: Verify Karpenter cleanup
194+
run: |
195+
echo "Verifying Karpenter cleanup..."
196+
kubectl get pods -n ${{ vars.KARPENTER_NAMESPACE }} || echo "Karpenter namespace not found (expected)"
197+
kubectl get crd | grep karpenter || echo "No Karpenter CRDs found (expected)"
198+
kubectl get validatingwebhookconfiguration | grep karpenter || echo "No Karpenter webhooks found (expected)"
199+
kubectl get mutatingwebhookconfiguration | grep karpenter || echo "No Karpenter webhooks found (expected)"
200+
helm list -n ${{ vars.KARPENTER_NAMESPACE }} || echo "No Helm releases in karpenter namespace (expected)"
201+
continue-on-error: true
202+
126203
# ---------------------------
127204
# Wait for cleanup to complete
128205
# ---------------------------
@@ -156,6 +233,8 @@ jobs:
156233
gh variable delete APP_NAME --repo $GITHUB_REPOSITORY || true
157234
gh variable delete KARPENTER_NODEPOOL_NAME --repo $GITHUB_REPOSITORY || true
158235
gh variable delete KARPENTER_NODECLASS_NAME --repo $GITHUB_REPOSITORY || true
236+
gh variable delete KARPENTER_NODE_ROLE --repo $GITHUB_REPOSITORY || true
237+
gh variable delete KARPENTER_INSTANCE_PROFILE --repo $GITHUB_REPOSITORY || true
159238
gh variable delete KARPENTER_NAMESPACE --repo $GITHUB_REPOSITORY || true
160239
env:
161240
GITHUB_TOKEN: ${{ secrets.PAT_GITHUB }}

karpenter/karpenter-resources.yml

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,33 @@
1-
apiVersion: karpenter.sh/v1
2-
kind: NodePool
3-
metadata:
4-
name: ${KARPENTER_NODEPOOL_NAME}
5-
namespace: ${KARPENTER_NAMESPACE}
6-
spec:
7-
template:
8-
spec:
9-
nodeClassRef:
10-
name: ${KARPENTER_NODECLASS_NAME}
11-
requirements:
12-
- key: "karpenter.sh/capacity-type"
13-
operator: In
14-
values: ["spot", "on-demand"]
15-
- key: "kubernetes.io/arch"
16-
operator: In
17-
values: ["amd64"]
18-
---
19-
apiVersion: karpenter.k8s.aws/v1
20-
kind: EC2NodeClass
1+
apiVersion: karpenter.k8s.aws/v1alpha1
2+
kind: AWSNodeTemplate
213
metadata:
224
name: ${KARPENTER_NODECLASS_NAME}
235
namespace: ${KARPENTER_NAMESPACE}
246
spec:
25-
role: ${KARPENTER_NODE_ROLE}
7+
subnetSelector:
8+
karpenter.sh/discovery: ${CLUSTER_NAME}
9+
securityGroupSelector:
10+
karpenter.sh/discovery: ${CLUSTER_NAME}
2611
amiFamily: AL2
27-
subnetSelectorTerms:
28-
- tags:
29-
karpenter.sh/discovery: ${CLUSTER_NAME}
30-
securityGroupSelectorTerms:
31-
- tags:
32-
karpenter.sh/discovery: ${CLUSTER_NAME}
3312
instanceProfile: ${KARPENTER_INSTANCE_PROFILE}
13+
role: ${KARPENTER_NODE_ROLE}
14+
15+
---
16+
apiVersion: karpenter.sh/v1alpha5
17+
kind: Provisioner
18+
metadata:
19+
name: ${KARPENTER_NODEPOOL_NAME}
20+
spec:
21+
cluster:
22+
name: ${CLUSTER_NAME}
23+
provider:
24+
awsNodeTemplate:
25+
name: ${KARPENTER_NODECLASS_NAME}
26+
requirements:
27+
- key: "karpenter.sh/capacity-type"
28+
operator: In
29+
values: ["spot", "on-demand"]
30+
- key: "kubernetes.io/arch"
31+
operator: In
32+
values: ["amd64"]
33+
ttlSecondsAfterEmpty: 30

0 commit comments

Comments
 (0)