配置规模界限¶
您可以配置上限和下限以控制自动缩放行为。
您还可以指定创建后修订版本立即缩放到的初始规模。这可以是所有修订版本的默认配置,也可以是使用批注为特定修订版本配置。
下限¶
此值控制每个修订版本应具有的最小副本数。Knative 将尝试在任何时间点都绝不低于此副本数。
- 全局密钥:
min-scale
- 每个修订版本批注密钥:
autoscaling.knative.dev/min-scale
- 可能的值:整数
- 默认值:如果启用了 scale-to-zero 且使用的是 class KPA,则为
0
,否则为1
注意
有关 scale-to-zero 配置的更多信息,请参阅有关配置 scale-to-zero的文档。
示例
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: helloworld-go
namespace: default
spec:
template:
metadata:
annotations:
autoscaling.knative.dev/min-scale: "3"
spec:
containers:
- image: ghcr.io/knative/helloworld-go:latest
apiVersion: v1
kind: ConfigMap
metadata:
name: config-autoscaler
namespace: knative-serving
data:
min-scale: "3"
apiVersion: operator.knative.dev/v1alpha1
kind: KnativeServing
metadata:
name: knative-serving
spec:
config:
autoscaler:
min-scale: "3"
上限¶
此值控制每个修订版本应具有的最大副本数。Knative 将尝试在任何时间点都绝不超过此副本数,也不超过正在创建过程中的副本数。
如果设置了max-scale-limit
全局密钥,Knative 会确保新的修订版本的全局最大规模或每个修订版本的最大规模不会超过此值。当max-scale-limit
设置为正值时,不允许具有高于该值的(包括 0,这意味着无限制)最大规模的修订版本。
- 全局密钥:
max-scale
- 每个修订版本批注密钥:
autoscaling.knative.dev/max-scale
- 可能的值:整数
- 默认值:
0
,这意味着无限制
示例
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: helloworld-go
namespace: default
spec:
template:
metadata:
annotations:
autoscaling.knative.dev/max-scale: "3"
spec:
containers:
- image: ghcr.io/knative/helloworld-go:latest
apiVersion: v1
kind: ConfigMap
metadata:
name: config-autoscaler
namespace: knative-serving
data:
max-scale: "3"
max-scale-limit: "100"
apiVersion: operator.knative.dev/v1alpha1
kind: KnativeServing
metadata:
name: knative-serving
spec:
config:
autoscaler:
max-scale: "3"
max-scale-limit: "100"
初始规模¶
此值控制修订版本在创建后立即必须达到的初始目标规模,然后才会标记为Ready
。修订版本达到此规模一次后,此值将被忽略。这意味着如果接收到的实际流量只需要更小的规模,则修订版本将在达到初始目标规模后缩减。
创建修订版本时,会自动选择初始规模和下限中的较大者作为初始目标规模。
- 全局密钥:
initial-scale
与allow-zero-initial-scale
结合使用 - 每个修订版本批注密钥:
autoscaling.knative.dev/initial-scale
- 可能的值:整数
- 默认值:
1
示例
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: helloworld-go
namespace: default
spec:
template:
metadata:
annotations:
autoscaling.knative.dev/initial-scale: "0"
spec:
containers:
- image: ghcr.io/knative/helloworld-go:latest
apiVersion: v1
kind: ConfigMap
metadata:
name: config-autoscaler
namespace: knative-serving
data:
initial-scale: "0"
allow-zero-initial-scale: "true"
apiVersion: operator.knative.dev/v1alpha1
kind: KnativeServing
metadata:
name: knative-serving
spec:
config:
autoscaler:
initial-scale: "0"
allow-zero-initial-scale: "true"
规模扩大最小值¶
此值控制修订版本从零扩展时将创建的最小副本数。修订版本达到此规模一次后,此值将被忽略。这意味着如果接收到的实际流量只需要更小的规模,则修订版本将在达到激活规模后缩减。
创建修订版本时,会自动选择激活规模和下限中的较大者作为初始目标规模。
- 全局密钥:n/a
- 每个修订版本批注密钥:
autoscaling.knative.dev/activation-scale
- 可能的值:整数
- 默认值:
1
示例
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: helloworld-go
namespace: default
spec:
template:
metadata:
annotations:
autoscaling.knative.dev/activation-scale: "5"
spec:
containers:
- image: ghcr.io/knative/helloworld-go:latest
规模缩减延迟¶
规模缩减延迟指定一个时间窗口,在该窗口内,必须在降低并发性后经过才能应用规模缩减决定。这可能很有用,例如,为了将容器保留一段时间以配置的持续时间,以避免在出现新请求时出现冷启动罚款。与设置下限不同,如果降低并发性在延迟时间内保持不变,则修订版本最终将缩减。
注意
仅支持默认 KPA 自动缩放程序类。
- 全局密钥:
scale-down-delay
- 每个修订版本批注密钥:
autoscaling.knative.dev/scale-down-delay
- 可能的值:持续时间,
0s
<= 值 <=1h
- 默认值:
0s
(无延迟)
示例
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: helloworld-go
namespace: default
spec:
template:
metadata:
annotations:
autoscaling.knative.dev/scale-down-delay: "15m"
spec:
containers:
- image: ghcr.io/knative/helloworld-go:latest
apiVersion: v1
kind: ConfigMap
metadata:
name: config-autoscaler
namespace: knative-serving
data:
scale-down-delay: "15m"
apiVersion: operator.knative.dev/v1alpha1
kind: KnativeServing
metadata:
name: knative-serving
spec:
config:
autoscaler:
scale-down-delay: "15m"
稳定窗口¶
稳定窗口定义了滑动时间窗口,在该窗口内对指标进行平均以提供自动缩放程序不在恐慌模式时的缩放决策输入。
- 全局密钥:
stable-window
- 每个修订版本批注密钥:
autoscaling.knative.dev/window
- 可能的值:持续时间,
6s
<= 值 <=1h
- 默认值:
60s
注意
在规模缩减期间,在大多数情况下,在修订版本在整个稳定窗口持续时间内没有流量后,最后一个副本会被删除。
示例
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: helloworld-go
namespace: default
spec:
template:
metadata:
annotations:
autoscaling.knative.dev/window: "40s"
spec:
containers:
- image: ghcr.io/knative/helloworld-go:latest
apiVersion: v1
kind: ConfigMap
metadata:
name: config-autoscaler
namespace: knative-serving
data:
stable-window: "40s"
apiVersion: operator.knative.dev/v1alpha1
kind: KnativeServing
metadata:
name: knative-serving
spec:
config:
autoscaler:
stable-window: "40s"