用途
整理 k8s 資源分佈情況,查看各個命名空間下分配的資源額度
#!/bin/bash
# 獲取所有命名空間的列表
namespaces=$(kubectl get namespaces -o jsonpath='{.items[*].metadata.name}')
# 遍歷每個命名空間
for namespace in $namespaces
do
echo "命名空間: $namespace"
# 獲取命名空間中的所有 Pod
pods=$(kubectl get pods --namespace=$namespace -o jsonpath='{.items[*].metadata.name}')
total_cpu_limit=0
total_memory_limit=0
# 遍歷每個 Pod,並累加其 CPU 和內存限制
for pod in $pods
do
cpu_limit=$(kubectl get pod $pod --namespace=$namespace -o jsonpath='{.spec.containers[*].resources.limits.cpu}')
memory_limit=$(kubectl get pod $pod --namespace=$namespace -o jsonpath='{.spec.containers[*].resources.limits.memory}')
# 處理 CPU 限制
if [[ $cpu_limit =~ ^[0-9]+m$ ]]; then
cpu_limit=${cpu_limit%m}
elif [[ $cpu_limit =~ ^[0-9]+$ ]]; then
cpu_limit=$((cpu_limit * 1000)) # 轉換為 millicores
else
cpu_limit=0
fi
# 處理內存限制
if [[ $memory_limit =~ ^[0-9]+Mi$ ]]; then
memory_limit=${memory_limit%Mi}
elif [[ $memory_limit =~ ^[0-9]+Gi$ ]]; then
memory_limit=$((${memory_limit%Gi} * 1024)) # 轉換為 MiB
elif [[ $memory_limit =~ ^[0-9]+$ ]]; then
memory_limit=$((memory_limit / 1024)) # 假設是 KiB,轉換為 MiB
else
memory_limit=0
fi
# 累加 CPU 和內存限制
total_cpu_limit=$((total_cpu_limit + cpu_limit))
total_memory_limit=$((total_memory_limit + memory_limit))
done
echo " 總 CPU 限制: $total_cpu_limit mCPU"
echo " 總內存限制: $total_memory_limit MiB"
echo
done
最終腳本會在根目錄導出一個 output.txt 文件
實現效果類似於這樣:
命名空間: kube-public
總 CPU 限制: 0 mCPU
總內存限制: 0 MiB
命名空間: kube-system
總 CPU 限制: 0 mCPU
總內存限制: 340 MiB
命名空間: local
總 CPU 限制: 0 mCPU
總內存限制: 0 MiB
命名空間: monitoring
總 CPU 限制: 0 mCPU
總內存限制: 0 MiB