为什么kubectl top命令查看节点内存使用超过100%?

问题现象

从界面上看节点内存使用率并不是很高,但使用kubelet top node查看节点内存使用率已超过100%。

NAME            CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%
192.168.0.243   79m          4%     2357Mi          109%
问题根因

出现该问题的原因是kubectl top node是调用kubelet的metrics API来获取数据的,因此看到的是节点上已使用的资源总和除以可分配的所有资源。

社区issue链接:kubectl shows node memory >100%? · Issue #86499 · kubernetes/kubernetes · GitHub

场景示例

例如,某节点的参数可通过kubectl describe node命令查询,示例如下:

...
Capacity:
  cpu:                2
  ephemeral-storage:  51286496Ki
  hugepages-1Gi:      0
  hugepages-2Mi:      0
  localssd:           0
  localvolume:        0
  memory:             3494556Ki
  pods:               40
Allocatable:
  cpu:                1960m
  ephemeral-storage:  47265634636
  hugepages-1Gi:      0
  hugepages-2Mi:      0
  localssd:           0
  localvolume:        0
  memory:             2213604Ki
  pods:               40
...
  • 节点内存总量:即Capacity.memory字段,为4030180Ki。
  • 节点可分配量:即Allocatable.memory字段,为2213604Ki
  • 节点已使用量:可通过以下命令获取,本示例中为2413824Ki。
    kubectl get --raw /apis/metrics.k8s.io/v1beta1/nodes/

    回显如下:

    {
    	"kind": "NodeMetricsList",
    	"apiVersion": "metrics.k8s.io/v1beta1",
    	"metadata": {},
    	"items": [
    		{
    			...
    			"timestamp": "2023-08-15T14:09:38Z",
    			"window": "1m0.177s",
    			"usage": {
    				"cpu": "78528126n",
    				"memory": "2413824Ki"
    			}
    		}
    	]
    }
  • 则使用kubelet top node查看节点内存使用率:

节点内存使用率 = 节点已使用量 / 节点可分配 = 2413824Ki / 2213604Ki = 109%

  • 实际节点内存使用率:

实际节点内存利用率 = 节点已使用量 / 节点内存总量 = 2413824Ki / 4030180Ki = 59.9%

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值