cat << 'EOF' > ~/check_k8s_resource_skew.sh
#!/usr/bin/env bash
# ==============================================================================
# 脚本名称: check_k8s_resource_skew.sh
# 脚本来源: https://ops123.top
# 功能描述: 自动比对 K8s 节点的真实物理 CPU 负载与账面 Requests 分配率 (纯只读)
# 依赖工具: kubectl, awk (需集群已安装 metrics-server)
# ==============================================================================

set -o pipefail

RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
BLUE='\033[0;34m'
PLAIN='\033[0m'

echo -e "${BLUE}================================================================================================${PLAIN}"
echo -e "${BLUE}                     K8S 节点资源账实背离度 (真实负载 vs 账面分配) 自动化巡检                    ${PLAIN}"
echo -e "${YELLOW}                                脚本来源: https://ops123.top                                    ${PLAIN}"
echo -e "${BLUE}================================================================================================${PLAIN}"

# 1. 检查指标采集基础组件
if ! kubectl top nodes &>/dev/null; then
    echo -e "${RED}[FATAL] 无法获取真实负载指标，请确认集群已安装并正常运行 metrics-server。${PLAIN}"
    exit 1
fi

printf "${YELLOW}%-25s | %-18s | %-26s | %s${PLAIN}\n" "节点名称 (Node)" "物理 CPU 实际使用" "账面 CPU 已分配 (Requests)" "调度健康度诊断"
echo -e "------------------------------------------------------------------------------------------------"

# 获取所有节点名称
NODES=$(kubectl get nodes -o jsonpath='{.items[*].metadata.name}')

for node in $NODES; do
    # 提取真实物理 CPU 使用率 (%)
    REAL_CPU_PCT=$(kubectl top node "$node" --no-headers 2>/dev/null | awk '{print $3}' | tr -d '%')
    
    # 提取账面 CPU Requests 申请率 (%)
    ALLOC_CPU_PCT=$(kubectl describe node "$node" 2>/dev/null | grep -A 5 "Allocated resources" | awk '$1 == "cpu" {print $3}' | tr -d '(%)')
    
    # 处理空白或非数字情况
    if [[ ! "$REAL_CPU_PCT" =~ ^[0-9]+$ ]]; then REAL_CPU_PCT=0; fi
    if [[ ! "$ALLOC_CPU_PCT" =~ ^[0-9]+$ ]]; then ALLOC_CPU_PCT=0; fi
    
    # 诊断逻辑判定
    if [ "$REAL_CPU_PCT" -gt 85 ] && [ "$ALLOC_CPU_PCT" -lt 40 ]; then
        DIAGNOSIS="${RED}[高危倾斜] 物理负载极高但账面空闲！未配 Requests 的业务易引发节点过载！${PLAIN}"
    elif [ "$REAL_CPU_PCT" -lt 20 ] && [ "$ALLOC_CPU_PCT" -gt 80 ]; then
        DIAGNOSIS="${YELLOW}[配额虚占] 物理负载极低但账面已满！高 requests 闲置业务阻断新 Pod 调度。${PLAIN}"
    else
        DIAGNOSIS="${GREEN}[正常] 账面分配与实际物理负载基本相符。${PLAIN}"
    fi
    
    printf "%-25s | %-18s | %-26s | %b\n" "$node" "${REAL_CPU_PCT}%" "${ALLOC_CPU_PCT}%" "$DIAGNOSIS"
done

echo -e "\n${BLUE}================================================================================================${PLAIN}"
echo -e "${BLUE}排障建议：针对标红的高危节点，请立刻排查并执行 cordon 隔离，强制业务 Pod 规范配置 requests 参数。${PLAIN}"
echo -e "${BLUE}架构演进：建议部署 Koordinator 或 Trimaran 等动态负载调度插件接管原生 kube-scheduler。${PLAIN}"
echo -e "${BLUE}================================================================================================${PLAIN}"
EOF
chmod +x ~/check_k8s_resource_skew.sh && ~/check_k8s_resource_skew.sh