linux怎么查看本机内存大小
395
2022-10-23
kubelet驱逐的几个指标(mem、nodefs、imagefs)和软硬配置
参考链接:k8s 节点驱逐
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"
效果:
nodefs.avaiable nodefs.inodesFree iamgefs.avaiable imagefs.inodesFree
参考链接:
imagefs计算脚本
echo "---------查看k8s nodefs.avaiable nodefs.inodesFree iamgefs.avaiable imagefs.inodesFree-------------"#imagefs: docker安装目录所在的分区(默认/var/lib/docker/),nodefs: kubelet的启动参数--root-dir所指定的目录(默认/var/lib/kubelet)所在的分区nodefs_avaiable=$(df -h /var/lib/kubelet | grep -v "挂载点" | awk '{print($4/$2)}')imagefs_avaiable=$(df -h /var/lib/docker | grep -v "挂载点" | awk '{print($4/$2)}')nodefs=$(df -h /var/lib/kubelet | grep -v "文件" | awk '{print $1}')imagefs=$(df -h /var/lib/docker | grep -v "文件" | awk '{print $1}')nodefs_inodeFree=$(df -i | grep $nodefs | awk '{print($4/$2)}')imagefs_inodeFree=$(df -i | grep $imagefs | awk '{print($4/$2)}')echo "nodefs_avaiable $nodefs_avaiable"echo "imagefs_avaiable $imagefs_avaiable"echo "nodefs_inodeFree $nodefs_inodeFree"echo "imagefs_inodeFree $imagefs_inodeFree"
效果:
具体kubelet配置文件中设置软硬策略根据业务情况而定
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~