问题描述
我有:
- 在 k8s 中部署服务 A 和 B
- 普罗米修斯堆栈
我想在服务 B 的指标 m1 更改时扩展服务 A。 我发现的或多或少不适合的解决方案:
- 我可以使用规范的以下部分为服务 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 指标(显然没有这个)
我觉得我错过了一些东西,因为这似乎不是一个不现实的案例:) 那么,请告诉我如何在 k8s 中通过另一个服务的度量来扩展一项服务?
解决方法
我决定提供一个社区 Wiki 答案,以帮助其他面临类似问题的人。
Horizontal Pod Autoscaler 是 Kubernetes 的一项功能,允许根据一个或多个受监控的指标扩展应用程序。
正如我们在 Horizontal Pod Autoscaler documentation 中所见:
Horizontal Pod Autoscaler 会根据观察到的 CPU 利用率(或者,通过自定义指标支持,根据其他一些应用程序提供的指标)自动扩展复制控制器、部署、副本集或有状态集中的 Pod 数量。
我们可以将 three groups of metrics 与 Horizontal Pod Autoscaler 一起使用:
- resource metrics:预定义的资源使用指标(CPU 和 Pod 和节点的内存。
- custom metrics:与 Kubernetes 关联的自定义指标 对象。
- external metrics:自定义指标与 Kubernetes 对象。
任何 HPA 目标都可以根据缩放目标中 pods(或 containers)的资源使用情况进行缩放。 CPU 利用率指标是 resource metric
,您可以指定除 CPU 之外的其他资源指标(例如内存)。这似乎是最简单、最基本的扩展方法,但我们可以通过使用 custom metrics
或 external metrics
来使用更具体的指标。
custom metrics
和 external metrics
之间有一个主要区别(参见:Custom and external metrics for autoscaling workloads):
自定义指标和外部指标彼此不同:
从您在 Kubernetes 中运行的应用程序报告自定义指标。 外部指标来自未在您的集群上运行但其性能会影响您的 Kubernetes 应用程序的应用程序或服务。
总而言之,在我看来,在上述情况下使用 custom metrics
是可以的,
我没有找到任何其他合适的方法来完成这项任务。