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