news 2026/4/15 21:58:50

【K8S分配率】Shell脚本计算Kubernetes集群CPU和内存总分配率

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【K8S分配率】Shell脚本计算Kubernetes集群CPU和内存总分配率

目录

1. 分配率计算逻辑

2. 完整脚本

3. 脚本执行结果


1. 分配率计算逻辑

CPU分配率 = (所有Pod的CPU请求总和 / 节点CPU可分配总和) * 100%
内存分配率 = (所有Pod的内存请求总和 / 节点内存可分配总和) * 100%

2. 完整脚本

#!/bin/bash # 设置颜色输出 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color echo -e "${GREEN}=== K8s集群Pod资源分配率计算 ===${NC}\n" # 获取节点总资源 echo "计算节点总资源..." NODE_CPU_TOTAL=0 NODE_MEM_TOTAL=0 # 获取所有节点的可分配资源 NODES=$(kubectl get nodes -o jsonpath='{.items[*].metadata.name}') for node in $NODES; do echo "处理节点: $node" # 获取节点CPU(单位:核) node_cpu=$(kubectl describe node $node | grep -A 1 "Allocatable" | grep cpu | awk '{print $2}') if [[ "$node_cpu" == *"m" ]]; then node_cpu=$(echo $node_cpu | sed 's/m//') node_cpu=$(echo "scale=2; $node_cpu / 1000" | bc | xargs printf "%.2f\n") fi NODE_CPU_TOTAL=$(echo "$NODE_CPU_TOTAL + $node_cpu" | bc) # 获取节点内存(转换为MiB) node_mem=$(kubectl describe node $node | grep -A 6 "Allocatable" | grep memory | awk '{print $2}') # 转换不同单位的内存为KiB if [[ "$node_mem" == *"Ki" ]]; then node_mem=$(echo $node_mem | sed 's/Ki//') node_mem_mib=$(echo "scale=2; $node_mem / 1024" | bc) elif [[ "$node_mem" == *"Mi" ]]; then node_mem_mib=$(echo $node_mem | sed 's/Mi//') elif [[ "$node_mem" == *"Gi" ]]; then node_mem_mib=$(echo $node_mem | sed 's/Gi//') node_mem_mib=$(echo "$node_mem_mib * 1024" | bc) elif [[ -n "$node_mem" ]]; then node_mem_mib=$(echo "scale=2; $node_mem /1024/1024" | bc) else node_mem_mib=0 fi NODE_MEM_TOTAL=$(echo "$NODE_MEM_TOTAL + $node_mem_mib" | bc) done echo -e "节点CPU总量: ${NODE_CPU_TOTAL}核" echo -e "节点内存总量: ${NODE_MEM_TOTAL}MiB\n" # 获取所有Pod的请求资源总量 echo "计算Pod请求资源总量..." POD_CPU_REQUEST=0 POD_MEM_REQUEST=0 # 获取所有命名空间的Pod NAMESPACES=$(kubectl get namespaces -o jsonpath='{.items[*].metadata.name}') for ns in $NAMESPACES; do # 获取该命名空间下所有Pod的CPU请求 cpu_requests=$(kubectl get pods -n $ns -o jsonpath='{.items[*].spec.containers[*].resources.requests.cpu}') for cpu in $cpu_requests; do if [[ "$cpu" == *"m" ]]; then cpu_val=$(echo $cpu | sed 's/m//') cpu_val=$(echo "scale=2; $cpu_val / 1000" | bc | xargs printf "%.2f\n") elif [[ -n "$cpu" ]]; then cpu_val=$cpu else cpu_val=0 fi POD_CPU_REQUEST=$(echo "$POD_CPU_REQUEST + $cpu_val" | bc) done # 获取该命名空间下所有Pod的内存请求 mem_requests=$(kubectl get pods -n $ns -o jsonpath='{.items[*].spec.containers[*].resources.requests.memory}') for mem in $mem_requests; do if [[ "$mem" == *"Ki" ]]; then mem_val=$(echo $mem | sed 's/Ki//') mem_val_mib=$(echo "scale=2; $mem_val / 1024" | bc) elif [[ "$mem" == *"Mi" ]]; then mem_val_mib=$(echo $mem | sed 's/Mi//') elif [[ "$mem" == *"Gi" ]]; then mem_val_mib=$(echo $mem | sed 's/Gi//') mem_val_mib=$(echo "$mem_val_mib * 1024" | bc) elif [[ -n "$mem" ]]; then mem_val_mib=$mem else mem_val_mib=0 fi POD_MEM_REQUEST=$(echo "$POD_MEM_REQUEST + $mem_val_mib" | bc) done done echo -e "Pod CPU请求总量: ${POD_CPU_REQUEST}核" echo -e "Pod内存请求总量: ${POD_MEM_REQUEST}MiB\n" # 计算分配率 if [[ $(echo "$NODE_CPU_TOTAL > 0" | bc) -eq 1 ]]; then CPU_ALLOC_RATIO=$(echo "scale=2; $POD_CPU_REQUEST / $NODE_CPU_TOTAL * 100" | bc) else CPU_ALLOC_RATIO=0 fi if [[ $(echo "$NODE_MEM_TOTAL > 0" | bc) -eq 1 ]]; then MEM_ALLOC_RATIO=$(echo "scale=2; $POD_MEM_REQUEST / $NODE_MEM_TOTAL * 100" | bc) else MEM_ALLOC_RATIO=0 fi # 输出结果 echo -e "${GREEN}=== 资源分配率结果 ===${NC}" echo -e "CPU分配率: ${YELLOW}${CPU_ALLOC_RATIO}%${NC}" echo -e "内存分配率: ${YELLOW}${MEM_ALLOC_RATIO}%${NC}" # 颜色标记警告 # bc执行一个逻辑判断,而不是一个算术运算,用 1表示逻辑真(True),用 0表示逻辑假(False) if [[ $(echo "$CPU_ALLOC_RATIO >= 80" | bc) -eq 1 ]]; then echo -e "${RED}警告: CPU分配率较高,建议扩容节点或优化Pod资源请求${NC}" fi if [[ $(echo "$MEM_ALLOC_RATIO >= 80" | bc) -eq 1 ]]; then echo -e "${RED}警告: 内存分配率较高,建议扩容节点或优化Pod资源请求${NC}" fi

3. 脚本执行结果

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/13 15:35:40

从0开始玩raspberry pi PICO RP2040

一个8块多安装板子的python环境microPython https://www.raspberrypi.com/documentation/microcontrollers/micropython.html 选pico 2 .(pico 2 W应该是wifi版)第一次插入电脑的时候是bootloader mode,电脑上多出一个盘RPI-PR2, 把uf2文件拖进去,他会自动重启,算是安装好了mic…

作者头像 李华
网站建设 2026/4/1 17:36:44

深入解析TCP/IP协议栈:从原理到优化

TCP/IP协议栈深度解析技术文章大纲引言简述TCP/IP协议栈的历史背景和重要性概述TCP/IP协议栈在互联网通信中的核心作用说明本文的结构和主要内容TCP/IP协议栈的层次结构网络接口层定义和功能:负责物理介质上的数据传输常见协议:以太网、Wi-Fi、PPP等数据…

作者头像 李华
网站建设 2026/4/11 16:40:02

玩转Linux命令:创意组合大赛

Linux命令创意组合大赛技术文章大纲赛事背景与意义Linux命令行的灵活性与强大功能创意组合的价值:提高效率、解决复杂问题大赛目标:激发创新思维,分享实用技巧参赛作品要求必须基于常见Linux命令(如grep、awk、sed、find等&#x…

作者头像 李华
网站建设 2026/4/8 20:07:48

【开题答辩全过程】以 家政服务平台为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人,语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…

作者头像 李华
网站建设 2026/4/5 18:11:27

瑞芯微(EASY EAI)RV1126B 安全帽检测

1. 安全帽检测简介 安全帽佩戴检测是工地、生产安全、安防的重中之重,但人为主观检测的方式时效性差且不能全程监控。AI技术的日渐成熟催生了安全帽佩戴检测方案,成为了监督佩戴安全帽的利器。本安全帽检测算法是一种基于深度学习的对人进行检测定位的目…

作者头像 李华
网站建设 2026/4/11 21:09:33

吐血推荐10个AI论文写作软件,专科生毕业论文必备!

吐血推荐10个AI论文写作软件,专科生毕业论文必备! AI 工具如何改变论文写作的未来 对于专科生来说,毕业论文是人生中一个重要的里程碑,但同时也是充满挑战的一关。随着 AI 技术的飞速发展,越来越多的 AI 工具开始进入学…

作者头像 李华