設定縮放界限¶
您可以設定上限和下限以控制自動縮放行為。
您也可以指定修訂版在建立後立即縮放到的初始規模。這可以是所有修訂版的預設設定,或是使用註釋針對特定修訂版的設定。
下限¶
此值控制每個修訂版應擁有的最小副本數。Knative 會嘗試在任何時間點都不要少於此數量的副本。
- 全域鍵:
min-scale
- 每個修訂版的註釋鍵:
autoscaling.knative.dev/min-scale
- 可能的值: 整數
- 預設值: 如果啟用縮放到零且使用 KPA 類別,則為
0
,否則為1
注意
有關縮放到零設定的詳細資訊,請參閱關於設定縮放到零的文件。
範例
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
。修訂版達到此規模一次後,此值會被忽略。這表示如果收到的實際流量只需要較小的規模,則修訂版會在達到初始目標規模後縮減。
建立修訂版時,會自動選擇初始規模和下限中較大的值作為初始目標規模。
- 全域鍵: 結合
allow-zero-initial-scale
的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"
向上擴展最小值¶
此值控制修訂版從零向上擴展時將建立的最小副本數。修訂版達到此規模一次後,此值會被忽略。這表示如果收到的實際流量需要較小的規模,則修訂版會在達到啟動規模後縮減。
建立修訂版時,會自動選擇啟動規模和下限中較大的值作為初始目標規模。
- 全域鍵: 不適用
- 每個修訂版的註釋鍵:
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"