kubernetes - 使用容器中应用程序公开的 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).
我尝试研究如何实现这一目标,但我无法弄清楚。我所能找到的只是使用 HorizontalPodAutoscaler(HPA) 的 CPU 使用率来扩展。获得有关如何使用Kubernetes HPA实现这一目标的指导会很有帮助。
解决方案
我相信您可以从自定义指标上的自动缩放文章开始。正如我所看到的 - 这可以通过将自定义指标与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 Horizontal 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
也可能以下内容对您未来的调查有所帮助:
希望能帮助到你
推荐阅读
- scala - Scala:从 Spark 结构化流中读取 Kafka Avro 消息时出错
- php - 当我将数据库数据从 laravel 6 中的控制器传递到视图时,视图中的未定义变量
- android - 如何在互联网上免费发布您的 android studio apk?
- matlab - 相当于octave gui的cwt(matlab)函数?
- javascript - JavaScript 生成的图到一个 div
- asp.net - 在 RabbitMq 的消息列表器中获取 queueName
- mysql - 类别的 Laravel 和 mysql 表名约定
- reactjs - 使用纯 erlang OTP 代替带有 React.js 和 phoenix 框架的 elixir 后端
- python - 将长度为 n 的列表转换为 nxn 数组
- flutter - 颤动单击选项卡隐藏在容器下