diff --git a/k8s/scripts/cleanup-bad-pods.sh b/k8s/scripts/cleanup-bad-pods.sh new file mode 100644 index 0000000..098dd9d --- /dev/null +++ b/k8s/scripts/cleanup-bad-pods.sh @@ -0,0 +1,49 @@ +#!/usr/bin/env bash + +# 一键清理集群中常见异常状态的 Pod +# 会删除以下 STATUS 的 Pod: +# - Evicted +# - Error +# - ImagePullBackOff +# - ContainerStatusUnknown + +set -euo pipefail + +STATUSES=("Evicted" "Error" "ImagePullBackOff" "ContainerStatusUnknown") + +echo "======================================" +echo "Kubernetes 异常 Pod 清理脚本" +echo "======================================" +echo + +for status in "${STATUSES[@]}"; do + # 过滤出该状态的 Pod(NAMESPACE NAME READY STATUS ...) + MAPFILE -t pods < <(kubectl get pods -A 2>/dev/null | awk -v s="$status" '$4==s {print $1" "$2}') + + if [[ ${#pods[@]} -eq 0 ]]; then + echo "[${status}] 无需清理" + continue + fi + + echo "[${status}] 发现 ${#pods[@]} 个 Pod:" + for line in "${pods[@]}"; do + echo " $line" + done + + for line in "${pods[@]}"; do + ns=$(awk '{print $1}' <<<"$line") + name=$(awk '{print $2}' <<<"$line") + if [[ -z "$ns" || -z "$name" ]]; then + continue + fi + echo "删除 $ns/$name ..." + kubectl delete pod -n "$ns" "$name" --grace-period=0 --force || true + done + + echo +done + +echo "======================================" +echo "清理完成" +echo "======================================" +echo "提示:Deployment/StatefulSet/DaemonSet 会自动重建对应 Pod(如果存在)"