네임스페이스마다 특정 이름(또는 접두사/패턴)을 가진 Pod들의 CPU 및 Memory Request 총합을 구하는 방법은 환경과 도구에 따라 크게 세 가지로 나뉩니다.
jq 활용 (가장 간단하고 범용적)kubectl로 전체 Pod 목록을 JSON으로 가져온 뒤, jq로 특정 이름 패턴을 필터링하여 네임스페이스별로 합산하는 방식입니다.
my-app 부분에 찾고자 하는 Pod 이름(정규식 패턴)을 넣고 터미널에서 실행하면 됩니다.
kubectl get pods -A -o json | jq -r '
def parse_cpu:
if . == null then 0
elif endswith("m") then (.[:-1] | tonumber)
elif endswith("n") then ((.[:-1] | tonumber) / 1000000)
else ((. | tonumber) * 1000) end;
def parse_mem:
if . == null then 0
elif endswith("Ki") then ((.[:-2] | tonumber) / 1024)
elif endswith("Mi") then (.[:-2] | tonumber)
elif endswith("Gi") then ((.[:-2] | tonumber) * 1024)
elif endswith("Ti") then ((.[:-2] | tonumber) * 1024 * 1024)
else ((. | tonumber) / (1024 * 1024)) end;
.items
| map(select(.metadata.name | test("my-app"))) # Pod 이름 필터링 (정규식 지원)
| group_by(.metadata.namespace)
| .[]
| {
namespace: .[0].metadata.namespace,
pod_count: length,
total_cpu_m: (map(.spec.containers[].resources.requests.cpu // "0" | parse_cpu) | add),
total_mem_Mi: (map(.spec.containers[].resources.requests.memory // "0" | parse_mem) | add)
}
| "\(.namespace)\tPods: \(.pod_count)\tCPU: \(.total_cpu_m)m\tMemory: \(.total_mem_Mi | round)Mi"
' -r | column -t -s $'\t'
클러스터에 Prometheus가 구성되어 있다면, PromQL을 이용해 네임스페이스별 합계를 즉시 계산할 수 있습니다.
sum(kube_pod_container_resource_requests{resource="cpu", pod=~"my-app.*"}) by (namespace)
sum(kube_pod_container_resource_requests{resource="memory", pod=~"my-app.*"}) by (namespace) / 1024 / 1024 / 1024
Pod 이름 대신 app=my-app과 같은 라벨을 사용 중이라면 kubectl-custom-columns나 kube-capacity 플러그인과 결합하여 더 직관적으로 조회할 수 있습니다.
# kubectl-view-allocations 또는 kube-capacity 플러그인 활용 시
kubectl get pods -A -l app=my-app -o custom-columns=\
NAMESPACE:.metadata.namespace,\
POD:.metadata.name,\
CPU_REQ:.spec.containers[*].resources.requests.cpu,\
MEM_REQ:.spec.containers[*].resources.requests.memory