Ресурсы Overprovision Pods в Kubernetes HPA

В настоящее время, если мы хотим использовать автоматическое масштабирование Horizontal Pod в кубернетах, нам нужно указать следующее для службы, которую мы хотим сделать:

   Limits:
      cpu:  150m
      memory:   150Mi
    Requests:
      cpu:      42m
      memory:       50Mi

У меня есть несколько сервисов, которые можно масштабировать с помощью HPA.

Можем ли мы предоставить эти услуги с избытком? Как будто эти дополнительные ресурсы ресурсов превышают общие ресурсы, доступные от виртуальной машины.

Обновление: 1. Дополнительные объяснения к вопросу, 2. Добавленное изображение.

Рассмотрим ситуацию, когда: предположим, что запросы модулей находятся в пределах общего доступного ЦП, но предел превышает его

Например:

Общий доступный ЦП составляет 1000 млн ядер, 2 модуля по 500 млн ядер запросов каждый и лимит 1000 млн каждый.

Во-первых, могу ли я установить это ограничение, например, по 1000 метров для каждого, если общее количество составляет всего 1000 метров?

Если да? Update2: ‹Думаю, мы сможем это сделать, как я провел эксперимент, показанный ниже на изображении>

Кластер с избыточным выделением ресурсов

Теперь, если модуль 2 не использует все свои 500 млн ядер ЦП, а модуль 1 достиг своего общего запрошенного лимита в 500 млн,

может ли этот модуль теперь использовать более 500 МБ ядер, которые не используются вторым модулем, поскольку установлено ограничение на 1000?

Если нет? Обновление2: Думаю, это больше не действует.

Тогда я думаю, что избыточная подготовка не может быть выполнена?


person Anshul Jindal    schedule 14.05.2018    source источник
comment
Если модуль имеет больше запросов на потребление ресурсов, чем узел, он не будет запланирован на этом узле. Планировщик K8s знает обо всех узлах и возможностях их ресурсов.   -  person Suresh Vishnoi    schedule 14.05.2018
comment
ваш модуль будет находиться в состоянии pending, пока планировщик не найдет нужный узел с достаточным количеством ресурсов.   -  person Suresh Vishnoi    schedule 14.05.2018


Ответы (1)


Начнем с краткого объяснения Алгоритм автомасштабирования:

Один раз в 30 секунд (--horizontal-pod-autoscaler-sync-period значение по умолчанию) цикл управления автомасштабированием ставит в очередь модули и собирает данные об использовании ЦП. Затем он сравнивает среднее арифметическое этого значения с настроенным порогом и регулирует количество реплик, чтобы оно соответствовало желаемой цели использования ЦП. Использование ЦП - это среднее значение использования ЦП модулем за последнюю минуту, разделенное на количество ресурсов ЦП, запрошенных модулем. В настоящее время использование ЦП берется из службы Heapster (должно присутствовать в пространстве имен kube-system).

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

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

В GCP или GKE вы можете использовать средство автомасштабирования для добавления новых узлов. в кластер, когда вам нужно больше вычислительных мощностей, и удалите их, когда нагрузка снизится. Это поможет избежать «избыточного выделения ресурсов», поскольку вы всегда можете иметь желаемый объем вычислительной мощности, не больше и не меньше.

Обновление. Планировщик решает, запускать ли модуль на основе доступных ресурсов, установленных по умолчанию или настроенных ограничений, установленных для пространства имен, и соответствия модуля.

Ограничивает работу для каждого конкретного модуля, ограничивая его потребление ресурсов; они не предназначены для ограничения суммарного потребления ресурсов несколькими модулями.

Пакет запускается с количеством ресурсов, указанным в запросе.

Например, если у вас есть 1000 ЦП на узле, а модуль запрашивает 500 с ограничением 1000, планировщик знает, что другие 500 доступны, даже если модуль в этот момент потребляет все ресурсы до лимита. Итак, на узле с доступным ЦП 1000 вы можете запустить два модуля с запросом 500 и ограничением 1000 каждый.

person VASャ    schedule 14.05.2018
comment
Да, это правильно, но рассмотрим ситуацию, которую я написал в обновлении вопроса - person Anshul Jindal; 14.05.2018