Kubernetes中内存单位Mi和M的区别你知道吗?

在Kubernetes中,为避免内存单位混淆,使用Mi表示1024*1024字节,M表示1000*1000字节。文章通过对比创建使用1Mi和1M内存限制的nginxPod,展示了不同的内存表示方式在系统中的实际应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在kubernetes中会经常使用到Mi这个单位,刚接触kubernetes的同学应该很疑惑这个单位和M的区别吧,不求甚解的同学使用了很久的kubernetes后可能还不知道它们的区别(这种同学需要注意提高一下自我要求了)。

问题背景

相信大多数人经常对kb、Kb、KiB、Mb、MiB、MB、TB、GB、bytes/s、bits/s、bps等之间的区别感到很困惑,反正我是困惑过。在区分它们之前,需要先了解一些关键的概念:

数据大小和数据速度的表示之有显著的差异,度量方法也不同。

不仅仅是“b”(比特)和“B”(字节)有区别,“k”和“K”或“m”和“M”也有区别。

大写的“K”/“M”用于存储行业,小写的“k”/“m”用于电信行业,有的人在写文档的时候可能会因为搞混二者而使用错。

在计算机软件世界里,KB是1024B,MB是1024KB即,可以依此类推下去,必须是2的次幂。但是在标准国际单位(International System of Units)或电信行业中(包括计算机硬,例如电脑的内存条如果是1M,意思就是1000*1000B而不是1024*1024B)中M是10的次幂。

kubernetes中的表示法

kubernetes为了防止这些问题的出现,采用了新标准,即使用M(Megabyte)表示1000*1000B,使用Mi(Mebibyte)表示1024*1024B。

看个例子

下面通过一个例子来具体看一下,分别创建两个pod, 一个申请1Mi, 另一个申请1M, 通过log来查看下他们申请内存容量的详细信息。

nginx-Mi.yaml:

apiVersion:v1kind:Podmetadata:name:nginx-Mispec:containers:-name:nginx-Miimage:nginx:latestports:-containerPort:80resources:limits:cpu:200mmemory:128Mirequests:cpu:0.1memory:1Mi

nginx-M.yaml:

apiVersion:v1kind:Podmetadata:name:nginx-Mspec:containers:-name:nginx-Mimage:nginx:latestports:-containerPort:80resources:limits:cpu:200mmemory:128Mirequests:cpu:0.1memory:1M

nginx-Mi相关日志有如下一行,可以看出 Memory=1024*1024

predicates.go:565] Predicate: MilliCPU=100 Memory=1048576 NvidiaGPU=0 OpaqueIntResources=map[]

nginx-M相关日志有如下一行,可以看出 Memory=1000*1000

predicates.go:565] Predicate: MilliCPU=100 Memory=1000000 NvidiaGPU=0 OpaqueIntResources=map[]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

路多辛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值