You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Shell脚本实现K8s全Namespace Pod状态检测

检测K8s所有命名空间Pod健康状态的Shell脚本

原脚本仅能检测default命名空间的Pod状态,以下是修改后支持全集群所有命名空间的版本:

#!/bin/bash 

# 颜色定义
blanc="\033[1;37m"
gray="\033[0;37m"
magento="\033[0;35m"
red="\033[1;31m"
green="\033[1;32m"
amarillo="\033[1;33m"
azul="\033[1;34m"
rescolor="\e[0m"

# 获取所有命名空间的Pod,格式为"命名空间  Pod名"
listPods=$(kubectl get pods --all-namespaces | awk 'NR>1{print $1 " " $2}')
readarray -t arr <<< "$listPods"

ok=0
notok=0
echo -e "\n稍等片刻  \U1F602 :\n"

for pod_info in "${arr[@]}"
do 
    namespace=$(echo "$pod_info" | awk '{print $1}')
    pod_name=$(echo "$pod_info" | awk '{print $2}')
    echo -ne "[$namespace] $pod_name ... " 
    # 获取指定命名空间下Pod的状态
    status=$(kubectl get pod "$pod_name" -n "$namespace" | grep "$pod_name" | awk '{print $3}')
    if [[ ! $status =~ ^Running$|^Completed$  ]]  ; then
        echo -e "${red}异常!${rescolor}"
        notify-send "Pods健康告警" "[$namespace] $pod_name 状态异常" -t 10000 
        let notok=notok+1
    else
        echo -e "${green}正常!${rescolor}"
        let ok=ok+1
    fi
done

echo -e "\n统计结果:\n"
echo "+----------------+----------------+"
printf  "|${green}%-16s${rescolor}|${red}%-16s${rescolor}|\n" "健康Pod数量" "异常Pod数量"
echo "+----------------+----------------+"
printf  "|%-16s|%-16s|\n" "$ok" "$notok"
echo "+----------------+----------------+"
echo -e "\n"

关键修改说明

  • 替换Pod列表获取命令:使用kubectl get pods --all-namespaces获取全集群Pod,同时提取命名空间和Pod名两个字段
  • 循环处理时拆分命名空间与Pod名:每次循环从行中解析出命名空间,执行kubectl get pod时通过-n参数指定目标命名空间
  • 输出增强:在Pod名前添加命名空间标识[namespace],避免不同命名空间下同名Pod的混淆
  • 告警优化:通知消息中加入命名空间信息,便于快速定位问题Pod

内容的提问来源于stack exchange,提问作者Gowmi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 04:44:52