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