есть дилема с тем, сколько выставить лимит/реквест ресурсов на них. Я пониманию, что по ходу дела нужно будет подкручивать по реальным показателям, но хочу понять как выводить примерные значения, которые можно поставить в качестве начальных значений
Я взял один из типовых микросервисов, нагрузил его для понимания показателей прожорливости и получил, что под нагрузкой его потребление cpu 400-500m, а памяти 300-450мб. На холостом ходу практически не используется cpu и 200-250 мб памяти
Если я все полностью правильно понял с гайдов, то кубер при масштабировании использует показатель request ресурсов для определения того, на какую ноду поставить реплику. Соответственно, к каким выводам я пришел
1) CPU ограничивать не надо, тк при перезапуске спринг бут отжирает много цпу, и если его ограничить то рестарт пода будет занимать слишком долго времени. Но для правильной работы кубера нужно указать request значение (для правильного скейлинга), что немного ставит меня в тупик. Как обычно ставят?
2) По памяти решил ставить лимит в 1 гб, тогда как в самом приложении поставить ограничение jvm на максимальный хип в чуть больший размер. Логика простая - если приложение будет подбираться к потолку ограничения памяти, кубер мягко перезапустит под, и мы не вылетим с ООМ, возможно что посреди какой-то операции
Тут решил request поставить 200 мб, тк приложение столько требует на холостом ходу
Вопрос
Как ставят request cpu и насколько я прав с памятью?
кубер не перезапускает под мягко - он оомом убивает процессы
хм, мне в какой-то статье попадалось, что он посылает код на терминейт, из-за чего у приложения есть шанс доделать все
это при удалении пода (читай деплое). если преодалел лимиты - вступает в бой оом, другой стратегии нет.
Жава весь хип выжрет при первой же пиковой нагрузке. Если вы лимит меньше хипа поставите, ее сразу и прибьют. Лимит надо ставить на 50-100 мб больше Xmx. Разные приложения кушают кроме хипа память по-разному, поэтому тут универсального значения нет.
я после настроек ELK-стека джаву не долюбливаю)
по п.2 в самом приложении проще выставить в процентном соотношении от существующей памяти, jvm от определенных версий вполне себе уже умеет определять, сколько памяти на хосте/в контейнере
Обсуждают сегодня