Как установить 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"
Любые предложения о том, как это сделать? Спасибо Стив