2.3. OpenShift Serverless Serving のスケーリングとパフォーマンス


OpenShift Serverless Serving は、次のパラメーターに基づいてスケーリングおよび設定する必要があります。

  • Knative Service の数
  • 修正回数
  • システム内の同時リクエスト数
  • リクエストのペイロードのサイズ
  • ユーザーの Web アプリケーションによって追加された Knative Service の起動レイテンシーと応答レイテンシー
  • KnativeService カスタムリソース (CR) の変更回数の推移

2.3.1. KnativeServing のデフォルト設定

デフォルトでは、OpenShift Serverless Serving は、高可用性と中規模の CPU およびメモリーリクエストと制限で、すべてのコンポーネントを実行するように設定されています。つまり、KnativeServing CR の high-available フィールドは、自動的に 2 の値に設定され、すべてのシステムコンポーネントは 2 つのレプリカにスケーリングされます。この設定は中程度のワークロードのシナリオに適しており、以下でテストされています。

  • 170 Knative サービス
  • Knative Service ごとに 1 - 2 回の修正
  • 主にコントロールプレーンのテストに重点を置いた 89 のテストシナリオ
  • Knative Service が削除され、再作成されるシナリオを 48 回再現する
  • 41 の安定したシナリオ。リクエストはゆっくりと継続的にシステムに送信されます。

これらのテストケースでは、システムコンポーネントは実質的に以下を消費しました。

コンポーネント測定されたリソース

プロジェクト openshift-serverless の Operator

1 GB メモリー、0.2 コアの CPU

プロジェクト knative-serving のコンポーネントの提供

5 GB メモリー、2.5 コアの CPU

2.3.2. OpenShift Serverless Serving の最小要件

デフォルトのセットアップは中規模のワークロードに適していますが、小規模なセットアップでは大きすぎる場合があり、高ワークロードのシナリオでは小さすぎる場合があります。最小限のワークロードシナリオ向けに OpenShift Serverless Serving を設定するには、システムコンポーネントのアイドル時の消費量を把握する必要があります。

2.3.2.1. アイドル時の消費

アイドル時の消費量は Knative Service の数に依存します。knative-serving および knative-serving-ingress OpenShift Container Platform プロジェクトのコンポーネントについて、次のメモリー使用量が測定されました。

コンポーネント0 サービス100 サービス500 サービス1000 サービス

activator

55Mi

86Mi

300 Mi

450Mi

autoscaler

52Mi

102Mi

225Mi

350Mi

controller

100Mi

135Mi

310Mi

500 Mi

webhook

60Mi

60Mi

60Mi

60Mi

3scale-kourier-gateway

20Mi

60Mi

190Mi

330Mi

net-kourier-controller

90Mi

170Mi

340Mi

430Mi

注記

3scale-kourier-gateway および net-kourier-controller コンポーネント、または istio-ingressgateway および net-istio-controller コンポーネントのいずれかがインストールされています。

net-istio のメモリー消費量は、メッシュ内の Pod の合計数に基づいています。

2.3.3. 最小限のワークロード向けのサービングの設定

手順

  • KnativeServing カスタムリソース (CR) を使用して、最小限のワークロード用に Knative Serving を設定できます。

    KnativeServing CR における最小限のワークロード設定

    apiVersion: operator.knative.dev/v1beta1
    kind: KnativeServing
    metadata:
      name: knative-serving
      namespace: knative-serving
    spec:
      high-availability:
        replicas: 1 1
      workloads:
        - name: activator
          replicas: 2 2
          resources:
            - container: activator
              requests:
                cpu: 250m 3
                memory: 60Mi 4
              limits:
                cpu: 1000m
                memory: 600Mi
        - name: controller
          replicas: 1 5
          resources:
            - container: controller
              requests:
                cpu: 10m
                memory: 100Mi
              limits: 6
                cpu: 200m
                memory: 300Mi
        - name: webhook
          replicas: 2
          resources:
            - container: webhook
              requests:
                cpu: 100m 7
                memory: 60Mi
              limits:
                cpu: 200m
                memory: 200Mi
      podDisruptionBudgets: 8
        - name: activator-pdb
          minAvailable: 1
        - name: webhook-pdb
          minAvailable: 1

    1
    これを 1 に設定すると、すべてのシステムコンポーネントが 1 つのレプリカにスケーリングされます。
    2
    ダウンタイムを回避するために、Activator は常に最低でも 2 つのインスタンスにスケーリングする必要があります。
    3
    Activator CPU リクエストは 250m 未満に設定しないでください。HorizontalPodAutoscaler は、これをスケールアップおよびスケールダウンの基準として使用するためです。
    4
    メモリーリクエストを前の表のアイドル値に調整します。また、予想される負荷に応じてメモリー制限を調整します (最適な値を見つけるにはカスタムテストが必要になる場合があります)。
    5
    最小限のワークロードのシナリオでは、1 つの Webhook と 1 つのコントローラーで十分です。
    6
    これらの制限は、最小限のワークロードのシナリオには十分ですが、具体的なワークロードに応じて調整することを推奨します。
    7
    Webhook CPU リクエストは 100m 未満に設定しないでください。HorizontalPodAutoscaler はこれをスケールアップおよびスケールダウンの基準として使用するためです。
    8
    ノードメンテナンス中に問題が発生しないように、PodDistruptionBudgetsreplicas よりも低い値に調整します。

2.3.4. 高ワークロード向け Serving の設定

KnativeServing カスタムリソース (CR) を使用して、高ワークロード向けに Knative Serving を設定できます。以下の調査結果は、高ワークロード向け Knative Serving の設定に関連しています。

注記

これらの調査結果は、ペイロードサイズが 0 - 32 kb のリクエストでテストされています。これらのテストで使用された Knative Service バックエンドの起動時のレイテンシーは 0 - 10 秒、応答時間は 0 - 5 秒でした。

  • すべてのデータプレーンコンポーネントは、リクエストやペイロードのシナリオが増えると CPU 使用率が増加するため、CPU リクエストと制限をテストし、必要に応じて増やす必要があります。
  • アクティベーターコンポーネントは、より多くの、またはより大きなリクエストペイロードをバッファーリングする必要がある場合、より多くのメモリーを必要とする可能性があるため、メモリーリクエストと制限も同様に増やすことを推奨します。
  • 1 つのアクティベーター Pod は、レイテンシーが増加し始め、ある時点でエラーが発生するまで、1 秒あたり約 2500 件のリクエストを処理できます。
  • 1 つの 3scale-kourier-gateway または istio-ingressgateway Pod も、レイテンシーが増加し始め、ある時点でエラーが発生する前に、1 秒あたり約 2500 件のリクエストを処理できます。
  • 各データプレーンコンポーネントは、1 秒あたり 2500 件のリクエストを処理するために最大 1 仮想 CPU の CPU を消費します。これは、ペイロードサイズと Knative Service バックエンドの応答時間に大きく依存することに注意してください。
重要

Knative Service ユーザーワークロードの高速起動と高速応答時間は、システム全体の良好なパフォーマンスにとって重要です。Knative Serving コンポーネントは、Knative Service ユーザーバックエンドがスケールアップしているとき、またはリクエストの同時実行性が容量に達したときに、受信リクエストをバッファリングします。Knative Service のユーザーワークロードによって起動やリクエストのレイテンシーが長くなると、activator コンポーネントが過負荷になるか (CPU とメモリーの設定が低すぎる場合)、呼び出し元のクライアントでエラーが発生します。

手順

  • インストールを微調整するには、以前の調査結果と独自のテスト結果を組み合わせて、KnativeServing カスタムリソースを設定します。

    KnativeServing CR での高ワークロード設定

    apiVersion: operator.knative.dev/v1beta1
    kind: KnativeServing
    metadata:
      name: knative-serving
      namespace: knative-serving
    spec:
      high-availability:
        replicas: 2 1
      workloads:
        - name: component-name 2
          replicas: 2 3
          resources:
            - container: container-name
              requests:
                cpu: 4
                memory:
              limits:
                cpu:
                memory:
      podDisruptionBudgets: 5
        - name: name-of-pod-disruption-budget
          minAvailable: 1

    1
    このパラメーターを少なくとも 2 に設定して、すべてのコンポーネントのインスタンスが常に少なくとも 2 つ実行されるようにします。workloads を使用して、特定のコンポーネントのレプリカをオーバーライドすることもできます。
    2
    workloads リストを使用して、特定のコンポーネントを設定します。コンポーネントの deployment 名を使用し、replicas フィールドを設定します。
    3
    Horizontal Pod Autoscaler (HPA) を使用する activatorwebhook、および 3scale-kourier-gateway コンポーネントの場合、replicas フィールドでレプリカの最小数を設定します。レプリカの実際の数は、CPU 負荷と HPA によって実行されるスケーリングによって異なります。
    4
    以前の調査結果と独自のテスト結果も考慮しながら、少なくともアイドル時の消費量に応じて、リクエストおよび制限された CPU とメモリーを設定します。
    5
    ノードのメンテナンス中に問題が発生しないように、PodDistruptionBudgetsreplicas よりも低い値に調整します。デフォルトの minAvailable1 に設定されているため、必要なレプリカを増やす場合は、minAvailable も増やす必要があります。
重要

各環境は非常に特殊であるため、テストを行って独自の理想的な設定を見つけることが重要です。OpenShift Container Platform のモニタリングおよびアラート機能を使用して、実際のリソース消費を継続的に監視し、必要に応じて調整を行います。

OpenShift Serverless と Service Mesh のインテグレーションを使用している場合は、istio-proxy サイドカーコンテナーによって追加の CPU 処理が追加されます。詳細は、Service Mesh のドキュメントを参照してください。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.