設定並行¶
並行決定了應用程式的每個副本在任何給定時間可以處理的同時請求數。
對於每個修訂版本的並行,您必須為軟限制設定 autoscaling.knative.dev/metric
和 autoscaling.knative.dev/target
,或為硬限制設定 containerConcurrency
。
對於全域並行,您可以設定 container-concurrency-target-default
值。
軟限制與硬限制的並行限制¶
可以設定軟限制或硬限制。
注意
如果同時指定了軟限制和硬限制,則將使用兩者中較小的值。這可以防止 Autoscaler 具有硬限制值不允許的目標值。
軟限制是目標限制,而不是嚴格執行的界限。在某些情況下,特別是如果突然出現請求突發的情況,此值可能會被超過。
硬限制是一個強制執行的上限。如果並行達到硬限制,則多餘的請求將被緩衝,並且必須等到有足夠的容量空閒才能執行請求。
警告
僅當您的應用程式有明確的使用案例時,才建議使用硬限制配置。指定較低的硬限制可能會對應用程式的輸送量和延遲產生負面影響,並可能導致額外的冷啟動。
軟限制¶
- 全域鍵:
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
欄位,在每個修訂版本中指定。此設定不是註解。
在 autoscaling 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"
目標使用率¶
除了先前說明的值設定之外,還可以透過使用目標使用率值進一步調整並行值。
此值指定 Autoscaler 實際應以先前指定的目標百分比為目標。這也稱為指定副本運行的熱度,這會導致 Autoscaler 在達到定義的硬限制之前先進行擴展。
例如,如果 containerConcurrency
設定為 10,且目標使用率值設定為 70 (百分比),則當所有現有副本的平均同時請求數達到 7 時,Autoscaler 將建立新的副本。編號為 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"