【问题标题】:Kubernetes top vs Linux topKubernetes 顶级与 Linux 顶级
【发布时间】:2026-01-06 22:25:02
【问题描述】:

Kubernetes top (kubectl top) 命令显示的内存使用情况与在 pod 内运行的 Linux top 命令不同。

我创建了 k8s 部署,其中 YAML 包含这些内存限制:

resources:
  limits:
    cpu: "1"
    memory: 2500Mi
  requests:
    cpu: 200m
    memory: 2Gi

以下命令的输出如下所示:

bash4.4$ kubectl top pod PODNAME 

NAME                     CPU(cores)   MEMORY(bytes)   
openam-d975d46ff-rnp6h   2m           1205Mi

运行 linux top 命令:

Kubectl exec -it PODNAME top 

Mem: 12507456K used, 4377612K free, 157524K shrd, 
187812K buff, 3487744K cached

注意“free -g”也显示使用了 11Gb。

问题是这与“kubectl top”相矛盾,后者显示仅使用了 1205 mb。

【问题讨论】:

标签: kubernetes google-cloud-platform


【解决方案1】:

命令 kubectl top 显示给定 pod 的指标。该信息基于来自cAdvisor 的报告,该报告收集了真实的 Pod 资源使用情况。

如果你在 Pod 中运行top,它就像你在宿主系统上运行它一样,因为 Pod 使用宿主系统的内核。 Unix top 使用proc 虚拟文件系统并读取/proc/meminfofile 以获取有关当前内存状态的实际信息。 pod 内的容器与主机系统部分共享/proc,包括有关内存的路径和 CPU 信息。

您可以在以下文档中找到更多信息:kubectl-top-pod man pageMemory inside Linux containers

【讨论】: