Serverless平台knative第六章基于流量请求数实现服务自动扩缩容
  EeGZtZT5Jsfk 2023年11月02日 48 0

全局配置参数定义在knative-serving名称空间中的configmap/auto-scaler之中

相关的参数

◼ container-concurrency-target-default:实例的目标并发数,即最大并发数,默认值为100;

◼ container-concurrency-target-percentage:实例的目标利用率,默认为“0.7” ;

◼ enable-scale-to-zero:是否支持缩容至0,默认为true;仅KPA支持;

◼ max-scale-up-rate:最大扩容速率,默认为1000;

◆当前可最大扩容数 = 最大扩容速率 * Ready状态的Pod数量

◼ max-scale-down-rate:最大缩容速率,默认为2;

◆当前可最大缩容数 = Ready状态的Pod数量 / 最大缩容速率

◼ panic-window-percentage:Panic窗口期时长相当于Stable窗口期时长的百分比,默认为10,即百分之十;

◼ panic-threshold-percentage:因Pod数量偏差而触发Panic阈值百分比,默认为200,即2倍;

◼ scale-to-zero-grace-period:缩容至0的宽限期,即等待最后一个Pod删除的最大时长,默认为30s;

◼ scale-to-zero-pod-retention-period:决定缩容至0后,允许最后一个Pod处于活动状态的最小时长,默认为0s;

◼ stable-window:稳定窗口期的时长,默认为60s;

◼ target-burst-capacity:突发请求容量,默认为200;

◼ requests-per-second-target-default:每秒并发(RPS)的默认值,默认为200;使用rps指标时生效;


单实例参数配置

Revision级别配置时,使用注解键“autoscaling.knative.dev/scale-to-zero-pod-retention-period”

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: hello
  namespace: default
spec:
  template:
    metadata:
  annotations:
    autoscaling.knative.dev/scale-to-zero-pod-retention-period: "1m5s"
  spec:
    containers:
      - image: ikubernetes/helloworld-go
        ports:
          - containerPort: 8080
        env:
          - name: TARGET
            value: "Knative Autoscaling Scale-to-Zero"

相关的配置参数

软限制:流量突发尖峰期允许超出

全局默认配置参数:container-concurrency-target-default

Revision级的注解:autoscaling.knative.dev/target

硬限制:不允许超出,达到上限的请求需进行缓冲

全局默认配置参数:container-concurrency

位于config-defaults中

Revision级的注解:containerConcurrency

Target目标利用率

全局配置参数:container-concurrency-target-percentage

Revision级的注解:autoscaling.knative.dev/target-utilization-percentage

最小实例数

Revision级别的Annotation: autoscaling.knative.dev/min-scale

说明:KPA且支持缩容至0时,该参数的默认值为0;其它情况下,默认值为1;

最大实例数

全局参数:max-scale

Revision级别的Annotation: autoscaling.knative.dev/max-scale

整数型取值,0表示无限制

初始规模:创建Revision,需要立即初始创建的实例数,满足该条件后Revision才能Ready,默认值为1;

全局参数:initial-scale和allow-zero-initial-scale

Revision级别的Annotation:autoscaling.knative.dev/initial-scale

说明:其实际规模依然可以根据流量进行自动调整

缩容延迟:时间窗口,在应用缩容决策前,该时间窗口内并发请求必须处于递减状态,取值范围[0s, 1h]

全局参数:scale-down-delay

Revision级别的Annotation:autoscaling.knative.dev/scale-down-delay

Stable窗口期:取值范围[6s, 1h]

全局参数:stable-window

Revision级别的Annotation: autoscaling.knative.dev/window

配置Revision的扩缩容边界

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: hello
  namespace: default
spec:
  template:
    metadata:
      annotations:
        autoscaling.knative.dev/target-utilization-percentage: "60"
        autoscaling.knative.dev/target: "10"
        autoscaling.knative.dev/max-scale: "3"
        autoscaling.knative.dev/initial-scale: "1"
        autoscaling.knative.dev/scale-down-delay: "3m"
        autoscaling.knative.dev/stable-window: "30s"
      spec:
        containers:
          - image: ikubernetes/helloworld-go
            ports:
              - containerPort: 8080
            env:
              - name: TARGET
                value: "Knative Autoscaling Scale Bounds"

配置扩缩容的指标有两个

第一个是rps 

第二个是并发数

定义使用rps指标

Revision级别的Annotation:autoscaling.knative.dev/metric

取值为rps

为rps指标指定目标请求数

全局参数:requests-per-second-target-default

Revision级别的Annotation:autoscaling.knative.dev/target

整数取值,默认值为200

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: hello
  namespace: default
spec:
  template:
    metadata:
      annotations:
        autoscaling.knative.dev/target-utilization-percentage: "60"
        autoscaling.knative.dev/target: "100"
        autoscaling.knative.dev/metric: "rps"
        autoscaling.knative.dev/max-scale: "3"
        autoscaling.knative.dev/initial-scale: "1"
        autoscaling.knative.dev/scale-down-delay: "3m"
        autoscaling.knative.dev/stable-window: "30s"
      spec:
        containers:
          - image: ikubernetes/helloworld-go
            ports:
              - containerPort: 8080
            env:
              - name: TARGET
                value: "Knative Autoscaling Scale Bounds"

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

Serverless平台knative第六章基于流量请求数实现服务自动扩缩容_knative

演示:

并发数配置

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: autoscale-go
  namespace: default
spec:
  template:
    metadata:
      labels:
        app: autoscale-go
    spec:
      containerConcurrency: 10  # 单个pod允许的最大并发数,超过将扩容
      containers:
        - image: registry.cn-hangzhou.aliyuncs.com/knative-sample/autoscale-go:0.1

Serverless平台knative第六章基于流量请求数实现服务自动扩缩容_knative_02


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论