|
1 | 1 | #!/bin/bash |
2 | 2 | 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 |
0 commit comments