Kubernetes Pod状态监控与自动重启
监控Kubernetes集群中Pod的运行状态,自动重启异常Pod,输出集群健康报告
详细内容
#!/bin/bash
# ==========================================
# Kubernetes Pod状态监控与自动重启
# 用途:监控K8s集群Pod状态,自动重启异常Pod
# 使用方法:bash k8s_pod_monitor.sh
# ==========================================
NAMESPACE="${1:-all}"
MAX_RESTARTS=5
AUTO_RESTART=true
echo "========== Kubernetes Pod监控报告 =========="
echo "监控时间: $(date '+%Y-%m-%d %H:%M:%S')"
echo "命名空间: $NAMESPACE"
echo ""
# 检查kubectl是否可用
if ! command -v kubectl &> /dev/null; then
echo "❌ 错误: kubectl未安装或不在PATH中"
exit 1
fi
# 获取Pod列表
if [ "$NAMESPACE" = "all" ]; then
PODS=$(kubectl get pods --all-namespaces --no-headers 2>/dev/null)
else
PODS=$(kubectl get pods -n $NAMESPACE --no-headers 2>/dev/null)
fi
if [ -z "$PODS" ]; then
echo "⚠️ 未找到任何Pod"
exit 0
fi
# 统计Pod状态
TOTAL=$(echo "$PODS" | wc -l)
RUNNING=$(echo "$PODS" | awk '{if($0 ~ /Running/) count++} END{print count+0}')
NOT_RUNNING=$(echo "$PODS" | awk '{if($0 !~ /Running/ && $0 !~ /Completed/) count++} END{print count+0}')
echo "【1. Pod状态统计】"
echo " 总Pod数: $TOTAL"
echo " Running: $RUNNING"
echo " 异常状态: $NOT_RUNNING"
echo ""
# 检查异常Pod
echo "【2. 异常Pod列表】"
ABNORMAL_PODS=$(echo "$PODS" | awk '{if($0 !~ /Running/ && $0 !~ /Completed/) print}')
if [ -z "$ABNORMAL_PODS" ]; then
echo " ✅ 所有Pod运行正常"
else
echo "$ABNORMAL_PODS" | while read line; do
ns=$(echo "$line" | awk '{print $1}')
pod=$(echo "$line" | awk '{print $2}')
status=$(echo "$line" | awk '{print $4}')
restarts=$(echo "$line" | awk '{print $5}')
echo " ⚠️ $ns/$pod - 状态: $status, 重启次数: $restarts"
done
fi
echo ""
# 检查重启次数过多的Pod
echo "【3. 高重启次数Pod】"
HIGH_RESTART=$(echo "$PODS" | awk -v max="$MAX_RESTARTS" '{if($5+0 > max) print}')
if [ -z "$HIGH_RESTART" ]; then
echo " ✅ 无高重启次数Pod(阈值: $MAX_RESTARTS)"
else
echo "$HIGH_RESTART" | while read line; do
ns=$(echo "$line" | awk '{print $1}')
pod=$(echo "$line" | awk '{print $2}')
restarts=$(echo "$line" | awk '{print $5}')
echo " 🔴 $ns/$pod - 重启次数: $restarts"
if [ "$AUTO_RESTART" = true ]; then
echo " → 自动删除Pod触发重建..."
kubectl delete pod $pod -n $ns --grace-period=30 2>/dev/null && echo " ✅ 已删除Pod,等待重建"
fi
done
fi
echo ""
# 节点状态
echo "【4. 节点状态】"
kubectl get nodes --no-headers 2>/dev/null | while read line; do
node=$(echo "$line" | awk '{print $1}')
status=$(echo "$line" | awk '{print $2}')
if [ "$status" = "Ready" ]; then
echo " ✅ $node - Ready"
else
echo " 🔴 $node - $status"
fi
done
echo ""
echo "========== 监控完成 =========="
适配环境
适配系统:CentOS 7+,Ubuntu 18.04+,Debian 10+
依赖环境:bash 4.0+
参数说明
[{"name": "NAMESPACE", "label": "\u547d\u540d\u7a7a\u95f4(all=\u5168\u90e8)", "default": "all"}, {"name": "MAX_RESTARTS", "label": "\u91cd\u542f\u6b21\u6570\u9608\u503c", "default": "5"}, {"name": "AUTO_RESTART", "label": "\u662f\u5426\u81ea\u52a8\u91cd\u542f(true/false)", "default": "true"}]