KEDA: Kubernetes enabling or disabling Keda and HPA
Ты развернул KEDA, настроил ScaledObject, автоскейлинг пошел работать. И теперь встает вопрос: а как его быстро и глобально приостановить? Не менять же maxRepli
Ты развернул KEDA, настроил ScaledObject, автоскейлинг пошел работать. И теперь встает вопрос: а как его быстро и глобально приостановить? Не менять же maxReplicaCount на текущее значение или не править каждый триггер вручную.
Часто первое, что приходит в голову — выставить replicaCount в деплойменте на фиксированное число и забыть про KEDA. Способ рабочий, но не очень элегантный. Придется потом вспоминать, какие были настройки min и max, да и deployment лишний раз тронуть.
Есть ли главный тумблер?
Прямо в ScaledObject или HPA такого поля enabled: false нет. Но есть кое-что получше — аннотация-пауза.
Вместо танцев с репликами можно просто сказать KEDA: «стой на месте и не двигайся». Для этого в ScaledObject добавляется одна аннотация:
metadata:
annotations:
autoscaling.keda.sh/paused-replicas: "0"
Само наличие этой аннотации полностью останавливает процесс автоскейлинга. Цифра "0" — это не количество реплик, а стоп-сигнал. KEDA зафиксирует текущее количество подов (или scale до указанного числа) и перестанет реагировать на любые метрики из триггеров.
Зачем это нужно
Классические сценарии — плановые работы в кластере или временная нехватка ресурсов. Нужно быстро приостановить не самые критичные нагрузки, но не сносить их полностью, а просто заморозить в текущем состоянии.
Важный нюанс: эта пауза работает только для KEDA. Стандартный HPA, если он у вас тоже настроен, продолжит жить своей жизнью. Поэтому если используете оба механизма, HPA нужно будет отключать отдельно.
Как снова включить
Всё до безобразия просто: удаляем аннотацию и сохраняем манифест.
kubectl annotate scaledobject/<your-scaledobject-name> autoscaling.keda.sh/paused-replicas-
KEDA подхватит изменение, и автоскейлинг снова начнет работать по первоначальным правилам. Ничего восстанавливать или вспоминать не нужно.
Что в сухом остатке
Когда нужна быстрая пауза — используй autoscaling.keda.sh/paused-replicas. Это чисто и атомарно. Когда нужно точечно отключить один триггер — правишь его параметры или maxReplicaCount.
Если же нужно выключить всё и надолго — возможно, стоит задуматься о деактивации самого ScaledObject или о переводе workload в другой неймспейс. Но для оперативных пауз аннотации более чем достаточно.