Квоты

Раздел Квоты включает в себя две страницы:

  • Quotas;
  • Limit Ranges.

Quotas

На странице Quotas можно создать, отредактировать, удалить или просмотреть ранее созданные квоты на вычислительные ресурсы.

Чтобы удалить элемент, нажмите на в строке элемента.

Чтобы создать квоту нажмите на кнопку + Создать квоту.

В открывшемся окне необходимо задать название квоты, при необходимости указать лейблы и аннотации. Для определения скоупа применения квоты задайте совпадающие выражения.

Параметры квоты, доступные для задания из интерфейса платформы, разделены логически на 3 вкладки:

  • Вычислительные ресурсы;
  • Хранилище;
  • Количество.

Единицы измерения вычислительных ресурсов и хранилища стандартные для Kubernetes.

После внесения данных для создания квоты нажмите Сохранить.

Limit Ranges

LimitRanges - это объекты в Kubernetes, которые позволяют администраторам установить ограничения на ресурсы, используемые несколькими типами объектов в рамках неймспейса.

Перед началом настройки обратите внимание, что:

  • установленный limitRange применяется только к новым создаваемым объектам в момент их создания!
  • конфигурация LimitRanges предполагает решение установления значений по умолчанию в контейнерах. В Pods и PersistentVolumeClaims доступна только установка только максимальных и минимальных значений.

Антипаттерны в конфигурации limitRange:

  1. Неадекватные значения по умолчанию: Если вы устанавливаете безумно большие или маленькие LimitRanges, это может привести к серьезным проблемам с ресурсами. Например, установка слишком высокого ограничения может привести к исчерпанию ресурсов, в то время как установка слишком низкого ограничения может мешать работе приложений. Пример неадекватных значений может быть установка ограничений CPU на 1000m для приложения, которому для нормальной работы требуется как минимум 2000m. Приложение не получит достаточно ресурсов для корректной работы и может стать недоступным или работать с серьезными задержками. Наоборот, если установить ограничение на 100000m, это может привести к исчерпанию ресурсов и большой нагрузке на систему, благодаря чему другие приложения также могут столкнуться с проблемами с производительностью.

  2. Нет учета реального использования ресурсов: максимальные и минимальные значения в LimitRanges должны устанавливаться с учетом реального использования ресурсов приложениями. Если это не учитывается, это может привести к проблемам с производительностью и доступностью. Допустим, вы установили LimitRange на 1000m CPU и 200Mi для памяти, не учитывая, что приложение в реальности использует около 1500m CPU и 500Mi памяти. Результатом будет недостаточность ресурсов, что негативно скажется на производительности приложения.

  3. Если значения по умолчанию в LimitRange устанавливается на CPU или память больше, чем размер узла, это может привести к тому, что поды не будут запускаться, так как Kubernetes не сможет найти подходящий узел. Если размер вашего узла составляет 1CPU и 2Gi памяти, и вы устанавливаете значения по умолчанию в LimitRange, равные 2 CPU и 4Gi памяти, Kubernetes просто не сможет запустить поды, так как они превышают ресурсы, которыми может управлять узел.

  4. Если ограничения установлены слишком низко, поды могут быть в статусе Pending, так как они не могут получить необходимые ресурсы. Если у вас есть под, который требует 1 CPU и 2 Gi памяти для нормальной работы, а вы установили максимальное значение 500m для CPU и 1Gi для памяти, под будет в статусе Pending, так как он не сможет получить достаточно ресурсов для запуска.

Настройка LimitRanges:

Перейдите в Неймспейс/Управление квотами/LimitRanges. Создайте новый LimitRange и задайте ему название.

Чтобы установить значения по умолчанию для контейнеров, на вкладке Container пропишите значения параметров:

  • CPU Default Reuqest (limits.defaultRequest.cpu);
  • CPU Default Limit (limits.default.cpu);
  • Memory Default Reuqest (limits.defaultRequest.memory);
  • Memory Default Limit (limits.default.memory)

Эти параметры будет назначены контейнеру, если при создании контейнера значения limits и requests не заданы.

Рассмотрим пример. Зададим для контейнера параметры:

Memory Default Limit: 512Mi CPU Default Limit: “1” Memory Default Request: 256Mi CPU Default Request: “0.5”

В этом примере для контейнеров устанавливаются следующие ограничения:

  • Если контейнер не указывает запрос на память, ему будет предоставлено 256Mi.

  • Если контейнер не указывает ограничение на память, ему будет предоставлено 512Mi.

  • Если контейнер не указывает запрос на CPU, ему будет предоставлено 0.5 CPU.

  • Если контейнер не указывает ограничение на CPU, ему будет предоставлено 1 СPU.

Вы можете ограничить возможность создания слишком мелких или, наоборот, слишком ресурсоемких контейнеров. Для этого задайте максимальные и минимальные значения, с которыми могут быть созданы контейнере в этом неймспейсе.

  • CPU Минимальное значение (limits.min.cpu) означает, что на выбранных подах контейнер с CPU ниже указанного минимального значения параметра не будет запущен.
  • CPU Минимальное значение (limits.max.cpu) означает, что на выбранных подах контейнер с CPU выше указанного максимального значения параметра не будет запущен.
  • Memory Минимальное значение (limits.min.memory) означает, что на выбранных подах контейнер с Memory ниже указанного минимального значения параметра не будет запущен.
  • Memory Минимальное значение (limits.max.memory) означает, что на выбранных подах контейнер с Memory выше указанного максимального значения параметра не будет запущен.

Аналогичное ограничение можно наложить на весь под. Для этого в настройке LimitRange перейдите на вкладку Pod и установите верхние и нижние пределы параметров:

  • CPU Минимальное значение (limits.min.cpu) означает, что в этом неймспейсе поды с общим CPU ниже указанного минимального значения параметра не будут запущены.
  • CPU Минимальное значение (limits.max.cpu) означает, что в этом неймспейсе поды с общим CPU выше указанного максимального значения параметра не будут запущены.
  • Memory Минимальное значение (limits.min.memory) означает, что в этом неймспейсе поды с общим Memory ниже указанного минимального значения параметра не будут запущены.
  • Memory Минимальное значение (limits.max.memory) означает, что в этом неймспейсе поды с общим Memory выше указанного максимального значения параметра не будут запущены.

Для установки верхних и нижних пределов для PersistentVolumeClaims перейдите в конфигурации LimitRange на вкладку PersistentVolumeClaims.

  • Запрос ресурсов (Request) в PVC должен быть больше или равен минимальному ограничению для PVC, указанному в LimitRange.
  • Запрос ресурсов (Request) в PVC должен быть меньше или равен максимальному ограничению для PVC, указанному в LimitRange.

Если в одном неймспейсе существуют несколько объектов LimitRange с разными применяемыми значениями по умолчанию, при создании подов применяются значение самого последнего созданного объекта LimitRange.