更新时间:2023-10-27 GMT+08:00
为什么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链接:https://github.com/kubernetes/kubernetes/issues/86499。
场景示例
例如,某节点的参数可通过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%
父主题: 节点运行
节点运行 所有常见问题
- 集群可用,但节点状态为“不可用”?
- CCE集群中的节点无法远程登录,如何排查解决?
- 如何重置CCE集群中节点的密码?
- 如何收集CCE集群中节点的日志?
- 如何解决yum update升级操作系统导致的容器网络不可用问题?
- Node节点vdb盘受损,通过重置节点仍无法恢复节点?
- CCE集群节点中安装kubelet的端口主要有哪些?
- 如何配置Pod使用GPU节点的加速能力?
- 容器使用SCSI类型云硬盘偶现IO卡住
- docker审计日志量过大影响磁盘IO
- thinpool磁盘空间耗尽导致容器或节点异常时,如何解决?
- 节点上监听了哪些端口
- GPU节点使用nvidia驱动启动容器排查思路
- 节点NTP时间不同步
- Containerd节点业务容器标准输出日志写入过快导致节点数据盘使用率过高
- 为什么kubectl top命令查看节点内存使用超过100%?
more