サービスのカスタム スケーリング制御を構成する

デフォルトでは、Cloud Run は CPU と同時実行の両方で 60% の使用率を目標として高いパフォーマンスを実現するように最適化され、すべての受信リクエストを処理するためにインスタンス数が自動的にスケーリングされます。ただし、ユースケースによっては、CPU のみなど、使用するスケーリング ファクタを構成し、使用率のカスタム ターゲットを設定することが必要になる場合があります。

Cloud Run には、サービスのスケーリング動作をより細かく制御できるスケーリング制御機能が用意されています。これにより、要件に応じてワークロードのスケーリングについて十分な情報に基づいて判断できます。デフォルトの使用率ターゲットを維持してスケーリング動作を強化することも、次のカスタム使用率ターゲットを構成することもできます。

  • CPU ベースのスケーリングの使用率ターゲット
  • 同時実行ベースのスケーリングの使用率ターゲット

スケーリング制御を使用すると、費用を最適化し、サービスの予測可能性を高めることができます。Cloud Run サービスのデフォルトの自動スケーリング 動作の詳細については、Cloud Run サービスでのインスタンスの自動スケーリングについてをご覧ください。

構成の制限

カスタム スケーリング ターゲットには次の制限が適用されます。

スケーリング ドライバ デフォルト % 構成可能な最小 % 構成可能な最大 %
CPU target utilization 60% 10% 95%
Concurrency target utilization 60% 10% 95%

スケーリング動作の強化を有効にする

Cloud Run のオートスケーラーは、インスタンス数が少ないサービスでも、構成したターゲットに厳密に対応します。CPU と同時実行の両方でデフォルトの使用率ターゲットである 60% を維持する場合でも、スケーリングの予測可能性を高めるためにこの機能を有効にすることをおすすめします。

有効にするには、新しいリビジョンをデプロイするときに gcloud CLI または YAML を使用します。

構成を変更すると、新しいリビジョンが作成されます。明示的に更新しない限り、以降のリビジョンでも、この構成が自動的に設定されます。

gcloud

次の gcloud beta run services update コマンドを実行して、特定のリビジョンの CPU 使用率の目標値同時実行使用率の目標値を設定します。

gcloud beta run services update SERVICE --scaling-cpu-target=0.6 \
--scaling-concurrency-target=0.6

SERVICE は、実際のサービス名に置き換えます。

YAML

  1. 新しいサービスを作成する場合は、この手順をスキップします。既存のサービスを更新する場合は、その YAML 構成をダウンロードします。

    gcloud run services describe SERVICE --format export > service.yaml
  2. run.googleapis.com/scaling-cpu-target 属性と run.googleapis.com/scaling-concurrency-target 属性を追加します。

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      annotations:
        run.googleapis.com/launch-stage: BETA
      name: SERVICE
    spec:
      template:
        metadata:
          annotations:
            run.googleapis.com/scaling-cpu-target: '0.6'
            run.googleapis.com/scaling-concurrency-target: '0.6'

    SERVICE は、実際のサービス名に置き換えます。

  3. 次のコマンドを使用して、サービスを作成または更新します。

    gcloud run services replace service.yaml

カスタム ターゲットを構成する

構成の制限内で特定の CPU 使用率と同時実行使用率の目標値を構成して、カスタム使用率ターゲットを定義し、ワークロードの費用を最適化したり、パフォーマンスを向上させたりできます。

構成を変更すると、新しいリビジョンが作成されます。明示的に更新しない限り、以降のリビジョンでも、この構成が自動的に設定されます。

新しいリビジョンをデプロイするときに、gcloud CLI または YAML を使用してスケーリング制御を構成できます。

gcloud

ターゲット CPU 使用率ターゲット同時実行使用率の値を更新するには、指定したリビジョンでgcloud beta run services update コマンドを実行します。

  • CPU 使用率の目標値を更新するには、次のコマンドを実行します。

    gcloud beta run services update SERVICE --scaling-cpu-target=CPU_TARGET

    次のように置き換えます。

    • SERVICE: サービスの名前。

    • CPU_TARGET: CPU 使用率の目標値。0.1 ~ 0.95 の値を指定します。小数点以下は 2 桁まで構成できます。

  • 同時実行使用率の目標値を更新するには、次のコマンドを実行します。

    gcloud beta run services update SERVICE --scaling-concurrency-target=CONCURRENCY_TARGET

    次のように置き換えます。

    • SERVICE: サービスの名前。

    • CONCURRENCY_TARGET: 同時実行使用率の目標値。0.1 ~ 0.95 の値を指定します。小数点以下は 2 桁まで構成できます。

  • CPU 使用率の目標値と同時実行使用率の目標値の両方を更新するには、次のコマンドを実行します。

    gcloud beta run services update SERVICE --scaling-cpu-target=CPU_TARGET \
    --scaling-concurrency-target=CONCURRENCY_TARGET

    次のように置き換えます。

    • SERVICE: サービスの名前。
    • CPU_TARGET: CPU 使用率の目標値。0.1 ~ 0.95 の値を指定します。小数点以下は 2 桁まで構成できます。
    • CONCURRENCY_TARGET: 同時実行使用率の目標値。0.1 ~ 0.95 の値を指定します。小数点以下は 2 桁まで構成できます。

YAML

  1. 新しいサービスを作成する場合は、この手順をスキップします。既存のサービスを更新する場合は、その YAML 構成をダウンロードします。

    gcloud run services describe SERVICE --format export > service.yaml
  2. CPU 使用率の目標値と同時実行使用率の目標値を更新するには、run.googleapis.com/scaling-cpu-target 属性と run.googleapis.com/scaling-concurrency-target 属性を追加します。

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      annotations:
        run.googleapis.com/launch-stage: BETA
      name: SERVICE
    spec:
      template:
        metadata:
          annotations:
            run.googleapis.com/scaling-cpu-target: 'CPU_TARGET'
            run.googleapis.com/scaling-concurrency-target: 'CONCURRENCY_TARGET'

    次のように置き換えます。

    • SERVICE: サービスの名前。
    • CPU_TARGET: CPU 使用率の目標値。0.1 ~ 0.95 の値を指定します。小数点以下は 2 桁まで構成できます。
    • CONCURRENCY_TARGET: 同時実行使用率の目標値。0.1 ~ 0.95 の値を指定します。小数点以下は 2 桁まで構成できます。
  3. 次のコマンドを使用して、サービスを作成または更新します。

    gcloud run services replace service.yaml

スケーリング制御を無効にする

CPU 使用率の目標値または同時実行使用率の目標値のいずれかを無効にできますが、両方を無効にすることはできません。常に 1 つのスケーリング ドライバが有効になっている必要があります。スケーリング制御を無効にするには、無効にするのではなく、デフォルトの使用率の値を復元します。スケーリング ドライバを無効にすると、Cloud Run はスケーリングの決定を行う際にその指標を無視します。

新しいリビジョンをデプロイするときに、gcloud CLI または YAML を使用してスケーリング制御を無効にできます。

gcloud

CPU 使用率の目標値または同時実行使用率の目標値のいずれかを gcloud beta run services update コマンドを実行して無効にできます。

  • CPU のみでスケーリングするには、次のコマンドを実行して同時実行ターゲットを無効にします。

    gcloud beta run services update SERVICE --scaling-concurrency-target=disabled

    SERVICE は、実際のサービス名に置き換えます。

  • 同時実行のみでスケーリングするには、次のコマンドを実行して CPU ターゲットを無効にします。

    gcloud beta run services update SERVICE --scaling-cpu-target=disabled

    SERVICE は、実際のサービス名に置き換えます。

YAML

  1. 新しいサービスを作成する場合は、この手順をスキップします。既存のサービスを更新する場合は、その YAML 構成をダウンロードします。

    gcloud run services describe SERVICE --format export > service.yaml
  2. CPU のみでスケーリングするには、run.googleapis.com/scaling-concurrency-target 属性を disabled に設定して、同時実行ターゲットを無効にします。

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      annotations:
        run.googleapis.com/launch-stage: BETA
      name: SERVICE
    spec:
      template:
        metadata:
          annotations:
            run.googleapis.com/scaling-concurrency-target: disabled

    SERVICE は、実際のサービス名に置き換えます。

  3. 同時実行のみでスケーリングするには、run.googleapis.com/scaling-cpu-target 属性を disabled に設定して、CPU ターゲットを無効にします。

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      annotations:
        run.googleapis.com/launch-stage: BETA
      name: SERVICE
    spec:
      template:
        metadata:
          annotations:
            run.googleapis.com/scaling-cpu-target: disabled

    SERVICE は、実際のサービス名に置き換えます。

  4. 次のコマンドを使用して、サービスを作成または更新します。

    gcloud run services replace service.yaml

デフォルト値に戻す

CPU 使用率の目標値または同時実行使用率の目標値をデフォルトに戻すと、スケーリング制御機能が無効になります。新しいリビジョンをデプロイするときに、gcloud CLI または YAML を使用してスケーリング 制御をデフォルトに戻すことができます。

gcloud

gcloud beta run services update コマンドを実行して、CPU 使用率の目標値同時実行使用率の目標値をデフォルトに戻します。

  • CPU 使用率の目標値をデフォルト値に戻すには、次のコマンドを実行します。

    gcloud beta run services update SERVICE --scaling-cpu-target=default

    SERVICE は、実際のサービス名に置き換えます。

  • 同時実行使用率の目標値をデフォルト値に戻すには、次のコマンドを実行します。

    gcloud beta run services update SERVICE --scaling-concurrency-target=default

    SERVICE は、実際のサービス名に置き換えます。

  • CPU 使用率の目標値と同時実行使用率の目標値の両方をデフォルト値に戻すには、次のコマンドを実行します。

    gcloud beta run services update SERVICE --scaling-cpu-target=default \
    --scaling-concurrency-target=default

    SERVICE は、実際のサービス名に置き換えます。

YAML

  1. 新しいサービスを作成する場合は、この手順をスキップします。既存のサービスを更新する場合は、その YAML 構成をダウンロードします。

    gcloud run services describe SERVICE --format export > service.yaml
  2. CPU 使用率と同時実行使用率をデフォルトのターゲットに戻すには、YAML ファイルから run.googleapis.com/scaling-cpu-target 属性と run.googleapis.com/scaling-concurrency-target 属性を削除 します。

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      annotations:
        run.googleapis.com/launch-stage: BETA
      name: SERVICE
    spec:
      template:
        metadata:
          # Remove the scaling target annotations to restore defaults
        ...

    SERVICE は、実際のサービス名に置き換えます。

  3. 次のコマンドを使用して、サービスを作成または更新します。

    gcloud run services replace service.yaml

スケーリング構成を表示する

スケーリング構成は、gcloud CLI または YAML を使用して表示できます。

コンソール

  1. Google Cloud コンソールで、Cloud Run の [サービス] ページに移動します。

    Cloud Run に移動

  2. サービスをクリックして、[サービスの詳細] パネルを開きます。

  3. [変更内容] タブをクリックします。

  4. 右側の詳細パネルで、[コンテナ] タブに表示されている [自動スケーリング指標] の設定を確認します。

gcloud

  1. 次のコマンドを使用します。

    gcloud run services describe SERVICE

    SERVICE は、実際のサービス名に置き換えます。

  2. 返された構成で、[CPU 使用率の目標値:] 設定と [同時実行使用率の目標値:] 設定の値を見つけます。

ベスト プラクティス

インスタンス数を減らして費用を最適化し、過剰なスケーリングを防ぐことができます。また、特定のスケーリング ドライバに応じてより積極的にスケーリングすることで、パフォーマンスを向上させることができます。ワークロードに最適な使用率ターゲットを決定するには、次の戦略を使用します。

  • ターゲットを調整する前に、サービスのスケーリングをトリガーしている指標を特定します。スケーリング指標を特定する手順は次のとおりです。

    1. コンソールの Metrics Explorer に移動して、CPU 使用率と 同時実行使用率のモニタリング グラフを確認します。 Google Cloud

    2. run.googleapis.com/scaling/recommended_instances 指標を検索して選択し、[集計] を [集計なし] に設定して、スケーリング ドライバ別にグループ化された指標を表示します。

    値が最も高いドライバが、サービスのインスタンス数を制御するドライバです。別のドライバを優先する場合や、スケーリングをより積極的に行う場合は、その特定のドライバの使用率ターゲットを調整します。

  • ターゲットを段階的に調整し、調整の間隔を数分間空けて、パフォーマンスへの影響を確認します。

  • トラフィック分割を使用して、トラフィックのごく一部を 別のリビジョンに転送して新しいスケーリング ターゲットをテストしてから、サービス全体にロールアウトします。

低い使用率ターゲットについて

使用率ターゲットを最小値の 0.1(10%)に下げると、サービスのスケーリング方法が大幅に変わります。

使用率ターゲットを低く設定するメリットは次のとおりです。

  • 高いサービス可用性: サービスが早期にスケールアップし、 レイテンシの増加なしにトラフィックの急増に対応できるアイドル状態の容量の大きなバッファを 維持します。

  • インスタンス数が少ない場合の高速スケーリング: サービスは、使用率の高いボトルネックに達する前に、より確実にスケーリングされます。

使用率ターゲットを低く設定するデメリットは次のとおりです。

  • 費用が増加する可能性がある: 現在の負荷に厳密に必要な数よりも多くのインスタンスを実行するため、請求額が増加します。
  • スケーリングの決定頻度が高くなる: 使用率が低い場合、Cloud Run の許容範囲が狭くなり、スケーリングまでの待機時間が短くなります。

次のステップ