监控节点cpu资源,过高时cordon节点
只对11个GPU节点进行监控
方法1,使用kubectl top node获取资源信息,然后定时写入文件1.txt
#!/bin/bash x=(gpu-node001 gpu-node002 gpu-node003 gpu-node004 gpu-node005 gpu-node006 gpu-node007 gpu-node008 gpu-node009 gpu-node010 gpu-node011) length=${#x[@]} echo $length for ((i=0;i<$length;i++)) do echo ${x[$i]} nodeName=${x[$i]} line=`grep $nodeName /root/hong/1.txt` cpu_used=`echo ${line} | awk -F " " '{print $3}'| sed 's/%//'` echo ${cpu_used} if [ ${cpu_used} -ge 90 ];then kubectl cordon $nodeName elif [ ${cpu_used} -lt 50 ];then kubectl uncordon $nodeName fi #echo ${line} done
方法2,使用resource-capacity命令获取节点资源,需要单独安装此插件
首先需要安装krew, 参考下面文档
https://krew.sigs.k8s.io/docs/user-guide/setup/install/
https://krew.sigs.k8s.io/docs/
然后使用命令kubectl krew install resource-capacity进行安装
创建schedule-node.sh脚本如下
#!/bin/bash kubectl resource-capacity --util -o json | jq '.nodes[] | select((.cpu.utilizationPercent | sub("%"; "") | tonumber) >= 90) | .name' | grep gpu | xargs kubectl cordon kubectl resource-capacity --util -o json | jq '.nodes[] | select((.cpu.utilizationPercent | sub("%"; "") | tonumber) <= 40) | .name' | grep gpu | xargs kubectl uncordon
每2分钟执行一次
crontab -e */2 * * * * bash schedule-node.sh
努力生活,融于自然