Как установить maxReplicas в зависимости от размера очереди для HorizontalPodAutoscaler?

В нашем кластере Kubernetes у меня есть HPA, настроенный с внешними метриками для отслеживания размера очереди. Кроме того, у меня включен шлюз HPAScaleToZero, поэтому, если в очереди нет сообщений, не будет запущенных модулей. В большинстве случаев это работает нормально, но иногда в очередь помещается большое количество сообщений. Когда это происходит, мне нужно больше одного модуля, чтобы очистить отставание. Я не смог понять, как привязать количество модулей к размеру очереди, чтобы HPA не увеличивалось больше, чем мне нужно, если в очередь помещается только 1 сообщение. Я хотел бы, чтобы он масштабировался как показано ниже, с жестким максимумом в 3 модуля.

      0 messages -> 0 pods
>=1 message -> 1 pod
>=10000 messages -> 2 pods
>=20000 messages -> 3 pods

Я попытался создать несколько определений HPA, но они закончились конфликтом и спорами о том, чьи "maxReplicas" использовать. Согласно спецификации SinglePod будет создан 1 модуль. Затем MultiPod создаст 2 новых и убьет один из SinglePod. Затем SinglePod откликнется и убьет 2 из MultiPod. Это продолжалось до тех пор, пока размер очереди не упал ниже порога MultiPod.

Характеристики SinglePod:

      apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
spec:
  maxReplicas: 1
  minReplicas: 0
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: jms-queue-processor
  metrics:
  - type: External
    external:
      metric:
        name: flux-query
        selector:
          matchLabels:
            query-name: process-queue-size
      target:
        type: Value
        value: "1"

Характеристики MultiPod:

      apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
spec:
  maxReplicas: 3
  minReplicas: 0
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: jms-queue-processor
  metrics:
  - type: External
    external:
      metric:
        name: flux-query
        selector:
          matchLabels:
            query-name: process-queue-size
      target:
        type: Value
        value: "10000"

Любые предложения о том, как это сделать? Спасибо Стив

0 ответов

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