From b0a69478d81ca8b7b5f29809fcea5d3d5e29be00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Franti=C5=A1ek=20Dvo=C5=99=C3=A1k?= <valtri@civ.zcu.cz> Date: Fri, 21 Jun 2024 15:32:57 +0000 Subject: [PATCH] Script for cleaning kubernetes pods stuck in "Terminating" state --- .../files/usr/local/bin/k8s-pods-cleaner.sh | 26 +++++++++++++++++++ cesnet-central/playbooks/k8s.yaml | 5 ++++ 2 files changed, 31 insertions(+) create mode 100755 cesnet-central/playbooks/files/usr/local/bin/k8s-pods-cleaner.sh diff --git a/cesnet-central/playbooks/files/usr/local/bin/k8s-pods-cleaner.sh b/cesnet-central/playbooks/files/usr/local/bin/k8s-pods-cleaner.sh new file mode 100755 index 0000000..5a0e482 --- /dev/null +++ b/cesnet-central/playbooks/files/usr/local/bin/k8s-pods-cleaner.sh @@ -0,0 +1,26 @@ +#! /bin/sh + +# +# Clean kubernetes pods stuck in "Terminating" state +# +# Example: +# +# k8s-pods-cleaner.sh hub app=jupyterhub,component=singleuser-server --yes +# + +if [ -z "$1" ]; then + echo "Usage: $0 NAMESPACE [QUERY [--yes]]" + exit 0 +fi + +NS="$1" +QUERY="$2" +PERFORM="$3" +for pod in $(kubectl get pod -n "$NS" -l "$QUERY" --field-selector="status.phase==Failed" -ojsonpath='{.items[*].metadata.name}'); do + if [ -n "$PERFORM" ]; then + kubectl get pod -n "$NS" "$pod" -oyaml > "/tmp/$NS-$pod.yaml" + kubectl delete pod -n "$NS" "$pod" --force + else + kubectl get pod -n "$NS" "$pod" + fi +done diff --git a/cesnet-central/playbooks/k8s.yaml b/cesnet-central/playbooks/k8s.yaml index 26daba2..28d0277 100644 --- a/cesnet-central/playbooks/k8s.yaml +++ b/cesnet-central/playbooks/k8s.yaml @@ -167,6 +167,11 @@ dest: /etc/profile.d/k8s-cheats.sh src: files//etc/profile.d/k8s-cheats.sh mode: preserve + - name: K8s pods cleaner + copy: + dest: /usr/local/bin/k8s-pods-cleaner.sh + src: files/usr/local/bin/k8s-pods-cleaner.sh + mode: preserve - name: K8s network deployment hosts: master -- GitLab