新增 Kubernetes 异常 Pod 清理脚本,支持一键清理多种异常状态的 Pod
This commit is contained in:
49
k8s/scripts/cleanup-bad-pods.sh
Normal file
49
k8s/scripts/cleanup-bad-pods.sh
Normal file
@@ -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(如果存在)"
|
||||
Reference in New Issue
Block a user