我有一个在同一 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
正常工作,您需要正确设置和配置 metrics-server。 (较旧的集群使用heapster)
谢谢 Rico,答案很好,但只是作为补充:
您可以指定资源配额,然后按指定查看此处。 除此之外,还有 Prometheus 等外部监控工具。此外,还有一个 Resource Explorer 可以:
显示 StackDriver 的历史统计资源使用情况。
https://github.com/kubernetes/kubernetes/issues/55046
列出集群中 Pod 的资源 QoS 分配。灵感来自:
该案例仍在 GitHub 上开放,但似乎最终应该会有一些更改,因为其中一位贡献者表示计划删除
kubectl top
并使用一些本机解决方案,因此我建议遵循此线程。
编写一个shell脚本来获取集群中的所有命名空间。遍历每个命名空间。运行 kubectl top pod。 将命名空间中所有 pod 的 cpu 和内存相加。
这是获取给定命名空间的总 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