【问题标题】:Kubernetes: using HPA with metrics from other podsKubernetes:将 HPA 与来自其他 pod 的指标结合使用
【发布时间】:2021-04-14 15:55:10
【问题描述】:

我有:

  1. 在 k8s 中部署服务 A 和 B
  2. 普罗米修斯堆栈

我想在服务 B 的度量 m1 更改时扩展服务 A。 我发现但或多或少不适合的解决方案:

  1. 我可以使用规范的以下部分为服务 A 定义 HPA:
  - type: Object
      object:
        metric:
          name: m1
        describedObject:
          apiVersion: api/v1
          kind: Pod
          name: certain-pod-of-service-B
        current:
          value: 10k

从技术上讲,它会起作用。但它不适合 k8s 的动态特性。 我也不能在 HPA 中使用 pods metric(metrics: - type: Pods pods:) 因为它会为服务 A 的 pod 请求 m1 metric(显然没有这个)

  1. 在 prometheus-adapter 中定义自定义指标,从服务 B 的 pod 中查询 m1 指标。它更合适,但看起来像解决方法,因为我已经有指标 m1

  2. 外部指标也是如此

我觉得我错过了什么,因为它看起来不像是一个不现实的案例 :) 那么,请告诉我如何在 k8s 中按另一项服务的度量来扩展一项服务?

【问题讨论】:

  • 你为什么不想使用external metrics ?这似乎是一种正确的方法,请参阅:Kubernetes HPA using metrics from another deployment.
  • @matt_j,是的,你是对的,在我的情况下,外部指标以及自定义指标(实际上比自定义指标更好)都有效。但是我的两个服务都在 k8s 中。根据定义,外部指标适用于 k8s 之外的对象。至于我,它看起来更像是一种解决方法。为了使用它们——我需要定义它们。这是一个额外的过程,看起来 prometheus 适配器中没有动态规则更新方式。在 prometheus-adapter 更新过程中,一些规则错误可能会导致 k8s 中的其他应用出现问题。

标签: kubernetes prometheus hpa


【解决方案1】:

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

Horizontal Pod Autoscaler 是一项 Kubernetes 功能,允许根据一个或多个监控指标扩展应用程序。
我们可以在Horizontal Pod Autoscaler documentation 中找到:

Horizo​​ntal Pod Autoscaler 会根据观察到的 CPU 利用率(或者,通过自定义指标支持,根据其他一些应用程序提供的指标)自动扩展复制控制器、部署、副本集或有状态集中的 Pod 数量。

我们可以将three groups of metrics 与 Horizo​​ntal Pod Autoscaler 一起使用:

任何 HPA 目标都可以根据缩放目标中pods(或containers)的资源使用情况进行缩放。 CPU 利用率指标是resource metric,您可以指定除 CPU 之外的其他资源指标(例如内存)。这似乎是最简单、最基本的扩展方法,但我们可以通过使用custom metricsexternal metrics 来使用更具体的指标。

custom metricsexternal metrics 之间有一个主要区别(请参阅:Custom and external metrics for autoscaling workloads):

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

您在 Kubernetes 中运行的应用会报告自定义指标。 来自未在您的集群上运行但其性能会影响您的 Kubernetes 应用程序的应用程序或服务报告的外部指标。

总而言之,我认为在上述情况下使用custom metrics 是可以的, 我没有找到任何其他合适的方法来完成这项任务。

【讨论】:

  • 在这种情况下,您能否分享带有自定义指标的 HPA 建议配置(来自其他服务的指标)?我对一个协会感兴趣。由于自定义指标需要使用 Pod 类型。因此,它将请求带有 pod 选择器的系列
猜你喜欢
  • 1970-01-01
  • 2020-09-27
  • 2021-11-05
  • 1970-01-01
  • 2020-04-16
  • 2020-07-03
  • 2021-01-26
  • 1970-01-01
  • 2018-09-02
相关资源
最近更新 更多