在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:
nginx-M.yaml:
nginx-Mi相关日志有如下一行,可以看出 Memory=1024*1024。
nginx-M相关日志有如下一行,可以看出 Memory=1000*1000。