Kubernetes top与Linux top的区别

8

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”相矛盾,后者只显示已使用1205MB。


1
这个问题似乎属于 https://serverfault.com/。 - Acapulco
1个回答

14

kubectl top 命令显示指定 pod 的度量信息。这些信息基于来自 cAdvisor 的报告,该工具收集真实 pod 的资源使用情况。

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

更多信息请参阅以下文档:kubectl-top-pod 手册页Linux 容器中的内存


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接