【问题标题】:Kubernetes HPA using metrics from another deploymentKubernetes HPA 使用来自另一个部署的指标
【发布时间】:2020-09-27 10:51:48
【问题描述】:

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

我现在拥有的是 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

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

谢谢!

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

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])'
``

【问题讨论】:

    标签: kubernetes prometheus autoscaling


    【解决方案1】:

    kubernetes documentation你可以阅读:

    自动缩放与 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):

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

    也可以看看this Stack question

    【讨论】:

    • 从自定义指标更改为外部指标解决了我的问题,我还必须更改我的 prometheus-adapter 中的配置以更改指标类型。谢谢!!
    猜你喜欢
    • 1970-01-01
    • 2020-07-03
    • 2020-04-14
    • 1970-01-01
    • 1970-01-01
    • 2019-08-16
    • 1970-01-01
    • 1970-01-01
    • 2021-11-05
    相关资源
    最近更新 更多