如何基于流量请求数实现服务自动扩缩容 您所在的位置:网站首页 websphere并发数设置 如何基于流量请求数实现服务自动扩缩容

如何基于流量请求数实现服务自动扩缩容

2023-10-12 00:46| 来源: 网络整理| 查看: 265

Knative中提供了开箱即用、基于流量请求的自动扩缩容KPA(Knative Pod Autoscaler)功能。本文介绍如何基于流量请求数实现服务自动扩缩容。

前提条件

已创建ACK托管集群或ACK Serverless集群,且集群版本为1.20及以上。具体操作,请参见已创建Kubernetes托管版集群、已创建ACK Serverless集群。

实现原理

Knative Serving会为每个Pod注入一个名为queue-proxy的QUEUE代理容器,该容器负责向Autoscaler报告业务容器的并发指标。Autoscaler接收到这些指标之后,会根据并发请求数及相应的算法,调整Deployment的Pod数量,从而实现自动扩缩容。

image算法

Knative Pod Autoscaler(KPA)基于每个Pod的平均请求数(或并发数)进行自动扩缩容,Knative默认使用基于并发数的自动弹性,每个Pod的最大并发数为100。此外,Knative还提供了目标使用率(target-utilization-percentage)的概念,用于指定自动扩缩容的目标使用率。

基于并发数弹性为例,Pod数计算方式如为:Pod数=并发请求总数/(Pod最大并发数*目标使用率)

例如,如果服务中Pod最大并发数设置为10,目标使用率设置为0.7,此时如果接收到了100个并发请求,则Autoscaler就会创建15个Pod(即100/(0.7*10)≈15)。

KPA基于每个Pod的平均请求数(或并发数)来进行自动扩缩容,并结合了Stable稳定模式和Panic恐慌模式两个概念,以实现精细化的弹性。

Stable稳定模式

在稳定模式中,KPA会在默认的稳定窗口期(默认为60秒)内计算Pod的平均并发数。根据这个平均并发数,KPA会调整Pod的数量,以保持稳定的负载水平。

Panic恐慌模式

在恐慌模式中,KPA会在恐慌窗口期(默认为6秒)内计算Pod的平均并发数。恐慌窗口期=稳定窗口期*panic-window-percentage(panic-window-percentage取值是0~1,默认是0.1)。当请求突然增加导致当前Pod的使用率超过恐慌窗口百分比时,KPA会快速增加Pod的数量以满足负载需求。

在KPA中,弹性生效的判断是基于恐慌模式下计算得出的Pod数量是否超过恐慌阈值(PanicThreshold)。恐慌阈值=panic-threshold-percentage/100,panic-threshold-percentage默认为200,即恐慌阈值默认为2。

综上所述,如果在恐慌模式下计算得出的Pod数量大于或等于当前Ready Pod数量的两倍,那么KPA将使用恐慌模式下计算得出的Pod数量进行弹性生效;否则,将使用稳定模式下计算得出的Pod数量。

KPA配置介绍config-autoscaler配置介绍

配置KPA,需要配置config-autoscaler,该参数默认已配置,以下为重点参数介绍。

执行以下命令,查看config-autoscaler。

kubectl -n knative-serving describe cm config-autoscaler

预期输出(config-autoscaler默认的ConfigMap):

apiVersion: v1 kind: ConfigMap metadata: name: config-autoscaler namespace: knative-serving data: # 默认Pod最大并发数,默认值为100。 container-concurrency-target-default: "100" # 并发数目标使用率。默认值为70,70实际表示0.7。 container-concurrency-target-percentage: "70" # 默认每秒请求数(RPS)。默认值为200。 requests-per-second-target-default: "200" # 突发请求容量参数主要是为了应对突发流量,以防止Pod业务容器被过载。当前默认值211。 # 它通过Activator作为请求缓冲区,通过这个参数的计算结果,来调节是否请求通过Activator组件。 # 当该值为0时,只有Pod缩容到0时,才切换到Activator。 # 当该值大于0并且container-concurrency-target-percentage设置为100时,请求总是会通过Activator。 # 当该值为-1,表示无限的请求突发容量。请求也总是会通过Activator。其他负值无效。 # 如果当前Ready Pod数*最大并发数-突发请求容量-恐慌模式计算出来的并发数


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有