监控节点cpu资源,过高时cordon节点

发布时间 2023-11-22 15:04:18作者: 坚强的小蚂蚁

 

只对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