9.2. Knative Serving 自動スケーリングの設定
OpenShift Serverless は、Knative Serving 自動スケーリングシステムを OpenShift Container Platform クラスターで有効にすることで、アクティブでない Pod をゼロにスケーリングする機能など、Pod の自動スケーリングの各種機能を提供します。
Knative Serving の自動スケーリングを有効にするには、リビジョンテンプレートで同時実行 (concurrency) およびスケール境界 (scale bound) を設定する必要があります。
リビジョンテンプレートでの制限およびターゲットの設定は、アプリケーションの単一インスタンスに対して行われます。たとえば、target
アノテーションを 50
に設定することにより、アプリケーションの各インスタンスが一度に 50 要求を処理できるようアプリケーションをスケーリングするように Autoscaler が設定されます。
9.2.1. Knative Serving 自動スケーリングの同時要求の設定
リビジョンコンテナーの各インスタンスまたはアプリケーションによって処理される同時要求の数は、リビジョンテンプレートに target
アノテーションまたは containerConcurrency
フィールドを追加して指定できます。
ターゲットアノテーションを使用したリビジョンテンプレート YAML の例
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: myapp spec: template: metadata: annotations: autoscaling.knative.dev/target: 50 spec: containers: - image: myimage
containerConcurrency アノテーションを使用したリビジョンテンプレート YAML の例
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: myapp spec: template: metadata: annotations: spec: containerConcurrency: 100 containers: - image: myimage
target
と containerConcurrency
の両方の値を追加することにより、同時要求の target
数をターゲットとして設定できますが、これにより要求の containerConcurrency
数のハード制限も設定されます。
たとえば、target
値が 50 で、containerConcurrency
値が 100 の場合、要求のターゲットに設定された数は 50 になりますが、ハード制限は 100 になります。
containerConcurrency
値が target
値よりも低い場合、実際に処理できる数よりも多くの要求をターゲットとして設定する必要はないため、target
値は小さい値に調整されます。
containerConcurrency
は、特定の時点にアプリケーションに到達する要求の数を制限する明らかな必要がある場合にのみ使用する必要があります。containerConcurrency
は、アプリケーションで同時実行の制約を実行する必要がある場合にのみ使用することを推奨します。
9.2.1.1. ターゲットアノテーションの使用による同時要求の設定
同時要求数のデフォルトターゲットは 100
ですが、リビジョンテンプレートで autoscaling.knative.dev/target
アノテーション値を追加または変更することによってこの値を上書きできます。
以下は、ターゲットを 50
に設定するためにこのアノテーションをリビジョンテンプレートで使用する方法の例を示しています。
autoscaling.knative.dev/target: 50
9.2.1.2. containerConcurrency フィールドを使用した同時要求の設定
containerConcurrency
は、処理される同時要求数にハード制限を設定します。
containerConcurrency: 0 | 1 | 2-N
- 0
- 無制限の同時要求を許可します。
- 1
- リビジョンコンテナーの所定インスタンスによって一度に処理される要求は 1 つのみであることを保証します。
- 2 以上
- 同時要求をこの数に制限します。
target
アノテーションがない場合、自動スケーリングは、target
が containerConcurrency
の値と等しい場合のように設定されます。
9.2.2. Knative Serving 自動スケーリングのスケール境界の設定
minScale
および maxScale
アノテーションは、アプリケーションを提供できる Pod の最小および最大数を設定するために使用できます。これらのアノテーションは、コールドスタートを防いだり、コンピューティングコストをコントロールするために使用できます。
- minScale
-
minScale
アノテーションが設定されていない場合、Pod はゼロ (または、enable-scale-to-zero がConfigMap
に基づいて false の場合は 1) にスケーリングします。 - maxScale
-
maxScale
アノテーションが設定されていない場合、作成される Pod の上限はありません。
minScale
および maxScale
は、リビジョンテンプレートで以下のように設定できます。
spec: template: metadata: annotations: autoscaling.knative.dev/minScale: "2" autoscaling.knative.dev/maxScale: "10"
これらのアノテーションをリビジョンテンプレートで使用することで、この設定が PodAutoscaler
オブジェクトに伝播します。
これらのアノテーションは、リビジョンの有効期間全体で適用されます。リビジョンがルートで参照されていない場合でも、 minScale
によって指定される最小 Pod 数は依然として指定されます。ルーティングできないリビジョンについては、ガべージコレクションの対象になることに留意してください。これにより、Knative はリソースを回収できます。