Контейнеры и 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.
Шпаргалка по суффиксам
Память
| Суффикс | Множитель | В байтах |
|---|---|---|
| Ki | 1024^1 | 1 024 |
| Mi | 1024^2 | 1 048 576 |
| Gi | 1024^3 | 1 073 741 824 |
| Ti | 1024^4 | 1 099 511 627 776 |
| Pi | 1024^5 | 1 125 899 906 842 624 |
| Ei | 1024^6 | 1 152 921 504 606 847 000 |
| k | 1000^1 | 1 000 |
| K | 1000^1 | 1 000 |
| M | 1000^2 | 1 000 000 |
| G | 1000^3 | 1 000 000 000 |
| T | 1000^4 | 1 000 000 000 000 |
| P | 1000^5 | 1 000 000 000 000 000 |
| E | 1000^6 | 1 000 000 000 000 000 000 |
CPU
| Суффикс | Доля ядра | Пример |
|---|---|---|
| — | целые ядра | 2 = 2 ядра |
| m | тысячная | 250m = 0,25 ядра |
| u | миллионная | 500000u = 0,5 ядра |
| n | миллиардная | 100000000n = 0,1 ядра |