Kubernetes——查询并导出业务deployment/statefulset的request.cpu、request.mem和limit.cpu和limit.mem资源

发布时间 2023-07-18 11:01:01作者: 左扬

Kubernetes——查询并导出业务deployment/statefulset的request.cpu、request.mem和limit.cpu和limit.mem资源

一、计算逻辑

针对单个pod里只有单个docker的计算逻辑:

    CPU_Limit = c0.resources.limits.cpu 
    Memory_Limit = c0.resources.limits.memory 
    
    CPU_Request = c0.resources.requests.cpu
    Memory_Request = c0.resources.requests.memory
    
      - image: abcxxxxxxx:version1.0.0-rc.0-1-g77d5c5b5f1d3-qcgfz

        name: c0
        resources:
          limits:
            cpu: "2"
            memory: 4Gi
          requests:
            cpu: "1"
            memory: 2Gi

---------------------------------------------------------------------------------

针对单个pod里有多个docker的计算逻辑:
    
    CPU_Limit = c0.resources.limits.cpu + c1.resources.limits.cpu
    Memory_Limit = c0.resources.limits.memory + c1.resources.limits.memory
    
    CPU_Request = c0.resources.requests.cpu + c1.resources.requests.cpu
    Memory_Request = c0.resources.requests.memory + c1.resources.requests.memory
    
    
      -image: abcxxxxxxx:version1.0.0-rc.0-1-g77d5c5b5f1d3-qcgf
        name: c0
        resources:
          limits:
            cpu: "2"
            memory: 6Gi
          requests:
            cpu: "1"
            memory: 2Gi

      - image: defxxxxxxx:version1.0.0-rc.0-1-g77d5c5b5f1d3-qcgf
        name: c1
        resources:
          limits:
            cpu: 500m
            memory: 512Mi
          requests:
            cpu: 500m
            memory: 512Mi

二、计算程序

#!/bin/bash

# Retrieve all namespaces
namespaces=$(kubectl get namespaces --no-headers -o custom-columns=NAME:.metadata.name | egrep -v "(default|kube-system|kube-public)")

output_file="resource_limits_and_replicas.csv"
rm -f $output_file

# Write CSV file headers
echo "Namespace,Type,Name,CPU_Limit,Memory_Limit,Replicas,CPU_Request,Memory_Request" >> $output_file

# For each namespace
for ns in $namespaces; do
    # Get Deployment resource limits, requests, and replicas
    kubectl -n $ns get deployments -o json | \
    jq -r --arg ns "$ns" '.items[] | [$ns, "Deployment", .metadata.name, (reduce .spec.template.spec.containers[] as $item (""; . + $item.resources.limits.cpu)), (reduce .spec.template.spec.containers[] as $item (""; . + $item.resources.limits.memory)), .spec.replicas, (reduce .spec.template.spec.containers[] as $item (""; . + $item.resources.requests.cpu)), (reduce .spec.template.spec.containers[] as $item (""; . + $item.resources.requests.memory))] | @csv' >> $output_file

    # Get StatefulSet resource limits, requests, and replicas
    kubectl -n $ns get statefulsets -o json | \
    jq -r --arg ns "$ns" '.items[] | [$ns, "StatefulSet", .metadata.name, (reduce .spec.template.spec.containers[] as $item (""; . + $item.resources.limits.cpu)), (reduce .spec.template.spec.containers[] as $item (""; . + $item.resources.limits.memory)), .spec.replicas, (reduce .spec.template.spec.containers[] as $item (""; . + $item.resources.requests.cpu)), (reduce .spec.template.spec.containers[] as $item (""; . + $item.resources.requests.memory))] | @csv' >> $output_file
done

三、输出的样本