读取方式 #
读取/sys/fs/cgroup/cpu,cpuacct/cpu.shares
这个文件里的数,将这个值除以1024,就是你给容器设置的cpu request数。
读取/sys/fs/cgroup/cpu,cpuacct/cpu.cfs_quota_us
这个文件里的数,记作A
再读取/sys/fs/cgroup/cpu,cpuacct/cpu.cfs_period_us
这个文件里的数,记作B
那么A/B就是你给容器设置的limit数。
获取pod中的mem限制 #
#!/bin/bash
# 获取容器内存限制.
get_mem_limit() {
memory_total=$(awk '/MemTotal:/ {printf("%d", $2/1024)}' /proc/meminfo)
if [[ -f /sys/fs/cgroup/memory/memory.stat ]]; then
memory_limit_stat=$(awk '/hierarchical_memory_limit/ {printf("%d", $2/1024/1024)}' /sys/fs/cgroup/memory/memory.stat)
fi
# 如果内存总量大于限制内存,说明容器是开启了内存限制的(单体docker有时候没限制内存),此时取内存限制值,单位为MB
if [[ $memory_total -gt ${memory_limit_stat} ]]; then
export MEM_LIMIT=${memory_limit_stat}
else
# 未做内存限制时将变量设置为0,方便后面的判断
export MEM_LIMIT=0
fi
echo ${MEM_LIMIT}
}
获取pod中的cpu限制 #
# 获取容器CPU限制.
get_cpu_limit() {
cfs_quota_us=$(cat /sys/fs/cgroup/cpu/cpu.cfs_quota_us)
cfs_period_us=$(cat /sys/fs/cgroup/cpu/cpu.cfs_period_us)
cpu_limit=$(expr ${cfs_quota_us} / ${cfs_period_us})
if [[ ${cpu_limit} -eq 0 ]]; then
export CPU_LIMIT=0
else
export CPU_LIMIT=${cpu_limit}
fi
echo ${CPU_LIMIT}
}
使用方式 #
- 方式1:直接执行函数,从环境变量中拿
get_mem_limit
get_cpu_limit
echo ${MEM_LIMIT}
echo ${CPU_LIMIT}
- 方式2:赋值方式获取
mem_limit=$(get_mem_limit)
cpu_limit=${get_cpu_limit}