同時実行数の設定¶
同時実行数は、アプリケーションの各レプリカが任意の時点で処理できる同時リクエストの数を決定します。
リビジョンごとの同時実行数の設定には、ソフトリミットの場合はautoscaling.knative.dev/metric
とautoscaling.knative.dev/target
の両方、ハードリミットの場合はcontainerConcurrency
を設定する必要があります。ソフトリミット、またはハードリミット。
グローバルな同時実行数の設定には、container-concurrency-target-default
の値を設定できます。
ソフト同時実行制限とハード同時実行制限¶
ソフト同時実行制限とハード同時実行制限のいずれかを設定できます。
注意
ソフトリミットとハードリミットの両方が指定されている場合、2つの値のうち小さい方が使用されます。これにより、オートスケーラーがハードリミット値で許可されていないターゲット値を持つことがなくなります。
ソフトリミットは、厳密に強制される境界ではなく、ターゲットとなる制限です。特に、リクエストが突然バーストした場合、この値を超える可能性があります。
ハードリミットは強制される上限です。同時実行数がハードリミットに達すると、余剰のリクエストはバッファリングされ、十分な容量が空いてリクエストを実行できるまで待機する必要があります。
警告
ハードリミット設定の使用は、アプリケーションで明確なユースケースがある場合にのみ推奨されます。低いハードリミットを指定すると、アプリケーションのスループットとレイテンシに悪影響を与え、コールドスタートが増える可能性があります。
ソフトリミット¶
- グローバルキー:
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
フィールドを使用してリビジョンごとに指定されます。この設定はアノテーションではありません。
containerConcurrency
は、オートスケーリング以外にも、リクエストのバッファリングやキューイングなどにも影響を与えるため、オートスケーリングConfigMapにはハードリミットのグローバル設定はありません。ただし、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"
ターゲット利用率¶
既に説明したリテラル設定に加えて、ターゲット利用率を使用して同時実行値をさらに調整できます。
この値は、オートスケーラーが実際にターゲットとするべき、先に指定したターゲットのパーセンテージを指定します。これは、レプリカが動作するホットネスを指定することとしても知られており、これにより、定義されたハードリミットに達する前にオートスケーラーがスケールアップします。
たとえば、containerConcurrency
が10に設定され、ターゲット利用率値が70(パーセント)に設定されている場合、すべての既存のレプリカ全体での平均同時リクエスト数が7に達すると、オートスケーラーは新しいレプリカを作成します。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"