配置并发¶
并发决定了在任何给定时间,应用程序每个副本可以处理的并发请求数量。
对于每个修订版本并发,您必须为 软限制 配置 autoscaling.knative.dev/metric
和 autoscaling.knative.dev/target
,或为 硬限制 配置 containerConcurrency
。
对于全局并发,您可以设置 container-concurrency-target-default
值。
软与硬并发限制¶
可以设置软或硬并发限制。
注意
如果同时指定了软限制和硬限制,则将使用较小的值。这可以防止自动扩展器具有硬限制值不允许的目标值。
软限制是目标限制,而不是严格强制的边界。在某些情况下,特别是如果突然出现大量请求,则可能超过此值。
硬限制是强制执行的上限。如果并发达到硬限制,剩余的请求将被缓冲,并且必须等到有足够的可用容量才能执行这些请求。
警告
仅当您的应用程序有明确的用例时,才建议使用硬限制配置。指定较低的硬限制可能会对应用程序的吞吐量和延迟产生负面影响,并且可能会导致额外的冷启动。
软限制¶
- 全局键:
container-concurrency-target-default
- 每个修订版本注释键:
autoscaling.knative.dev/target
- 可能的值:整数。
- 默认值:
"100"
示例
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: helloworld-go
namespace: default
spec:
template:
metadata:
annotations:
autoscaling.knative.dev/target: "200"
apiVersion: v1
kind: ConfigMap
metadata:
name: config-autoscaler
namespace: knative-serving
data:
container-concurrency-target-default: "200"
apiVersion: operator.knative.dev/v1alpha1
kind: KnativeServing
metadata:
name: knative-serving
spec:
config:
autoscaler:
container-concurrency-target-default: "200"
硬限制¶
硬限制是在修订版本规范上使用 containerConcurrency
字段每个修订版本指定的。此设置不是注释。
在自动扩展 ConfigMap 中没有全局设置硬限制,因为 containerConcurrency
对自动扩展之外的事情有影响,例如对请求的缓冲和排队。但是,可以在 config-defaults.yaml
中为修订版本的 containerConcurrency
字段设置默认值。
默认值为 0
,表示对允许流入修订版本的请求数量没有限制。大于 0
的值指定允许同时流入副本的请求的精确数量。
- 全局键:
container-concurrency
(在config-defaults.yaml
中) - 每个修订版本规范键:
containerConcurrency
- 可能的值:整数
- 默认值:
0
,表示无限制
示例
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: helloworld-go
namespace: default
spec:
template:
spec:
containerConcurrency: 50
apiVersion: v1
kind: ConfigMap
metadata:
name: config-defaults
namespace: knative-serving
data:
container-concurrency: "50"
apiVersion: operator.knative.dev/v1alpha1
kind: KnativeServing
metadata:
name: knative-serving
spec:
config:
defaults:
container-concurrency: "50"
目标利用率¶
除了之前解释的文字设置之外,并发值还可以通过使用目标利用率值来进一步调整。
此值指定自动扩展器应该实际针对先前指定目标的百分比。这也被称为指定副本运行的热度,这会导致自动扩展器在达到定义的硬限制之前进行扩展。
例如,如果 containerConcurrency
设置为 10,目标利用率值设置为 70(百分比),则当所有现有副本的平均并发请求数达到 7 时,自动扩展器将创建新的副本。第 7 到第 10 个请求仍将发送到现有副本,但这允许在预计需要时启动其他副本,以防达到 containerConcurrency
限制。
- 全局键:
container-concurrency-target-percentage
- 每个修订版本注释键:
autoscaling.knative.dev/target-utilization-percentage
- 可能的值:浮点数
- 默认值:
70
示例
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: helloworld-go
namespace: default
spec:
template:
metadata:
annotations:
autoscaling.knative.dev/target-utilization-percentage: "80"
spec:
containers:
- image: ghcr.io/knative/helloworld-go:latest
apiVersion: v1
kind: ConfigMap
metadata:
name: config-autoscaler
namespace: knative-serving
data:
container-concurrency-target-percentage: "80"
apiVersion: operator.knative.dev/v1alpha1
kind: KnativeServing
metadata:
name: knative-serving
spec:
config:
autoscaler:
container-concurrency-target-percentage: "80"