В Kubernetes-кластере с 200 подами внезапно начались случайные вытеснения из-за нехватки памяти, хотя requests и limits настроены корректно. Как диагностировать проблему и определить, вызвана ли она памятью ядра, swap или фрагментацией памяти?

Сначала отличите eviction kubelet от OOMKill контейнера и системного OOM. Корректные requests и limits не гарантируют отсутствие MemoryPressure: память нужна также ядру и системным процессам.

Короткий ответ

Что ответить на собеседовании

Сначала отличите eviction kubelet от OOMKill контейнера и системного OOM. Корректные requests и limits не гарантируют отсутствие MemoryPressure: память нужна также ядру и системным процессам.

Подробный разбор

Ответ с пояснениями

Сначала отличите eviction kubelet от OOMKill контейнера и системного OOM. Корректные requests и limits не гарантируют отсутствие MemoryPressure: память нужна также ядру и системным процессам.

Сопоставьте события Pod, журналы kubelet и ядра, memory.available и пороги eviction на узле. Проверьте cgroup memory.stat, slab, page tables, сетевые буферы, системные службы и резервирование памяти. Swap оценивают по фактической конфигурации kubelet и ОС, а фрагментацию — по buddyinfo и сообщениям об отказах выделения, не по одному проценту занятой RAM. Сравните затронутые узлы и рост нагрузки. Не увеличивайте лимиты вслепую: это может усилить давление и не устранить источник.

Источник: kubernetes.io.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее