在我们的 Kubernetes 集群中,我有一个配置了外部指标的 HPA 来监控队列大小。此外,我启用了 HPAScaleToZero 门,因此如果队列上没有消息,则不会运行任何 pod。大多数情况下,这可以正常工作,但偶尔会有大量消息被推送到队列中。发生这种情况时,我需要 1 个以上的 pod 来清除积压。如果仅将 1 条消息推送到队列中,我无法弄清楚如何将 pod 的数量固定到队列的大小,而 HPA 不会超出我的需要。我希望它可以像下面这样扩展,最多 3 个 pod。
0 messages -> 0 pods
>=1 message -> 1 pod
>=10000 messages -> 2 pods
>=20000 messages -> 3 pods
我尝试创建多个 HPA 定义,但它们最终发生冲突并为使用谁的“maxReplicas”而争论不休。SinglePod 规范将创建 1 个 pod。然后 MultiPod 将创建 2 个新的并从 SinglePod 中删除一个。然后 SinglePod 会反击并从 MultiPod 中杀死 2。这样反复进行,直到队列大小低于 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"
关于如何做到这一点的任何建议?谢谢,史蒂夫