9.2. 配置 Knative Serving 自动扩展
OpenShift Serverless 通过在 OpenShift Container Platform 集群中启用 Knative Serving 自动扩展系统来提供 Pod 自动扩展功能,包括将不活跃 Pod 缩减为零。要针对 Knative Serving 启用自动扩展,您必须在修订模板中配置并发和扩展范围。
修订模板中设置的任何限值或目标均是针对应用程序的单个实例测得。例如:将 target
注解设置为 50
将对扩展应用程序的自动扩展器进行配置,使每个实例每次将可处理 50 个请求。
9.2.1. 为 Knative Serving 自动扩展配置并发请求
通过在修订模板中添加 target
注解或 containerConcurrency
字段,可指定应用程序(修订容器)的每个实例应处理的并发请求数。
以下是修订模板中使用的 target
示例:
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: myapp spec: template: metadata: annotations: autoscaling.knative.dev/target: 50 spec: containers: - image: myimage
以下是修订模板中使用的 containerConcurrency
示例:
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: myapp spec: template: metadata: annotations: spec: containerConcurrency: 100 containers: - image: myimage
为 target
和 containerConcurrency
添加值将以并发请求的 target
数为目标,但对请求的 containerConcurrency
数施加一个硬性限制。例如,如果将 target
值设定为 50,将 containerConcurrency
值设定为 100,则目标请求数将为 50,硬性限制数为 100。
如果 containerConcurrency
值小于 target
值,则 target
值将会降级,因为不需要将目标设定为超过实际处理量的请求数。
只有在明确需要限制给定时间到达应用程序的请求数时才应使用 containerConcurrency
。只有在应用程序需要强制限制并发时才建议使用 containerConcurrency
。
9.2.1.1. 使用目标注解配置并发请求
并发请求数的默认目标值为 100
,但您可通过在修订模板中添加或修改 autoscaling.knative.dev/target
注解值来覆盖该值。
下面是如何在修订模板中使用该注解将目标设置为 50
的示例。
autoscaling.knative.dev/target: 50
9.2.1.2. 使用 containerConcurrency
字段配置并发请求
containerConcurrency
字段可对处理的并发请求数设置硬性限制。
containerConcurrency: 0 | 1 | 2-N
- 0
- 并发请求数不限。
- 1
- 保证修订容器的给定实例一次只处理一个请求。
- 2 或以上
- 将并发请求数限制为该值。
如果无 target
注解,则自动扩展会被配置为 target
值与 containerConcurrency
值相等。
9.2.2. 配置扩展范围 Knative Serving 自动扩展
minScale
和 maxScale
注解可用于配置可服务于应用程序的最小和最大 pod 数。这些注解可用于防止冷启动或辅助控制计算成本。
- minScale
-
如果没有设置
minScale
注解,pod 会被缩减到 0,或如果ConfigMap
中的enable-scale-to-zero
为false
,则会缩减为 1。 - maxScale
-
如果没有设置
maxScale
注解,则可创建的 pod 数没有上限。
minScale
和 maxScale
可在修订模板中配置如下:
spec: template: metadata: annotations: autoscaling.knative.dev/minScale: "2" autoscaling.knative.dev/maxScale: "10"
在修订模板中使用这些注解会将此配置传播到 PodAutoscaler
对象。
这些注解适用于修订版本的整个生命周期。即使修订版本未被任何路由引用,仍然会提供由 minScale
指定的最小 pod 计数。请记住,不可路由的修订版本可能会收集到回收箱,以便 Knative 回收资源。