Keda RabbitMQ - Keda не создает дополнительные задания, когда в очереди мало сообщений.

У меня есть задание Keda Scaledjob, настроенное для создания 1 задания для каждого сообщения, имеющего состояние «готово» в RabbitMQ.

Максимальное количество реплик установлено на 70.

Наблюдаемый:

  • Когда в очереди много сообщений, скажем 300, Keda правильно создает новые задания, чтобы достичь максимального количества реплик => Таким образом, есть 70 запущенных заданий, каждое из которых потребляет 1 сообщение из очереди.

  • Когда в очереди мало сообщений, скажем, 1 готово и 1 не запаковано, Keda отказывается создавать новое задание, даже если в кластере достаточно ресурсов. Это похоже на ожидание завершения текущего выполняемого задания, чтобы создать новое задание.

Вот моя конфигурация Keda:

      ---
# Reference - https://keda.sh/docs/2.0/concepts/scaling-jobs/
apiVersion: keda.sh/v1alpha1
kind: ScaledJob
metadata:
  name: scaledjob-puppeteer
  labels:
    environment: development
    app: puppeteer-display
spec:
  jobTargetRef:
    parallelism: 1                            # [max number of desired pods](https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/#controlling-parallelism)
    completions: 1                            # [desired number of successfully finished pods](https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/#controlling-parallelism)
    activeDeadlineSeconds: 7200               # (2 hours) Specifies the duration in seconds relative to the startTime that the job may be active before the system tries to terminate it; value must be positive integer
    backoffLimit: 2                           # Specifies the number of retries before marking this job failed. Defaults to 6
    template:
      spec:
        volumes:
          ...
        containers:
          ...
  pollingInterval: 10
  successfulJobsHistoryLimit: 0
  failedJobsHistoryLimit: 0
  maxReplicaCount: 75
  triggers:
    - type: rabbitmq
      metadata:
        protocol: amqp
        queueName: tasks
        mode: QueueLength
        value: "1"
      authenticationRef:
        name: keda-trigger-auth-rabbitmq-conn
---

Как заставить Keda создавать задание, когда в очереди>= 1 сообщение?

Изменить: похоже, что он ждет не менее 1 часа перед созданием новой работы.

1 ответ

Проблема, похоже, заключается в отсутствующей настройке масштабированияStrategy. Вы можете добавить следующую конфигурацию:

        scalingStrategy:
    strategy: accurate

Точная настройка используется, когда вы используете сообщения из своей очереди вместо блокировки сообщений. Это часто используется в других очередях сообщений.

Для справки вы можете посмотреть https://keda.sh/docs/2.7/concepts/scaling-jobs/ Дополнительную информацию о стратегиях масштабирования можно найти в разделе сведений.

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