Skip to content

Commit 366e98e

Browse files
committed
Add cleanup scripts.
Signed-off-by: Kurt Garloff <kurt@garloff.de>
1 parent b67b9b4 commit 366e98e

2 files changed

Lines changed: 81 additions & 12 deletions

File tree

16-cleanup-cluster.sh

Lines changed: 79 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,81 @@
11
#!/bin/bash
22
set -e
3-
# Create 16-cleanup-cluster.sh script
4-
echo "Cleaning cluster not yet implemented."
5-
echo "Hint: Please delete Loadbalancers and persistent volumes before deleting cluster."
6-
3+
# Cleaning up inside cluster
4+
# We need to remove the LB and Storage resources
5+
if test -n "$1"; then
6+
SET="$1"
7+
else
8+
if test -e cluster-settings.env; then SET=cluster-settings.env;
9+
else echo "You need to pass a cluster-settings.env file as parameter"; exit 1
10+
fi
11+
fi
12+
# Read settings -- make sure you can trust it
13+
source "$SET"
14+
kubectl get cluster -A
15+
KCFG=~/.kube/$CS_NAMESPACE.$CL_NAME
16+
export KUBECONFIG=$KCFG
17+
# This is from KaaS v1, thanks for Roman, Matej, ...
18+
echo "Cleaning cluster -n $CS_NAMESPACE $CL_NAME"
19+
# We could prevent the creation of new pods and PVs
20+
# Cordoning all nodes
21+
echo "Note: NOT cordoning all nodes ..."
22+
#kubectl get nodes -o=jsonpath="{'set -x\n'}{range .items[*]}{'kubectl cordon '}{.metadata.name}{'\n'}{end}" | bash
23+
# Delete storage classes (prevents creation of new PVs)
24+
echo "Note: NOT deleting storage classes ..."
25+
#kubectl get storageclasses -o=jsonpath="{'set -x\n'}{range .items[*]}{'kubectl delete storageclass '}{.metadata.name}{' --ignore-not-found=true\n'}{end}" | bash
26+
# Delete nginx ingress
27+
INPODS=$(kubectl --namespace ingress-nginx get pods)
28+
if echo "$INPODS" | grep nginx >/dev/null 2>&1; then
29+
echo -en " Delete ingress \n "
30+
timeout 150 kubectl delete -f ~/${CLUSTER_NAME}/deployed-manifests.d/nginx-ingress.yaml
31+
fi
32+
# Delete deployments with persistent volume claims
33+
echo "Deleting deployments with persistent volume claims ..."
34+
kubectl get deployments --all-namespaces -o=jsonpath="{'set -x\n'}{range .items[?(@.spec.template.spec.volumes[*].persistentVolumeClaim.claimName)]}{'kubectl delete deployment '}{.metadata.name}{' -n '}{.metadata.namespace}{' --grace-period=0 --ignore-not-found=true\n'}{end}" | bash
35+
# Delete daemonsets with persistent volume claims
36+
echo "Deleting daemonsets with persistent volume claims ..."
37+
kubectl get daemonsets --all-namespaces -o=jsonpath="{'set -x\n'}{range .items[?(@.spec.template.spec.volumes[*].persistentVolumeClaim.claimName)]}{'kubectl delete daemonset '}{.metadata.name}{' -n '}{.metadata.namespace}{' --grace-period=0 --ignore-not-found=true\n'}{end}" | bash
38+
# Delete statefulsets with persistent volume claims
39+
echo "Deleting statefulsets with persistent volume claims ..."
40+
kubectl get statefulsets --all-namespaces -o=jsonpath="{'set -x\n'}{range .items[?(@.spec.template.spec.volumes[*].persistentVolumeClaim.claimName)]}{'kubectl delete statefulset '}{.metadata.name}{' -n '}{.metadata.namespace}{' --grace-period=0 --ignore-not-found=true\n'}{end}" | bash
41+
# Delete all CronJobs
42+
echo "Deleting all CronJobs ..."
43+
kubectl get cronjobs --all-namespaces -o=jsonpath="{'set -x\n'}{range .items[*]}{'kubectl delete cronjob '}{.metadata.name}{' -n '}{.metadata.namespace}{' --grace-period=0 --force\n'}{end}" | bash
44+
# Delete all Jobs
45+
echo "Deleting all Jobs ..."
46+
kubectl get jobs --all-namespaces -o=jsonpath="{'set -x\n'}{range .items[*]}{'kubectl $KCONTEXT delete job '}{.metadata.name}{' -n '}{.metadata.namespace}{' --grace-period=0 --force\n'}{end}" | bash
47+
# Delete pods with persistent volume claims
48+
echo "Deleting pods with persistent volume claims ..."
49+
kubectl get pods --all-namespaces -o=jsonpath="{'set -x\n'}{range .items[?(@.spec.volumes[*].persistentVolumeClaim.claimName)]}{'kubectl $KCONTEXT delete pod '}{.metadata.name}{' -n '}{.metadata.namespace}{' --grace-period=0 --ignore-not-found=true\n'}{end}" | bash
50+
# Delete persistent volume claims
51+
echo "Delete persistent volume claims"
52+
kubectl get pvc --all-namespaces -o=jsonpath="{'set -x\n'}{range .items[*]}{'kubectl delete pvc '}{.metadata.name}{' -n '}{.metadata.namespace}{' --grace-period=0 --ignore-not-found=true --wait\n'}{end}" | bash
53+
# Delete Persistent Volumes
54+
echo "Deleting all Persistent Volumes..."
55+
kubectl get pv -o=jsonpath="{'set -x\n'}{range .items[*]}{'kubectl $KCONTEXT delete pv '}{.metadata.name}{' --grace-period=0 --ignore-not-found=true --wait\n'}{end}" | bash
56+
# Delete all Ingress
57+
echo "Deleting all Ingress ..."
58+
kubectl get ingress --all-namespaces -o=jsonpath="{'set -x\n'}{range .items[*]}{'kubectl delete ingress '}{.metadata.name}{' -n '}{.metadata.namespace}{' --grace-period=0 --ignore-not-found=true\n'}{end}" | bash
59+
# Delete all deployments
60+
echo "Deleting all deployments (but kube-system) ..."
61+
kubectl get deployments --all-namespaces --field-selector metadata.namespace!=kube-system -o=jsonpath="{'set -x\n'}{range .items[*]}{'kubectl delete deployment '}{.metadata.name}{' -n '}{.metadata.namespace}{' --grace-period=0 --ignore-not-found=true\n'}{end}" | bash
62+
# Delete all daemonsets - avoid hitting OCCM, CSI
63+
echo "Deleting all daemonsets (but kube-system) ..."
64+
kubectl get daemonsets --all-namespaces --field-selector metadata.namespace!=kube-system -o=jsonpath="{'set -x\n'}{range .items[*]}{'kubectl delete daemonset '}{.metadata.name}{' -n '}{.metadata.namespace}{' --grace-period=0 --ignore-not-found=true\n'}{end}" | bash
65+
# Delete all statefulsets - avoid hitting OCCM, CSI
66+
echo "Deleting all statefulsets (but kube-system) ..."
67+
kubectl get statefulsets --all-namespaces --field-selector metadata.namespace!=kube-system -o=jsonpath="{'set -x\n'}{range .items[*]}{'kubectl $KCONTEXT delete statefulset '}{.metadata.name}{' -n '}{.metadata.namespace}{' --grace-period=0 --ignore-not-found=true\n'}{end}" | bash
68+
# Delete all Services (except `kubernetes` service in `default` namespace)
69+
echo "Deleting all Services (but kube-system, kubernetes) ..."
70+
kubectl get services --all-namespaces --field-selector metadata.namespace!=kube-system,metadata.name!=kubernetes -o=jsonpath="{'set -x\n'}{range .items[*]}{'kubectl delete service '}{.metadata.name}{' -n '}{.metadata.namespace}{' --grace-period=0 --ignore-not-found=true\n'}{end}" | bash
71+
# Delete workload pods
72+
echo "Deleting pods (but kube-system) ..."
73+
kubectl get pods --all-namespaces --field-selector metadata.namespace!=kube-system -o=jsonpath="{'set -x\n'}{range .items[*]}{'kubectl $KCONTEXT delete pod '}{.metadata.name}{' -n '}{.metadata.namespace}{' --grace-period=0 --ignore-not-found=true\n'}{end}" | bash
74+
# TODO:
75+
# - Delete ingress-nginx config map and secret and ingressclass
76+
# - Delete helm release secret
77+
echo "# Note: You may need to delete a helm secret to be able to install ingress-nginx via helm again"
78+
kubectl get secrets -A
79+
# DONE
80+
echo "Cluster should be empty now and ready for deletion"
81+
kubectl get pods -A

17-delete-cluster.sh

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
21
#!/bin/bash
32
set -e
43
# We need settings
4+
unset KUBECONFIG
55
if test -n "$1"; then
66
SET="$1"
77
else
@@ -12,13 +12,7 @@ fi
1212
# Read settings -- make sure you can trust it
1313
source "$SET"
1414
# Sanity checks
15-
if test -z "$CS_MAINVER"; then echo "Configure CS_MAINVER"; exit 2; fi
16-
if test -z "$CS_VERSION"; then echo "Configure CS_VERSION"; exit 3; fi
17-
if test -z "$CL_PATCHVER"; then echo "Configure CL_PATCHVER"; exit 4; fi
15+
if test -z "$CS_NAMESPACE"; then echo "Configure CS_NAMESPACE"; exit 2; fi
1816
if test -z "$CL_NAME"; then echo "Configure CL_NAME"; exit 5; fi
19-
if test -z "$CL_PODCIDR"; then echo "Configure CL_PODCIDR"; exit 6; fi
20-
if test -z "$CL_SVCCIDR"; then echo "Configure CL_SVCCIDR"; exit 7; fi
21-
if test -z "$CL_CTRLNODES"; then echo "Configure CL_CTRLNODES"; exit 8; fi
22-
if test -z "$CL_WRKRNODES"; then echo "Configure CL_WRKRNODES"; exit 9; fi
2317
# Delete Cluster
2418
kubectl delete -n "$CS_NAMESPACE" cluster "$CL_NAME"

0 commit comments

Comments
 (0)