使用来自另一个部署的指标的 Kubernetes HPA

2023-12-29

我目前正在尝试使用普罗米修斯和普罗米修斯适配器运行自动缩放演示,我想知道是否有一种方法可以根据普罗米修斯从另一个部署中抓取的指标来自动缩放我的一个部署。

我现在拥有的是 2 个不同的部署,kafka-consumer-application(我想要扩展)和 kafka-exporter(它公开了我将用于扩展的 kafka 指标)。我知道,如果我将它们都作为同一部署中的容器,则自动缩放可以工作,但问题是 kafka-exporter 也会自动缩放,而且它并不理想,所以我想将它们分开。我尝试使用以下 HPA,但无法使其工作:

kind: HorizontalPodAutoscaler
apiVersion: autoscaling/v2beta1
metadata:
  name: consumer-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: kafka-consumer-application
  minReplicas: 1
  maxReplicas: 10
  metrics:
  - type: object
    object:
      target: kafka-exporter
      metricName: "kafka_consumergroup_lag"
      targetValue: 5

我不确定我是否做错了什么,或者这不是我能做的事情,所以任何建议都是值得赞赏的。

Thanks!

注意:我使用以下配置运行适配器:

rules:
  default: false
  resource: {}
  custom:
    - seriesQuery: 'kafka_consumergroup_lag'
      resources:
        overrides:
          kubernetes_namespace: {resource: "namespace"}
          kubernetes_pod_name: {resource: "pod"}
      name:
       matches: "kafka_consumergroup_lag"
       as: "kafka_consumergroup_lag"
      metricsQuery: 'avg_over_time(kafka_consumergroup_lag{topic="my-topic",consumergroup="we-consume"}[1m])'
``

In Kubernetes 文档 https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/#autoscaling-on-metrics-not-related-to-kubernetes-objects你可以阅读:

自动缩放与 Kubernetes 对象无关的指标 在 Kubernetes 上运行的应用程序可能需要根据与 Kubernetes 集群中的任何对象没有明显关系的指标进行自动缩放,例如描述与 Kubernetes 命名空间没有直接关联的托管服务的指标。在 Kubernetes 1.10 及更高版本中,您可以使用以下方法解决此用例外部指标

因此,使用外部指标,您的 HPA yaml 可能如下所示:

kind: HorizontalPodAutoscaler
apiVersion: autoscaling/v2beta2
metadata:
  name: consumer-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: kafka-consumer-application
  minReplicas: 1
  maxReplicas: 10
  metrics:
  - type: External
    external:
      metric:
        name: kafka_consumergroup_lag
        #selector:
        #  matchLabels:
        #    topic: "my-topic"
      target:
        type: AverageValue
        averageValue: 5

如果您有多个 kafka-exporter,您可以使用selector来过滤它(source https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#metricidentifier-v2beta2-autoscaling):

选择器是给定指标的标准 kubernetes 标签选择器的字符串编码形式。设置后,它会作为附加参数传递给指标服务器,以获得更具体的指标范围。未设置时,仅使用 metricName 来收集指标

还可以看看这个堆栈问题 https://stackoverflow.com/questions/60990200/horizontal-pod-autoscaling-without-custom-metrics.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用来自另一个部署的指标的 Kubernetes HPA 的相关文章

随机推荐