5.2. 自动缩放
Knative Serving 为应用程序提供自动扩展功能(或 autoscaling),以满足传入的需求。例如,如果应用程序没有流量,并且启用了缩减到零,Knative Serving 将应用程序缩减为零个副本。如果缩减到零,则应用程序会缩减到为集群中的应用程序配置的最小副本数。如果应用流量增加,也可以向上扩展副本来满足需求。
Knative 服务的自动扩展设置可以是由集群管理员配置的全局设置,或为单个服务配置每个修订设置。您可以使用 OpenShift Container Platform Web 控制台修改服务的每个修订设置,方法是修改服务的 YAML 文件,或使用 Knative (kn
) CLI 修改服务。
您为服务设置的任何限制或目标均是针对应用程序的单个实例来衡量。例如,将 target
注解设置为 50
可将自动扩展器配置为缩放应用程序,以便每个修订一次处理 50 个请求。
5.2.1. 扩展范围
缩放范围决定了可在任意给定时间为应用程序服务的最小和最大副本数。您可以为应用设置规模绑定,以帮助防止冷启动和控制计算成本。
5.2.1.1. 最小扩展范围
为应用程序提供服务的最小副本数量由 min-scale
注解决定。如果没有启用缩减为零,则 min-scale
值默认为 1
。
如果满足以下条件,min-scale
值默认为 0
个副本:
-
不设置
min-scale
注解 - 启用扩展到零
-
使用类
KPA
带有 min-scale
注解的 service spec 示例
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: example-service namespace: default spec: template: metadata: annotations: autoscaling.knative.dev/min-scale: "0" ...
5.2.1.1.1. 使用 Knative CLI 设置 min-scale 注解
使用 Knative(kn
)CLI 设置 min-scale
注解,比直接修改 YAML 文件提供了一个更加精简且直观的用户界面。您可以使用带有 --scale-min
标志的 kn service
命令为服务创建或修改 min-scale
值。
先决条件
- 在集群中安装了 Knative Serving。
-
已安装 Knative(
kn
)CLI。
流程
使用
--scale-min
标志设置服务的最小副本数:$ kn service create <service_name> --image <image_uri> --scale-min <integer>
示例命令
$ kn service create example-service --image quay.io/openshift-knative/knative-eventing-sources-event-display:latest --scale-min 2
5.2.1.2. 最大扩展范围
可提供应用程序的副本数量由 max-scale
注解决定。如果没有设置 max-scale
注解,则创建的副本数没有上限。
带有 max-scale
注解的 service spec 示例
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: example-service namespace: default spec: template: metadata: annotations: autoscaling.knative.dev/max-scale: "10" ...
5.2.1.2.1. 使用 Knative CLI 设置 max-scale 注解
使用 Knative(kn
)CLI 设置 max-scale
注解,比直接修改 YAML 文件提供了一个更精简且直观的用户界面。您可以使用带有 --scale-max
标志的 kn service
命令为服务创建或修改 max-scale
值。
先决条件
- 在集群中安装了 Knative Serving。
-
已安装 Knative(
kn
)CLI。
流程
使用
--scale-max
标志设置服务的最大副本数:$ kn service create <service_name> --image <image_uri> --scale-max <integer>
示例命令
$ kn service create example-service --image quay.io/openshift-knative/knative-eventing-sources-event-display:latest --scale-max 10