Принудительное масштабирование до нуля с помощью Keda
С помощью простых HPA можно вручную масштабировать базовое развертывание до нуля. Это требуется, например, для. задачи обслуживания. При масштабировании обратно к значению больше нуля масштабирование продолжается, как и раньше. Это выполняемая команда:kubectl scale deployment my-deployment --replicas=0
Однако с KEDA это невозможно. Единственное место в документации гласит:
KEDA не будет применять это значение, то есть вы можете вручную масштабировать развертывание до 0, и KEDA не будет масштабировать его резервное копирование. Однако, когда KEDA сама масштабирует развертывание, она будет уважать установленное там значение.
Я не могу подтвердить это поведение, и предыдущая команда масштабирования не работает. Изменение вручнуюminReplicas
а также maxReplicas
нулевое значение вызывает множество ошибок в журнале keda, то же самое происходит при указании развертывания на поддельное значение.
Мне нужен способ временного масштабирования до нуля (удаление ScaledObject, конечно, работает, но тогда мне нужно где-то их сохранить, что также чревато ошибками и противоречит здравому смыслу). Это должно работать независимо от значенияminReplicaCount
.
Использование Kubernetes 1.15, keda 1.5.0. Пример ScaledObject:
apiVersion: keda.k8s.io/v1alpha1
kind: ScaledObject
metadata: ... # left out
spec:
cooldownPeriod: 600
maxReplicaCount: 8
minReplicaCount: 0
pollingInterval: 30
scaleTargetRef:
containerName: main
deploymentName: my-deployment
scaleType: deployment
triggers:
- type: kafka
... # left out
status:
externalMetricNames:
- lagThreshold
lastActiveTime: "2020-07-21T11:32:31Z"
1 ответ
Довольно поздно, но, надеюсь, это поможет некоторым людям вроде меня, которые пришли сюда через несколько лет...
Документация более поздних версий KEDA не содержит упомянутого вами фрагмента. Однако, начиная с версии KEDA 2.7, выпущенной в мае 2022 года, вы можете приостановить автомасштабирование с помощьюautoscaling.keda.sh/paused-replicas
аннотация применена к . Эта аннотация позволяет вам сохранять количество реплик постоянным (это может быть любое неотрицательное целое число, не обязательно 0). Итак, в случае вопроса вам следует просто добавитьautoscaling.keda.sh/paused-replicas: "0"
строка в YAML, описывающая вашScaledObject
поэтому это будет выглядеть так:
apiVersion: keda.k8s.io/v1alpha1
kind: ScaledObject
metadata:
annotations:
autoscaling.keda.sh/paused-replicas: "0"
... # other annotations and metadata
spec:
cooldownPeriod: 600
maxReplicaCount: 8
minReplicaCount: 0
pollingInterval: 30
scaleTargetRef:
containerName: main
deploymentName: my-deployment
scaleType: deployment
triggers:
- type: kafka
... # left out
status:
externalMetricNames:
- lagThreshold
lastActiveTime: "2020-07-21T11:32:31Z"
Я тестировал его с KEDA 2.10.1 и K8s 1.26.4, и он работал как часы.
Вот соответствующая документация и примечания к выпуску KEDA .