#!/bin/bash # 获取 k8s 集群中所有节点的资源使用情况 # 使用方法:./k8s-resource-usage.sh # 还可以使用 kubectl top node 命令获取资源使用情况 function kusage() { local node_count=0 local total_percent_cpu=0 local total_percent_mem=0 if ! command -v kubectl &> /dev/null; then echo "kubectl could not be found" exit 1 fi # 表头 printf "%-20s %-18s %-22s %-15s %-18s %-15s %-15s\n" \ "NODE" "CPU_allocatable" "Memory_allocatable" "CPU_requests" "Memory_requests" "CPU_limits" "Memory_limits" for n in $(kubectl get nodes --no-headers -o custom-columns=NAME:.metadata.name); do local requests abs_cpu percent_cpu node_cpu allocatable_cpu percent_cpu_lim local abs_mem percent_mem node_mem allocatable_mem allocatable_mem_mib percent_mem_lim requests=$(kubectl describe node "$n" | grep -A2 -E "Resource" | tail -n1 | tr -d '(%)') abs_cpu=$(echo "$requests" | awk '{print $2}') percent_cpu=$(echo "$requests" | awk '{print $3}') node_cpu=$(echo "$abs_cpu $percent_cpu" | tr -d 'mKi' | awk '{print int($1/$2*100)}') allocatable_cpu=$(echo "$node_cpu $abs_cpu" | tr -d 'mKi' | awk '{print int($1 - $2)}') percent_cpu_lim=$(echo "$requests" | awk '{print $5}') requests=$(kubectl describe node "$n" | grep -A3 -E "Resource" | tail -n1 | tr -d '(%)') abs_mem=$(echo "$requests" | awk '{print $2}') percent_mem=$(echo "$requests" | awk '{print $3}') node_mem=$(echo "$abs_mem $percent_mem" | tr -d 'mKi' | awk '{print int($1/$2*100)}') allocatable_mem=$(echo "$node_mem $abs_mem" | tr -d 'mKi' | awk '{print int($1 - $2)}') allocatable_mem_mib=$((allocatable_mem / 1024 / 1024)) percent_mem_lim=$(echo "$requests" | awk '{print $5}') printf "%-20s %-18s %-22s %-15s %-18s %-15s %-15s\n" \ "$n" "${allocatable_cpu}m" "${allocatable_mem_mib}MiB" "${percent_cpu}%" "${percent_mem}%" "${percent_cpu_lim}%" "${percent_mem_lim}%" node_count=$((node_count + 1)) total_percent_cpu=$((total_percent_cpu + percent_cpu)) total_percent_mem=$((total_percent_mem + percent_mem)) done avg_percent_cpu=$((total_percent_cpu / node_count)) avg_percent_mem=$((total_percent_mem / node_count)) echo "" echo "Average usage (requests) : ${avg_percent_cpu}% CPU, ${avg_percent_mem}% memory." } kusage "$@"