当前文档有中文版本:点击这里切换到中文

Resources

Get resource requests and limits for all pods in namespace

If you need to get all the resource requests and limits of cluster, just use kubectl get pods -A ...

CPU Requests

kubectl get pods -n ${namespace} -o=jsonpath='{.items[*].spec.containers[*].resources.requests.cpu}' | \
tr -s '[:space:]' '\n' | \
awk 'BEGIN{sum=0}{
if(tolower($1) ~ /mi?/)
sum += gensub(/[^0-9.]/, "", "g", $1)/1000;
else
sum += $1
}
END{print sum " CPU Cores"}'

CPU Limits

kubectl get pods -n ${namespace} -o=jsonpath='{.items[*].spec.containers[*].resources.limits.cpu}' | \
tr -s '[:space:]' '\n' | \
awk 'BEGIN{sum=0}{
if(tolower($1) ~ /mi?/)
sum += gensub(/[^0-9.]/, "", "g", $1)/1000;
else
sum += $1
}
END{print sum " CPU Cores"}'

Mem Requests (Units: Gi)

kubectl get pods -n ${namespace} -o=jsonpath='{.items[*].spec.containers[*].resources.requests.memory}' | \
tr -s '[:space:]' '\n' | \
awk 'BEGIN{sum=0}{
if(tolower($1) ~ /ki?/)
sum += gensub(/[^0-9.]/, "", "g", $1)/1048576;
else if(tolower($1) ~ /mi?/)
sum += gensub(/[^0-9.]/, "", "g", $1)/1024;
else if(tolower($1) ~ /gi?/)
sum += gensub(/[^0-9.]/, "", "g", $1);
else if(tolower($1) ~ /ti?/)
sum += gensub(/[^0-9.]/, "", "g", $1)*1024;
else
sum += $1
}
END{print sum " GiB"}'

Mem Limits (Units: Gi)

kubectl get pods -n ${namespace} -o=jsonpath='{.items[*].spec.containers[*].resources.limits.memory}' | \
tr -s '[:space:]' '\n' | \
awk 'BEGIN{sum=0}{
if(tolower($1) ~ /ki?/)
sum += gensub(/[^0-9.]/, "", "g", $1)/1048576;
else if(tolower($1) ~ /mi?/)
sum += gensub(/[^0-9.]/, "", "g", $1)/1024;
else if(tolower($1) ~ /gi?/)
sum += gensub(/[^0-9.]/, "", "g", $1);
else if(tolower($1) ~ /ti?/)
sum += gensub(/[^0-9.]/, "", "g", $1)*1024;
else
sum += $1
}
END{print sum " GiB"}'

Get the resources for each namespace

#!/bin/bash
set -e
namespaces=($(kubectl get ns --no-headers | awk '{print $1}'))
for namespace in "${namespaces[@]}"; do
request_cpu=$(
kubectl get pods -n ${namespace} -o=jsonpath='{.items[*].spec.containers[*].resources.requests.cpu}' | \
tr -s '[:space:]' '\n' | \
awk 'BEGIN{sum=0}{
if(tolower($1) ~ /mi?/)
sum += gensub(/[^0-9.]/, "", "g", $1)/1000;
else
sum += $1
}
END{print sum " CPU Cores"}'
)
request_memory=$(
kubectl get pods -n ${namespace} -o=jsonpath='{.items[*].spec.containers[*].resources.requests.memory}' | \
tr -s '[:space:]' '\n' | \
awk 'BEGIN{sum=0}{
if(tolower($1) ~ /ki?/)
sum += gensub(/[^0-9.]/, "", "g", $1)/1048576;
else if(tolower($1) ~ /mi?/)
sum += gensub(/[^0-9.]/, "", "g", $1)/1024;
else if(tolower($1) ~ /gi?/)
sum += gensub(/[^0-9.]/, "", "g", $1);
else if(tolower($1) ~ /ti?/)
sum += gensub(/[^0-9.]/, "", "g", $1)*1024;
else
sum += $1
}
END{print sum " GiB"}'
)
limit_cpu=$(
kubectl get pods -n ${namespace} -o=jsonpath='{.items[*].spec.containers[*].resources.limits.cpu}' | \
tr -s '[:space:]' '\n' | \
awk 'BEGIN{sum=0}{
if(tolower($1) ~ /mi?/)
sum += gensub(/[^0-9.]/, "", "g", $1)/1000;
else
sum += $1
}
END{print sum " CPU Cores"}'
)
limit_memory=$(
kubectl get pods -n ${namespace} -o=jsonpath='{.items[*].spec.containers[*].resources.limits.memory}' | \
tr -s '[:space:]' '\n' | \
awk 'BEGIN{sum=0}{
if(tolower($1) ~ /ki?/)
sum += gensub(/[^0-9.]/, "", "g", $1)/1048576;
else if(tolower($1) ~ /mi?/)
sum += gensub(/[^0-9.]/, "", "g", $1)/1024;
else if(tolower($1) ~ /gi?/)
sum += gensub(/[^0-9.]/, "", "g", $1);
else if(tolower($1) ~ /ti?/)
sum += gensub(/[^0-9.]/, "", "g", $1)*1024;
else
sum += $1
}
END{print sum " GiB"}'
)
echo "${namespace}"
echo "request cpu:${request_cpu} request mem:${request_memory}"
echo "limit cpu:${limit_cpu} limit mem:${limit_memory}"
echo "------------------------------------------"
done

Storage

Get the total request size for all PVCs

kubectl get pvc --no-headers -A | awk '
{
size = $5
unit = substr(size, length(size))
value = substr(size, 1, length(size) - 1)

if (unit == "Ki") value /= 1024 * 1024
else if (unit == "Mi") value /= 1024
else if (unit == "Gi") value = value
else if (unit == "Ti") value *= 1024
else if (unit == "Pi") value *= 1024 * 1024
else if (unit == "Ei") value *= 1024 * 1024 * 1024

total += value
}
END {print "Total PVC Size (Gi):", total}'

Get the total request size for all PVCs in namespace

kubectl get pvc --no-headers -n ${namespace} | awk '
{
size = $4
unit = substr(size, length(size))
value = substr(size, 1, length(size) - 1)

# convert to Gi
if (unit == "Ki") value /= 1024 * 1024
else if (unit == "Mi") value /= 1024
else if (unit == "Gi") value = value
else if (unit == "Ti") value *= 1024
else if (unit == "Pi") value *= 1024 * 1024
else if (unit == "Ei") value *= 1024 * 1024 * 1024

total += value
}
END {print "Total PVC Size (Gi):", total}'

Container Images

List all container images used by PODs in namespace

kubectl get pods -n ${namespace} -o jsonpath='{range .items[*]}{"\n"}{.metadata.name}{":\t"}{range .spec.containers[*]}{.image}{", "}{end}{end}' | sort