apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: showcase
namespace: default
spec:
template:
metadata:
annotations:
autoscaling.knative.dev/target: "200"
并发性决定了应用程序每个副本在任何给定时间可以处理的并发请求数。并发性可以配置为软限制或硬限制
软限制是目标请求限制,而不是严格执行的边界。例如,如果出现突然的流量激增,则可能会超过软限制目标。
硬限制是严格执行的请求上限。如果并发性达到硬限制,则多余的请求将被缓冲,并且必须等到有足够的空闲容量才能执行这些请求。
仅当您的应用程序有明确的用例时,才建议使用硬限制配置。指定较低的硬限制可能会对应用程序的吞吐量和延迟产生负面影响,并可能导致冷启动。 |
添加软目标和硬限制意味着自动缩放器将并发请求数的目标设置为软目标,但对最大请求数施加硬限制。
如果硬限制值小于软限制值,则软限制值将被调低,因为没有必要将请求数的目标设置为实际可以处理的请求数。
软限制是目标请求限制,而不是严格执行的边界。例如,如果出现突然的流量激增,则可能会超过软限制目标。您可以通过在规范中设置autoscaling.knative.dev/target
批注,或使用带有正确标志的kn service
命令来为您的 Knative 服务指定软并发目标。
可选:在Service
自定义资源的规范中,为您的 Knative 服务设置autoscaling.knative.dev/target
批注
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: showcase
namespace: default
spec:
template:
metadata:
annotations:
autoscaling.knative.dev/target: "200"
可选:使用kn service
命令指定--concurrency-target
标志
$ kn service create <service_name> --image <image_uri> --concurrency-target <integer>
$ kn service create showcase --image quay.io/openshift-knative/showcase --concurrency-target 50
硬并发限制是严格执行的请求上限。如果并发性达到硬限制,则多余的请求将被缓冲,并且必须等到有足够的空闲容量才能执行这些请求。您可以通过修改containerConcurrency
规范,或使用带有正确标志的kn service
命令来为您的 Knative 服务指定硬并发限制。
可选:在Service
自定义资源的规范中,为您的 Knative 服务设置containerConcurrency
规范
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: showcase
namespace: default
spec:
template:
spec:
containerConcurrency: 50
默认值为0
,这意味着一次允许流入服务一个副本的并发请求数没有限制。
大于0
的值指定一次允许流入服务一个副本的请求的确切数量。此示例将启用 50 个请求的硬并发限制。
可选:使用kn service
命令指定--concurrency-limit
标志
$ kn service create <service_name> --image <image_uri> --concurrency-limit <integer>
$ kn service create showcase --image quay.io/openshift-knative/showcase --concurrency-limit 50
此值指定自动缩放器实际目标的并发限制的百分比。这也被称为指定副本运行的热度,这使自动缩放器能够在达到定义的硬限制之前进行扩展。
例如,如果containerConcurrency
值设置为 10,而target-utilization-percentage
值设置为 70%,则当所有现有副本的平均并发请求数达到 7 时,自动缩放器将创建新的副本。编号为 7 到 10 的请求仍然发送到现有副本,但会启动其他副本以预期在达到containerConcurrency
值后需要这些副本。
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: showcase
namespace: default
spec:
template:
metadata:
annotations:
autoscaling.knative.dev/target-utilization-percentage: "70"
...