现在在某一环境中要新增一些服务,如何计算k8s集群节点资源是否充足呢?
通过--show-labels
先筛选出想要的查看的节点
通过describe node,查看allocatable总可用资源
查看Allocated resources字段中request部分 ,这一部分是qos设定的 即k8s调度器的视角,只要request没超过总可用资源 ,那么就可以源源不断的调度
查看Allocated resources字段中limits部分, 这一部分是qos设定的 节点上所有服务的limits不应超过总可用资源 ,不然就会存在OOM的风险
limits一般设定为request的1.5倍,也可以相同
CPU资源不太严格,毕竟CPU可以分片,但内存资源最好严格执行
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 #!/bin/bash config=~/.kube/config NODES=$(kubectl --kubeconfig $config get nodes -o name | cut -d'/' -f2) memory_to_gib () { local value=$1 if [[ $value == *Ki ]]; then echo "scale=2; ${value%Ki} /1024/1024" | bc elif [[ $value == *Mi ]]; then echo "scale=2; ${value%Mi} /1024" | bc elif [[ $value == *Gi ]]; then echo "${value%Gi} " else echo "0" fi } printf "%-30s | %-10s | %-10s | %-15s | %-15s | %s\n" \ "Node" "Req CPU(m)" "Avail CPU(m)" "Req Mem(GiB)" "Avail Mem(GiB)" "Warnings" printf "%-30s-+-%-10s-+-%-10s-+-%-15s-+-%-15s-+-%s\n" \ "------------------------------" "----------" "----------" "---------------" "---------------" "--------" for node in $NODES ; do node_json=$(kubectl --kubeconfig $config get node $node -o json) allocatable_cpu=$(echo "$node_json " | jq -r '.status.allocatable.cpu' ) allocatable_mem=$(echo "$node_json " | jq -r '.status.allocatable.memory' ) requested_cpu=$(kubectl --kubeconfig $config describe node $node | \ grep "Allocated resources" -A 9 | grep cpu | awk '{print $2}' ) requested_mem=$(kubectl --kubeconfig $config describe node $node | \ grep "Allocated resources" -A 9 | grep mem | awk '{print $2}' ) if [[ "$allocatable_cpu " == *m ]]; then alloc_millicores=${allocatable_cpu%m} else alloc_millicores=$((allocatable_cpu * 1000 )) fi req_millicores=${requested_cpu%m} available_cpu=$((alloc_millicores - req_millicores)) alloc_mem_gib=$(memory_to_gib "$allocatable_mem " ) req_mem_gib=$(memory_to_gib "$requested_mem " ) available_mem_gib=$(echo "scale=2; $alloc_mem_gib - $req_mem_gib " | bc) warnings="" [ $available_cpu -lt 500 ] && warnings+="Low CPU " (( $(echo "$available_mem_gib < 2 " | bc -l) )) && warnings+="Low Mem" printf "%-30s | %10s | %10s | %15s | %15s | %s\n" \ "$node " \ "${requested_cpu} " \ "${available_cpu} m" \ "$req_mem_gib " \ "$available_mem_gib " \ "$warnings " done
Node | Req CPU(m) | Avail CPU(m) | Req Mem(GiB) | Avail Mem(GiB) | Warnings ——————————-+————+————+—————–+—————–+——— cn-hangzhou.172.28.4.6 | 4955m | 2845m | 7.25 | 20.07 | cn-hangzhou.172.28.7.246 | 3655m | 4145m | 5.29 | 7.25 | cn-hangzhou.172.28.7.249 | 5455m | 2345m | 13.86 | 13.46 |
可见我的这三个节点还有8C40G可用,够够的了