Gravatar is an online service that allows Internet users to maintain a consistent image on most websites.

Иван Колдаев

2

Как настроить лимиты памяти Kubernetes (memory.min, memory.max, memory.high)

Как правильно настроить лимиты памяти в Kubernetes с использованием параметров cgroup v2 (memory.min, memory.max, memory.high)?

Я настраиваю лимиты памяти для контейнеров в Kubernetes, который использует cgroup v2. В манифесте Kubernetes я задаю memory.request и memory.limit, и они преобразуются в следующие параметры cgroup:

    memory.min = 
memory.max = 
memory.high =  * 0.8
# memory.low = не устанавливается

При превышении memory.max вызывается OOM killer, но как правильно использовать memory.high? Что происходит, когда контейнер превышает этот порог? И есть ли вообще смысл настраивать memory.high, если на Kubernetes-нодах нет swap и освобождать можно только страницы кеша?

Стоит ли просто настроить более низкий memory.max, если использование memory.high не даёт значительных преимуществ?

Ответы

  • Gravatar is an online service that allows Internet users to maintain a consistent image on most websites.

    Марк Прохоров

    (Изменено)

    Если ваше приложение активно использует кэш (например, для хранения данных файлов или библиотек), memory.high может помочь избежать резкого OOM kill, дав системе время освободить кеш и продолжить работу. Это полезно, если кеш может быть восстановлен.
    Если приложение не использует много кэша, эффект от memory.high будет минимальным, и, в таком случае, проще установить более низкий memory.max и мониторить использование памяти.

    1
  • Gravatar is an online service that allows Internet users to maintain a consistent image on most websites.

    Богдан Игнатов

    (Изменено)

    Когда контейнер превышает порог memory.high, это вызывает «высокое давление на возврат памяти», что означает, что система начнёт замедлять работу контейнера, пытаясь освободить страницы без вызова OOM killer. Но если на узле нет swap, единственное, что можно освободить, — это страницы кэша (page cache). Этот кэш всё равно будет освобождаться при достижении memory.max. Memory.high может просто замедлить контейнер раньше времени, не давая особых преимуществ.

    1