Давайте начнем с краткого объяснения Алгоритма автомасштабирования :
Один раз в 30 секунд (--horizontal-pod-autoscaler-sync-period
значение по умолчанию) цикл управления автоматическим масштабированием ставит в очередь модули и собирает их загрузку ЦП. Затем он сравнивает среднее арифметическое этого значения с настроенным порогом и корректирует количество реплик в соответствии с желаемой целью использования ЦП. Загрузка ЦП - это среднее значение использования ЦП модуля за последние 1 минуту, деленное на ЦП, запрошенный модулем. В настоящее время загрузка ЦП берется из службы Heapster (должна присутствовать в kube-system
пространстве имен).
В этой части бесполезны запросы ресурсов, ограничения ресурсов и сходство модулей. Мы получили только желаемое количество реплик.
Затем планировщик принимает участие в процессе автоматического масштабирования и начинает планирование модулей в соответствии с количеством реплик. В этот момент учитываются запросы ресурсов, ограничения ресурсов и сходство модулей, чтобы решить, на каком узле будет развернута следующая реплика модуля.
В соответствии с вышеизложенным, у вас может быть несколько развертываний, которые нельзя масштабировать до максимального числа реплик за один и тот же период времени. Но в случае недостаточного количества ресурсов, кто первым наращивает масштаб - потребляет ресурсы, любые другие модули, которые не вписываются в оставшиеся ресурсы, не будут запланированы, пока ресурсы снова не станут свободными.
В GCP или GKE вы можете использовать autoscaler , чтобы добавлять новые узлы в кластер, когда вам нужно больше вычислительных мощностей, и удалять их при снижении нагрузки. Это поможет избежать «чрезмерного выделения ресурсов», потому что вы всегда можете иметь желаемый объем вычислительной мощности, не больше, не меньше.
Обновление:
Планировщик решает, запускать ли модуль на основе доступных ресурсов, установленных по умолчанию или настроенных ограничений на пространство имен и соответствия модуля.
Ограничение работы для каждого конкретного модуля, ограничение его потребления ресурсов; они не предназначены для ограничения суммарного потребления ресурсов для нескольких модулей.
Пакет запускается с количеством ресурсов, указанных в запросе.
Например, если у вас есть 1000 ЦП на узле, и модуль запрашивает 500 с пределом 1000, планировщик знает, что доступны другие 500, даже если модуль потребляет все ресурсы до предела в данный момент. Таким образом, на узле с 1000 доступных процессоров вы можете запустить два модуля с запросом 500 и ограничением 1000 каждый.