Когда нагрузка уменьшается, HPA намеренно ждет определенное время, прежде чем свернуть приложение. Это известно как задержка перезарядки и помогает слишком часто увеличивать и уменьшать приложение. Результатом этого является то, что в течение определенного времени приложение работает с предыдущим большим количеством реплик, даже если значение метрики намного ниже целевого значения. Это может выглядеть так, как будто HPA не реагирует на уменьшенную нагрузку, но в конечном итоге будет реагировать.
Однако продолжительность задержки восстановления по умолчанию составляет 5 минут. Так что, если через 30-40 минут приложение все еще не свернуто, это странно. Если задержка перезарядки не была установлена на что-то другое с флагом --horizontal-pod-autoscaler-downscale-stabilization
диспетчера контроллеров .
В выводе, который вы разместили, значение показателя составляет 49% с целью 60% и текущее количество реплик равно 3. Это на самом деле не так уж и плохо.
Возможно, проблема в том, что вы используете использование памяти в качестве метрики, а нехорошая метрика автомасштабирования.
Метрика автомасштабирования должна линейно реагировать на текущую нагрузку по репликам приложения. Если число реплик удваивается, значение метрики должно уменьшиться вдвое, а если число реплик уменьшится вдвое, значение метрики должно удвоиться. Использование памяти в большинстве случаев не показывает такое поведение. Например, если каждая реплика использует фиксированный объем памяти, то среднее использование памяти по репликам остается примерно одинаковым независимо от того, сколько реплик было добавлено или удалено. В этом отношении загрузка ЦП обычно работает намного лучше.