【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. 脚本执行结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1164920.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

项目做多了才明白:时间同步真的不能凑合

做项目久了才发现:时间同步这件事,真不能靠“凑合” 刚做系统集成那几年,说实话,时间同步我也没太当回事。 服务器装好系统,顺手指个公网 NTP,能对上就算完事。后来项目越做越多,才慢慢意识到&a…

L3牌照下发,固态电池上车!2026中国汽车“奇点”时刻:是终点,更是新起点。

2026年可能真是个分水岭。不是小打小闹的改款,是游戏规则真要变了。两个硬核技术,就要推门进来。一个是L3的牌照,要发下来了。另一个是固态电池,要装上车了。这两件事单独看,都是大事。凑到同一年,那就是一…

我国团队攻克 SGLT-2 抑制剂合成痛点,降糖药生产更高效 | 乐研试剂

糖尿病作为影响全球数亿人的慢性代谢疾病,其治疗药物的研发始终是医药领域的焦点。其中,SGLT-2 抑制剂(如恩格列净、达格列净、卡格列净)凭借 “抑制肾脏葡萄糖重吸收” 的独特机制,成为非胰岛素依赖型降糖药的核心品类…

破局“不可成药”:戊二酰亚胺化学重塑CRBN靶向降解新突破 | 乐研试剂

一场靶向降解的化学革命正在发生 在肿瘤、自身免疫病、神经退行性疾病等领域,高达80%的疾病相关蛋白因缺乏典型活性口袋,长期被视为“不可成药”靶点。而靶向蛋白质降解技术的崛起,正以前所未有的方式打破这一僵局。其中,以Cereb…

从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…

GitHub 上 10 个令人惊艳的 Agent 开发平台

01 AutoGPTAutoGPT 是 AI Agent 领域的鼻祖级项目,现在已经 18 万的 Star 了。与聊天机器人不一样,AutoGPT 能够自主地将一个大目标拆解为子任务,并利用互联网搜索、本地文件等操作来一步步实现目标。AutoGPT 具备强大的工具调用和环境交互能…

华邦4Gbit高性能SPI NAND闪存:W25N04KVZEIR

品牌:华邦(winbond)型号:W25N04KVZEIR容量:4Gbit产品类型:NAND FLASH接口类型: 标准SPI接口,支持经典的 SPI 模式(0和3)以及性能更强的 Dual SPI 和 Quad SPI…

华邦2Gb SLC NAND闪存,工业级首选:W25N02KVZEIR

品牌:华邦(winbond)型号:W25N02KVZEIR容量:2Gb产品类型:NAND FLASH接口类型:高速SPI接口,支持标准、双线和四线模式。时钟频率最高可达20MHz,在四线模式下,数…

飞书多维表格真的很强!

说到飞书多维表格,突然发现好多公司在用它,像影视飓风、元气森林等,他们把业务运营看板、经销商管理系统搭载了多维表格上,我发现完全取代了传统BI的功能。 最近有个朋友用飞书表格搭建了大型商场订单追踪系统,他还用…

我常用的一个爬虫利器,自动采集视频数据

上周用到一个专门用来采集Youtube等视频网站数据的爬虫工具yt-dlp,是Github上比较火的开源应用,可以采集少量视频内容,但它是在有限的IP资源上运行的单点脚本,所以一旦规模化就很容易遇到HTTP 429 (Too Many Requests) 错误。 如果…

告别“白菜价”?2026车市大洗牌:L3落地、国补退坡,这“三类车”将成赢家!

车友们总会问,车价还会不会更低?但最近,我觉着风向有点变了。你发现没,网上那些“白菜价”甩卖的消息,好像少了。不是车卖不动,是玩法要换了。到2026年,有两大变数会彻底搅动局面。第一个是L3自…

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

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

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

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

选择电子签章前,必须关心的6件事

“我用你这个电子签章盖的文件,是否安全?是否合法?能不能省事省钱?万一打官司能否说得清、赢得了?”这是所有想用电子签章的人在咨询电子签章产品时询问得最多的问题,但是具体怎么咨询,怎么提问…

国产替代 Snyk/Black Duck(黑鸭)的国内代码安全工具实测与选型清单

摘要:长期以来,Snyk和Black Duck(黑鸭)在软件成分分析领域占据着全球市场的主导地位。然而,随着国内企业对数据安全合规、本土化服务以及成本效益的日益重视,寻求功能对等、体验更优的“平替”方案已成为大…

【多模态Grounding】精准识别+定位 营业厅人员行为分析

背景 利用qwen-vl加提示词功能,精准识别营业厅工作人员行为,准确区分顾客与工作人员,并且能够识别工作人员行为、精准定位工作人员,帮助实现相关工作场所的监控管理。 如果只用qwen-vl而不进行提示词工程、流程筛分等工作的话&a…

Java企业级AI开发:资源池化管理破解模型对接与高并发困局

在Java企业级AI应用开发中,资源池化管理破解模型对接与高并发难题在Java企业级AI应用开发领域,模型对接与高并发场景处理始终是横亘在开发者面前的两座大山。从多模型生态的兼容适配,到业务峰值期的系统稳定性保障,传统开发模式往…

如何用光耦来设计可靠的串口电平转换隔离电路

首先来看一下光耦器件的作用,它是最常用来作为电路隔离设计的,可以通过光耦器件将信号从一个电路回路里传递到另外一个电路回路,两个电路回路之间完全绝缘,且绝缘耐压支持几百V到上千V,这个特点非常适合用于解决电路上…

硬件加密狗复制之通信协议

硬件加密狗通信协议硬件加密狗(Dongle)是一种物理安全设备,用于软件授权和版权保护。其通信协议通常基于USB或串行接口,涉及身份验证、数据加密和指令交互。以下是常见协议类型的深度分析。通信协议类型Greer82加密狗复制破解USB …

C++跨平台开发挑战的技术文章

C跨平台开发的核心挑战硬件架构差异导致的内存对齐、字节序问题 不同操作系统API和系统调用的兼容性处理 编译器对C标准支持程度不一致跨平台构建系统的选择www.szyswkj.cnCMake作为主流构建工具的配置策略 处理不同平台的依赖库管理 自动化编译链的搭建技巧图形与UI开发的解决…