为什么 kubelet top node 节点内存利用率可以超过 100%

链接地址:https://github.com/kubernetes/kubernetes/issues/86499

为什么 kubelet top node 节点内存利用率可以超过 100%(CPU 也会)?很简单,因为这里的利用率是分配给 pod 和系统守护进程的资源总和除以节点可分配资源

·

节点使用率计算(kubectl top node)

节点使用率 = 节点已使用 / 节点可分配

节点可分配资源

root@pan:~# kubectl describe node pan | grep -i -A 5 allocatable
Allocatable:
  cpu:                1600m
  ephemeral-storage:  19430032Ki
  hugepages-2Mi:      0
  memory:             7421429549
  pods:               110

·

节点已使用资源(分配给 pod 和系统守护进程的资源总和)

##### MEMORY 字段
root@pan:~# kubectl top node
NAME   CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%
pan    148m         9%     7272Mi          102%

或者

##### memory
root@pan:~# kubectl get --raw /apis/metrics.k8s.io/v1beta1/nodes/pan
{"kind":"NodeMetrics",......"usage":{"cpu":"149193895n","memory":"7446952Ki"}}

·

节点使用率

##### 节点已使用内存(Mi)
root@pan:~# echo "7446952/1024" | bc
7272

##### 节点可分配内存(Mi)
root@pan:~# echo "7421429549/1024/1024" | bc
7077

##### 节点使用率
root@pan:~# expr "scale=2;7272/7077"|bc
1.02

可以看到与 kubectl top node 输出的一致(102%),这种情况下节点并不存在内存压力,并且在 kubectl describe node 输出中也可以看出能过度使用的信息,所以也不会触发驱逐:

root@pan:~# kubectl describe nodes pan
......
Allocated resources:
  (Total limits may be over 100 percent, i.e., overcommitted.)   # 总限额可能超过100%
  Resource           Requests     Limits
  --------           --------     ------
  cpu                1200m (75%)  0 (0%)
  memory             410Mi (5%)   510Mi (7%)
  ephemeral-storage  0 (0%)       0 (0%)
  hugepages-2Mi      0 (0%)       0 (0%)
......

·

节点实际使用率

实际使用率 = 节点已使用 / 节点容量

节点容量

root@pan:~# kubectl describe node pan | grep -i -A 5 capacity
Capacity:
  cpu:                2
  ephemeral-storage:  19430032Ki
  hugepages-2Mi:      0
  memory:             8167884Ki
  pods:               110

·

实际使用率

##### 节点容量
root@pan:~# echo "8167884/1024" | bc
7976

##### 节点已使用
root@pan:~# echo "7446952/1024" | bc
7272

##### 实际使用率
root@pan:~# expr "scale=2;7272/7976"|bc
0.91

版权声明:本文为qq_43584691原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。