0

我有:

  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 指标(指标:-类型:Pods pods:),因为它会为服务 A 的 pod 请求 m1 指标(显然没有这个)

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

  2. 外部指标也是如此

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

4

1 回答 1

1

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

Horizo ​​ntal Pod Autoscaler是一项 Kubernetes 功能,允许基于一个或多个监控指标来扩展应用程序。
我们可以在Horizo​​ntal Pod Autoscaler 文档中找到:

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

我们可以在 Horizo​​ntal Pod Autoscaler 中使用三组指标

  • 资源指标:Pod 和节点的预定义资源使用指标(CPU 和内存)。
  • 自定义指标:与 Kubernetes 对象关联的自定义指标。
  • 外部指标:与 Kubernetes 对象无关的自定义指标。

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

custom metrics和之间有一个主要区别external metrics(请参阅:自动缩放工作负载的自定义和外部指标):

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

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

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

于 2021-04-27T08:24:56.197 回答