Kubernetes:将HPA与其他POD的指标结合使用

Kubernetes:将HPA与其他POD的指标结合使用,kubernetes,prometheus,hpa,Kubernetes,Prometheus,Hpa,我有: k8s中服务A和B的部署 普罗米修斯栈 当服务B的度量m1改变时,我想缩放服务A。 我发现的或多或少不适合的解决方案: 我可以使用规范的以下部分定义服务A的HPA: 从技术上讲,这是可行的。但它不适合k8s的动态特性。 另外,我不能在HPA中使用pods度量(metrics:-type:pods-pods:),因为它将为服务A的pods请求m1度量(显然没有这个) 在prometheus适配器中定义自定义度量,该适配器从服务B的POD查询m1度量。这更合适,但看起来像是解决方法,因为我已

我有:

  • k8s中服务A和B的部署
  • 普罗米修斯栈
  • 当服务B的度量m1改变时,我想缩放服务A。 我发现的或多或少不适合的解决方案:

  • 我可以使用规范的以下部分定义服务A的HPA:
  • 从技术上讲,这是可行的。但它不适合k8s的动态特性。 另外,我不能在HPA中使用pods度量(metrics:-type:pods-pods:),因为它将为服务A的pods请求m1度量(显然没有这个)

  • 在prometheus适配器中定义自定义度量,该适配器从服务B的POD查询m1度量。这更合适,但看起来像是解决方法,因为我已经有了度量m1

  • 外部指标也是如此

  • 我觉得我错过了一些东西,因为这似乎不是一个不现实的案例:)
    因此,请告诉我如何通过k8s中的另一项服务来衡量一项服务?

    我决定提供一个社区Wiki答案,以帮助其他面临类似问题的人

    是一种Kubernetes功能,允许基于一个或多个监控指标扩展应用程序。
    正如我们可以在以下文件中找到的:

    水平Pod Autoscaler根据观察到的CPU利用率(或者,在支持自定义指标的情况下,在某些其他应用程序提供的指标上),自动缩放复制控制器、部署、副本集或有状态集中的Pod数量

    我们可以使用水平吊舱自动缩放仪:

    • :预定义的资源使用指标(CPU和 吊舱和节点的内存)
    • :与Kubernetes关联的自定义度量 反对
    • :自定义度量值不与 库伯内特斯物体
    可以根据缩放目标中(或)的资源使用情况缩放任何HPA目标。CPU利用率指标是一个
    资源指标
    ,您可以指定CPU以外的其他资源指标(例如内存)。这似乎是最简单和最基本的缩放方法,但我们可以通过使用
    自定义度量
    外部度量
    来使用更具体的度量

    自定义指标
    外部指标
    之间有一个主要区别(请参见:):

    自定义指标和外部指标彼此不同:

    在Kubernetes中运行的应用程序会报告一个自定义度量。 外部度量是从未在集群上运行但其性能会影响Kubernetes应用程序的应用程序或服务报告的

    总而言之,在我看来,在上述情况下使用
    自定义指标是可以的,
    
    我没有找到任何其他合适的方法来完成这项任务。

    为什么不使用
    外部度量值
    ?这似乎是一个正确的方法,请看:。@matt_j,是的,你是对的,在我的情况下,外部指标和自定义指标一样有效(实际上比自定义指标更好)。但我的两项服务都在k8s中。根据定义,外部指标适用于k8s之外的对象。对我来说,这看起来更像是一个解决办法。对于使用它们,我需要定义它们。这是一个附加过程,在prometheus适配器中似乎没有动态规则更新方式。在普罗米修斯适配器更新期间,规则中的某些错误可能会导致k8s中的其他应用程序出现问题。在这种情况下,您是否可以将HPA的建议配置与自定义指标(来自其他服务的指标)共享?我对一个协会感兴趣。因为有了自定义指标,就需要使用Pod类型。因此,它将请求带有pod选择器的系列
      - type: Object
          object:
            metric:
              name: m1
            describedObject:
              apiVersion: api/v1
              kind: Pod
              name: certain-pod-of-service-B
            current:
              value: 10k