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

デフォルトでは、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

    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=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

    gcloud run services replace コマンドは、service.yaml ファイルが存在する場合はデフォルトでそのファイルを使用します。

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

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

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

gcloud

gcloud beta run services update コマンドを実行すると、目標 CPU 使用率または目標同時実行使用率を無効にできます。

  • 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

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

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

    値が最も高いドライバが、サービスのインスタンス数を制御します。別のドライバを優先する場合や、スケーリングの積極性を調整する場合は、その特定のドライバの使用率の目標値を調整します。

  • 目標を段階的に調整し、調整と調整の間に数分間待って、パフォーマンスへの影響を確認します。

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

使用率の低い目標について

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

使用率の低い目標を設定するメリットは次のとおりです。

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

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

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

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

次のステップ