На главную

Контейнеры и CI/CD

Единицы Kubernetes

Переводит «100m» в доли ядра, а «512Mi» — в байты, и показывает, чем Mi отличается от M. Двоичный и десятичный суффиксы различаются на пять процентов, и на этом регулярно спотыкаются при расчёте лимитов.

CPU

Понимает 2, 1.5, 250m, 500000u, 100000000n

Ядер0,25
Милли-ядер (m)250
Нано-ядер (n)250 000 000
Доля одного ядра25 %

«m» — это милли-ядро, тысячная доля одного ядра. Запрос 500m означает половину ядра, а не пятьсот ядер: лимит в 1000m равен ровно одному ядру.

Память

Понимает 512Mi, 1Gi, 512M, 1073741824, 1e3

Байт536 870 912
Ki (×1024)524 288
Mi (×1024²)512
Gi (×1024³)0,5
k (×1000)536 870,912
M (×1000²)536,8709
G (×1000³)0,536871

Mi против M: во что обходится одна буква

Сравниваем «512Mi» и «512M».

512Mi — двоичный

536 870 912

байт, множитель 1024²

512M — десятичный

512 000 000

байт, множитель 1000²

Разница

4.86 %

24 870 912 байт

Kubernetes принимает обе записи, но означают они разное. Лимит «512M» на 24 мегабайта меньше, чем «512Mi», и приложение, рассчитанное на 512 мебибайт, начинает получать OOMKilled без видимой причины. В манифестах принято писать двоичные суффиксы: Ki, Mi, Gi.

Шпаргалка по суффиксам

Память

СуффиксМножительВ байтах
Ki1024^11 024
Mi1024^21 048 576
Gi1024^31 073 741 824
Ti1024^41 099 511 627 776
Pi1024^51 125 899 906 842 624
Ei1024^61 152 921 504 606 847 000
k1000^11 000
K1000^11 000
M1000^21 000 000
G1000^31 000 000 000
T1000^41 000 000 000 000
P1000^51 000 000 000 000 000
E1000^61 000 000 000 000 000 000

CPU

СуффиксДоля ядраПример
целые ядра2 = 2 ядра
mтысячная250m = 0,25 ядра
uмиллионная500000u = 0,5 ядра
nмиллиардная100000000n = 0,1 ядра