0
点赞
收藏
分享

微信扫一扫

kubelet驱逐内存指标(mem_avaiable)计算脚本

7dcac6528821 2022-02-06 阅读 47

参考链接:k8s 节点驱逐

​​https://kubernetes.io/zh/docs/concepts/scheduling-eviction/node-pressure-eviction/#soft-eviction-thresholds​​

mem_awaiable计算脚本

#!/bin/bash

#!/usr/bin/env bash

#改脚本计算k8s cgroups的mem-available值 影响kubelet驱逐的内存指标

#节点总内存

memory_capacity_in_kb=$(cat /proc/meminfo | grep MemTotal | awk '{print $2}')

memory_capacity_in_mb=$((memory_capacity_in_kb / 1024))

memory_capacity_in_bytes=$((memory_capacity_in_kb * 1024))

#k8s cgroups usage值

memory_usage_in_bytes=$(cat /sys/fs/cgroup/memory/memory.usage_in_bytes)

memory_usage_in_mb=$((memory_usage_in_bytes / (1024*1024)))

# inactive_file(即非活动 LRU 列表上基于文件来虚拟的内存的字节数), 因为它假定在压力下内存是可回收的  

memory_total_inactive_file=$(cat /sys/fs/cgroup/memory/memory.stat | grep total_inactive_file | awk '{print $2}')

memory_total_inactive_file_in_mb=$((memory_total_inactive_file / (1024*1024)))

#working-set(工作集内存,包括一些正在写入的内存,脏内存、内核内存等)的值是k8s正在使用真正的度量标准,也是kubectl top 通过cadvisor拿的值

#如果cgroups中usage值大于cgroups中可回收的内存值(inactive),那么实际的workingset值就是usage-inactive(比如usage 1g inactive 800mi 那么实际计算workingset就是使用200mi 就是多给了你800mi )

#反之如果usage值小于inactive值,那么workingset实际使用的值就是0,因为inactive值可以随时回收,可用的就是节点总的

memory_working_set=${memory_usage_in_bytes}

if [ "$memory_working_set" -lt "$memory_total_inactive_file" ];

then

   memory_working_set=0

else

   memory_working_set=$((memory_usage_in_bytes - memory_total_inactive_file))

fi

memory_working_set_in_mb=$((memory_working_set / (1024*1024)))

#cgroups可用内存(节点pod驱逐的关键值)是节点总内存值-正在使用的working-set值

memory_available_in_bytes=$((memory_capacity_in_bytes - memory_working_set))

memory_available_in_mb=$((memory_available_in_bytes / (1024*1024)))

ehco "----------k8s mem_avaible等于mem_capicty减去mem_working_set------------"

echo "memory.capacity_in_mb $memory_capacity_in_mb"

echo "memory.usage_in_mb $memory_usage_in_mb"

echo "memory.total_inactive_file_in_mb $memory_total_inactive_file_in_mb"

echo "memory.working_set_in_mb $memory_working_set_in_mb"

echo "memory.available_in_mb $memory_available_in_mb"

举报

相关推荐

0 条评论