Kubernetes top vs Linux top

Phi*_*uez 5 google-cloud-platform kubernetes

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

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

resources:
  limits:
    cpu: "1"
    memory: 2500Mi
  requests:
    cpu: 200m
    memory: 2Gi
Run Code Online (Sandbox Code Playgroud)

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

bash4.4$ kubectl top pod PODNAME 

NAME                     CPU(cores)   MEMORY(bytes)   
openam-d975d46ff-rnp6h   2m           1205Mi
Run Code Online (Sandbox Code Playgroud)

运行 linux top 命令:

Kubectl exec -it PODNAME top 

Mem: 12507456K used, 4377612K free, 157524K shrd, 
187812K buff, 3487744K cached
Run Code Online (Sandbox Code Playgroud)

注意 'free -g' 还显示使用了 11Gb。

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

小智 7

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

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

您可以在这些文档中找到更多信息:kubectl-top-pod 手册页Linux 容器内的内存