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

问题描述 投票:0回答:4

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

kubernetes kubectl
4个回答
15
投票

是的。你可以用

$ 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
正常工作,您需要正确设置和配置 metrics-server。 (较旧的集群使用heapster


0
投票

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

您可以指定资源配额,然后按指定查看此处。 除此之外,还有 Prometheus 等外部监控工具。此外,还有一个 Resource Explorer 可以:

显示 StackDriver 的历史统计资源使用情况。

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

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

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

该案例仍在 GitHub 上开放,但似乎最终应该会有一些更改,因为其中一位贡献者表示计划删除

kubectl top
并使用一些本机解决方案,因此我建议遵循此线程。


0
投票

编写一个shell脚本来获取集群中的所有命名空间。遍历每个命名空间。运行 kubectl top pod。 将命名空间中所有 pod 的 cpu 和内存相加。


0
投票

这是获取给定命名空间的总 CPU 和 RAM 使用情况的单行代码:

"kubectl top pods -n <namespace> | awk 'BEGIN {mem=0; cpu=0} {mem += int($3); cpu += int($2);} END {print ""Mem
ory: "" mem ""Mi"" ""\n"" ""Cpu: "" cpu ""m""}'"

输出示例:

Memory: 717Mi
Cpu: 257m
© www.soinside.com 2019 - 2024. All rights reserved.