Принудительное масштабирование до нуля с помощью 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 .

Другие вопросы по тегам