Привет, Хабр!
С лимитом памяти в контейнере все привыкли обращаться одинаково. Процесс дорос до limits.memory, ядро его убило, в kubectl describe появился OOMKilled. Через пару секунд контейнер уже поднялся заново. Приятного мало, зато понятно, что случилось.
В Linux с cgroup v2 у памяти есть второй порог, memory.high, и на нём ядро никого не убивает. Процесс, который за него вышел, отправляют на принудительное освобождение памяти, а если освобождать нечего, усыпляют.
В systemd этот порог давно живёт под именем MemoryHigh=. А 26 августа вышел Kubernetes 1.37, в котором Memory QoS стал бетой и включён по умолчанию. Сам по себе memory.high он пока не ставит. Для этого хватает одной строки memoryThrottlingFactor: 0.9 в конфиге kubelet, и её приводят в примерах настройки.