Kubernetes中內存單位Mi和M的區別,你知道嗎?
在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。