#!/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(如果存在)"