如何修改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
相关产品推荐
相关产品推荐

