寻求K8s集群运行Pod资源请求与限制的自动化汇总方案
K8s集群Pod资源请求/限制汇总方案
一、使用kubectl命令生成资源报告
1. 查看所有运行Pod的资源明细
直接输出所有命名空间下运行Pod的CPU、内存请求与限制,适合快速排查:
kubectl get pods --all-namespaces -o custom-columns="NAMESPACE:.metadata.namespace,POD_NAME:.metadata.name,CPU_REQUEST:.spec.containers[*].resources.requests.cpu,CPU_LIMIT:.spec.containers[*].resources.limits.cpu,MEM_REQUEST:.spec.containers[*].resources.requests.memory,MEM_LIMIT:.spec.containers[*].resources.limits.memory"
如果只想看特定命名空间,去掉--all-namespaces,加上-n <命名空间名>即可。
2. 按命名空间汇总总资源
用jq对Pod资源做聚合,生成每个命名空间的总CPU、内存请求/限制统计,适合交付时的汇总报告:
kubectl get pods --all-namespaces -o json | jq ' [.items[] | { ns: .metadata.namespace, cpu_req: .spec.containers[].resources.requests.cpu // "0", cpu_lim: .spec.containers[].resources.limits.cpu // "0", mem_req: .spec.containers[].resources.requests.memory // "0", mem_lim: .spec.containers[].resources.limits.memory // "0" }] | group_by(.ns) | map({ namespace: .[0].ns, total_cpu_request: (map(.cpu_req | tonumber) | add), total_cpu_limit: (map(.cpu_lim | tonumber) | add), total_mem_request: (map(.mem_req | gsub("[^0-9.]"; "") | tonumber) | add), total_mem_limit: (map(.mem_lim | gsub("[^0-9.]"; "") | tonumber) | add) })'
注:如果资源单位包含Mi/Gi等,可自行调整jq逻辑统一单位(比如将Mi转换为Gi),保证统计准确性。
3. 导出到CSV文件
直接将明细导出为CSV,方便后续在Excel中整理:
kubectl get pods --all-namespaces -o custom-columns="NAMESPACE:.metadata.namespace,POD_NAME:.metadata.name,CPU_REQUEST:.spec.containers[*].resources.requests.cpu,CPU_LIMIT:.spec.containers[*].resources.limits.cpu,MEM_REQUEST:.spec.containers[*].resources.requests.memory,MEM_LIMIT:.spec.containers[*].resources.limits.memory" --no-headers > pod_resources.csv
二、Grafana预制仪表盘实现可视化全景
Grafana有成熟的预制仪表盘可以直接使用:
- 导入ID为
3119的**Kubernetes Cluster Monitoring (via Prometheus)**仪表盘,该仪表盘包含Pod级、命名空间级的资源请求/限制统计面板,能直观展示集群资源分配全景。 - 前提是集群已部署Prometheus并配置
kube-state-metrics采集K8s资源元数据,将Grafana与Prometheus数据源关联后,导入仪表盘即可直接查看可视化数据,适合向客户展示集群资源状况。
内容的提问来源于stack exchange,提问作者skolko
相关产品推荐
相关产品推荐

