用途#
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)) # ミリコアに変換する
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