如何在 k8s 中转储每个命名空间的资源(CPU、内存)使用情况



我有一个在同一个 k8s 集群下创建的命名空间列表,我想找出每个命名空间的资源(CPU、内存)使用情况。有什么命令可以使用吗?

是的。您可以使用

$ kubectl -n <nampespace> top pod

例如:

$ kubectl top pod -n kube-system
NAME                                                                 CPU(cores)   MEMORY(bytes)
calico-node-xxxxx                                                    17m          166Mi
coredns-xxxxxxxxxx-xxxxx                                             2m           11Mi
coredns-xxxxxxxxxx-xxxxx                                             3m           11Mi
etcd-ip-x-x-x-x.us-west-2.compute.internal                           19m          149Mi
kube-apiserver-ip-x-x-x-x.us-west-2.compute.internal                 39m          754Mi
kube-controller-manager-ip-x-x-x-x.us-west-2.compute.internal        20m          138Mi
kube-proxy-xxxxx                                                     5m           12Mi
kube-scheduler-ip-x-x-x-x.us-west-2.compute.internal                 6m           17Mi
metrics-server-xxxxxxxxxx-xxxxx                                      0m           15Mi

如果需要总数,则需要将 CPU 和 MEMORY 列上的所有条目相加。

请注意,要使kubectl top正常工作,您需要正确设置和配置指标服务器。(较旧的集群使用堆)

编写一个 shell 脚本来获取群集中的所有命名空间。循环访问每个命名空间。运行 kubectl top pod。将命名空间中所有 Pod 的 CPU 和内存相加。

谢谢 Rico,答案很好,但只是作为补充:

您可以指定资源配额,然后按此处指定的方式查看它们。除此之外,还有像普罗米修斯这样的外部监控工具。此外,还有一个资源浏览器,它可以:

显示堆栈驱动程序中的历史统计资源使用情况。

https://github.com/kubernetes/kubernetes/issues/55046

列出群集中 Pod 的资源 QoS 分配。灵感来自:

https://github.com/kubernetes/kubernetes/issues/1751

该案例在 GitHub 上仍然开放,但似乎最终应该有一些变化,因为其中一位贡献者表示计划删除kubectl top并使用一些本机解决方案,所以我建议遵循此线程。

最新更新