首页 > 解决方案 > 使用容器中应用程序公开的 REST API 进行水平 Pod 自动缩放

问题描述

在 Windows 上使用 minikube,只有一个节点“master”。

部署的 Spring Boot 应用程序具有 REST 端点,它提供了当前服务的客户端数量。当请求达到某个限制时,我想水平扩展或自动旋转 pod。

Lets say:
There is 1 pod in the cluster.
If the request limit reached 50 (for Pod 1), spin up a new pod.
If the request limit reached 50 for Pod 1 and Pod 2, spin up a new Pod (Pod 3).

我尝试研究如何实现这一目标,但我无法弄清楚。我所能找到的只是使用 Horizo​​ntalPodAutoscaler(HPA) 的 CPU 使用率来扩展。获得有关如何使用Kubernetes HPA实现这一目标的指导会很有帮助。

标签: kubernetesautoscalingminikubekubernetes-pod

解决方案


我相信您可以从自定义指标上的自动缩放文章开始。正如我所看到的 - 这可以通过将自定义指标与Prometheus Adapter for Kubernetes Metrics API结合使用来实现(使用 Prometheus 的 custom.metrics.k8s.io API 的实现)。

Prometheus Adapter for Kubernetes Metrics APIs 存储库包含 Kubernetes资源指标API 和自定义指标API 的实现。

因此,此适配器适用于 Kubernetes 1.6+ 中的 autoscaling/v2 Horizo​​ntal Pod Autoscaler。

来自自定义指标自动缩放的信息:

请注意,您可以指定除 CPU 之外的其他资源指标。默认情况下,唯一支持的其他资源指标是内存。这些资源不会在集群之间更改名称,并且应该始终可用,只要 metrics.k8s.io API 可用。

这些替代指标类型中的第一个是 pod 指标。这些指标描述了 Pod,并在 Pod 之间进行平均,并与目标值进行比较以确定副本数。它们的工作方式与资源指标非常相似,只是它们仅支持目标类型 AverageValue。

Pod 指标是使用这样的指标块指定的:

type: Pods
pods:
  metric:
    name: packets-per-second
  target:
    type: AverageValue
    averageValue: 1k

第二种替代度量类型是对象度量。这些指标描述了同一命名空间中的不同对象,而不是描述 pod。指标不一定是从对象中获取的;他们只描述它。对象度量支持 Value 和 AverageValue 的目标类型。使用 Value,目标直接与 API 返回的指标进行比较。使用 AverageValue,从自定义指标 API 返回的值在与目标进行比较之前除以 pod 的数量。以下示例是每秒请求数指标的 YAML 表示形式。

type: Object
object:
  metric:
    name: requests-per-second
  describedObject:
    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress
    name: main-route
  target:
    type: Value
    value: 2k

也可能以下内容对您未来的调查有所帮助:

自动缩放更具体的指标

自动缩放与 Kubernetes 对象无关的指标

希望能帮助到你


推荐阅读