デフォルトでは、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
新しいサービスを作成する場合は、この手順をスキップします。既存のサービスを更新する場合は、その YAML 構成をダウンロードします。
gcloud run services describe SERVICE --format export > service.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: annotations: run.googleapis.com/scaling-cpu-target: '0.6' run.googleapis.com/scaling-concurrency-target: '0.6'
SERVICE は、実際のサービス名に置き換えます。
次のコマンドを使用して、サービスを作成または更新します。
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
新しいサービスを作成する場合は、この手順をスキップします。既存のサービスを更新する場合は、その YAML 構成をダウンロードします。
gcloud run services describe SERVICE --format export > service.yaml
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 桁までしか設定できません。
次のコマンドを使用して、サービスを作成または更新します。
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
新しいサービスを作成する場合は、この手順をスキップします。既存のサービスを更新する場合は、その YAML 構成をダウンロードします。
gcloud run services describe SERVICE --format export > service.yaml
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 は、実際のサービス名に置き換えます。
同時実行数のみでスケーリングするには、
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 は、実際のサービス名に置き換えます。
次のコマンドを使用して、サービスを作成または更新します。
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
新しいサービスを作成する場合は、この手順をスキップします。既存のサービスを更新する場合は、その YAML 構成をダウンロードします。
gcloud run services describe SERVICE --format export > service.yaml
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 は、実際のサービス名に置き換えます。
次のコマンドを使用して、サービスを作成または更新します。
gcloud run services replace service.yaml
スケーリング構成を表示する
スケーリング構成は、gcloud CLI または YAML を使用して表示できます。
コンソール
Google Cloud コンソールで、Cloud Run の [サービス] ページに移動します。
サービスをクリックして、[サービスの詳細] パネルを開きます。
[リビジョン] タブをクリックします。
右側の詳細パネルで、[コンテナ] タブに表示されている [自動スケーリング指標] の設定を確認します。
gcloud
次のコマンドを使用します。
gcloud run services describe SERVICE
SERVICE は、実際のサービス名に置き換えます。
返された構成で、[CPU 使用率の目標値:] と [同時実行使用率の目標値:] の値を見つけます。
ベスト プラクティス
インスタンスの数を減らしてコストを最適化し、オーバースケーリングを防ぐことも、特定のドライバに応じてより積極的にスケーリングしてパフォーマンスを向上させることもできます。ワークロードの最適な使用率の目標を決定するには、次の戦略を使用します。
ターゲットを調整する前に、サービスのスケーリングをトリガーしている指標を特定します。スケーリング指標を特定する手順は次のとおりです。
Google Cloud コンソールの Metrics Explorer に移動して、CPU と同時実行使用率のモニタリング グラフを確認します。
run.googleapis.com/scaling/recommended_instances指標を検索して選択し、[集計] を [未集計] に設定して、スケーリング ドライバでグループ化された指標を表示します。
値が最も大きいドライバが、サービスのインスタンス数を制御します。別のドライバを優先する場合や、スケーリングをより積極的または消極的に行う場合は、その特定のドライバの使用率の目標値を調整します。
目標を段階的に調整し、調整と調整の間に数分間待って、パフォーマンスへの影響を確認します。
トラフィック分割を使用して、トラフィックの少量を別のリビジョンに転送し、新しいスケーリング ターゲットをテストしてから、サービス全体にロールアウトします。
使用率の低い目標について
使用率の目標値を最小値の 0.1(10%)に下げると、サービスのスケーリング方法が大幅に変わります。
使用率の低い目標を設定するメリットは次のとおりです。
高いサービス可用性: サービスが早期にスケールアップし、アイドル状態の容量の大きなバッファを維持して、レイテンシの影響を受けることなくトラフィックの急増に対応します。
インスタンス数が少ない場合のスケーリングの高速化: サービスは、高使用率のボトルネックに達する前に、より確実にスケーリングされます。
使用率の低い目標を設定するデメリットは次のとおりです。
- 費用が増加する可能性がある: 現在の負荷に厳密に必要な数よりも多くのインスタンスを実行するため、請求額が増加します。
- スケーリングの決定頻度が高い: 使用率が低い場合、Cloud Run の許容範囲は狭く、スケーリングまでの待機時間が短くなります。
次のステップ
- その他のスケーリング オプションについては、手動スケーリングをご覧ください。
- Cloud Run サービスの最大インスタンス数を管理するには、インスタンスの最大数の設定をご覧ください。
- 各インスタンスが処理する同時リクエストの最大数を管理するには、同時実行の設定をご覧ください。
- 同時実行の設定を最適化する方法については、同時実行を調整する際のヒントをご覧ください。
- アイドル状態のインスタンスを最小限にし、最初のリクエストのレイテンシまたはコールド スタートを最小限に抑える方法については、
min-instanceを使用してアイドル インスタンスを有効にするをご覧ください。