banner
Aki

Aki

太阳能维修,月亮可更换,星星不闪包退换。
twitter

[运维]K8S整理资源分配清单

用途#

整理 k8s 资源分布情况,查看各个命名空间下分配的资源额度

#!/bin/bash

# 获取所有命名空间的列表
namespaces=$(kubectl get namespaces -o jsonpath='{.items[*].metadata.name}')

# 遍历每个命名空间
for namespace in $namespaces
do
    echo "Namespace: $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 "  Total CPU Limit: $total_cpu_limit mCPU"
    echo "  Total Memory Limit: $total_memory_limit MiB"
    echo
done

最终脚本会在根目录导出一个 output.txt 文件
实现效果类似于这样:

Namespace: kube-public
  Total CPU Limit: 0 mCPU
  Total Memory Limit: 0 MiB

Namespace: kube-system
  Total CPU Limit: 0 mCPU
  Total Memory Limit: 340 MiB

Namespace: local
  Total CPU Limit: 0 mCPU
  Total Memory Limit: 0 MiB

Namespace: monitoring
  Total CPU Limit: 0 mCPU
  Total Memory Limit: 0 MiB

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。