0

在我们的 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"

关于如何做到这一点的任何建议?谢谢,史蒂夫

4

0 回答 0