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"}]
K8sKubernetes容器监控自动重启

更多容器