kubernetes - 使用容器中的应用程序公开的REST API进行水平Pod自动缩放

标签 kubernetes autoscaling minikube kubernetes-pod

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

部署的spring boot应用程序具有REST端点,该端点提供了其当前服务的客户端数量。我希望水平扩展或在请求达到一定限制时自动旋转广告连播。

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 实现此目标的指南将很有帮助。

最佳答案

我相信您可以从autoscaling on custom metrics article开始。据我所知-这是可以通过将自定义指标与Prometheus Adapter for Kubernetes Metrics APIs(使用Prometheus实现的custom.metrics.k8s.io API)结合使用来实现的。

Prometheus Adapter for Kubernetes Metrics APIs repo包含Kubernetes的resource metrics API和custom metrics API的实现。

因此,此适配器适合与Kubernetes 1.6+中的autoscaling / v2 Horizo​​ntal Pod Autoscaler一起使用。

来自autoscaling on custom metrics的信息:

Notice that you can specify other resource metrics besides CPU. By default, the only other supported resource metric is memory. These resources do not change names from cluster to cluster, and should always be available, as long as the metrics.k8s.io API is available.



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

使用以下度量标准块来指定Pod度量标准:
type: Pods
pods:
  metric:
    name: packets-per-second
  target:
    type: AverageValue
    averageValue: 1k

第二种替代指标类型是对象指标。这些度量标准在同一 namespace 中描述了一个不同的对象,而不是描述了pod。度量不一定是从对象中获取的;他们只描述它。对象指标支持“值”和“平均值”的目标类型。使用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

另外,也许下面的内容对您将来的调查会有所帮助:

Autoscaling on more specific metrics

Autoscaling on metrics not related to Kubernetes objects

希望能帮助到你

关于kubernetes - 使用容器中的应用程序公开的REST API进行水平Pod自动缩放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57885026/

相关文章:

go - Kubernetes Helm Chart If 条件检查

google-bigquery - Google Cloud上的ETL-(数据流与 Spring 批处理)-> BigQuery

kubernetes - 如何从 Kubernetes 获取部署日志?

Azure Worker角色缩小位置

kubernetes - Minikube HOME 文件夹

docker - Kubernetes 服务连接被拒绝,如何访问服务?

kubernetes - jenkins中的503服务暂时不可用nginx/1.13.9 x

elasticsearch - Kubernetes 驱逐 API 不能完全考虑 Elasticsearch 集群的健康状况?

amazon-ec2 - 单个自动伸缩组的多个 ELB

amazon-web-services - AWS cloudwatch 自定义指标作为弹性 beantalk 自动缩放触发器