CREMA オートスケーラー サービスは、Prometheus のデータを使用して比率ベースの計算を行います。オートスケーラー サービスは、現在のワークロードに適した量のリソースがワーカープールに確保されるように、インスタンス数を動的に調整します。CREMA は、特定の期間におけるワーカープールの CPU 使用率を計算し、構成済みのしきい値と比較してインスタンスを調整します。
目標
このチュートリアルの内容は次のとおりです。
Cloud Run ワーカープールをデプロイして、 使用率指標を Google Cloud Managed Service for Prometheus に報告するバックグラウンド ワークロードを実行します。
オートスケーラー CREMA サービスをデプロイして、Prometheus 指標に基づいてワーカープールを動的に スケーリングします。
サービスログを観察し、 コンソールでインスタンス数の変更を Google Cloud 確認して、CREMA サービスをテストします。
費用
このドキュメントでは、課金対象である次の コンポーネントを使用します Google Cloud:
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
始める前に
- アカウントにログインします。 Google Cloud を初めて使用する場合は、 アカウントを作成して、実際のシナリオで Google プロダクトのパフォーマンスを評価してください。 Google Cloud新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Cloud Run、Parameter Manager、Artifact Registry、Cloud Build、Cloud Monitoring API を有効にします。
API を有効にするために必要なロール
API を有効にするには、
serviceusage.services.enable権限を含む Service Usage 管理者 IAM ロール(roles/serviceusage.serviceUsageAdmin)が必要です。詳しくは、ロールを付与する方法をご覧ください。- gcloud CLI をインストールして初期化します。
- コンポーネントを更新します。
gcloud components update
- このチュートリアルで使用する CREMA の次の構成変数を設定します。
PROJECT_ID は、 Google Cloud プロジェクトの ID に置き換えます。export PROJECT_ID=PROJECT_ID export REGION=us-central1 export CREMA_SA_NAME=crema-service-account export CONSUMER_SA_NAME=consumer-service-account export CONSUMER_WORKER_POOL_NAME=worker-pool-consumer export CREMA_SERVICE_NAME=my-crema-service
- 次のコマンドを実行して、プロジェクト ID を設定します。
gcloud config set project $PROJECT_ID
- Cloud Run スケーリング サービスの料金は、スケーリングをトリガーする頻度に基づいて発生します。詳細については、料金計算ツールで費用を見積もってください。
必要なロール
チュートリアルを完了するために必要な権限を取得するには、プロジェクトに対する次の IAM ロールを付与するよう管理者に依頼してください。
-
Artifact Registry リポジトリ管理者(
roles/artifactregistry.repoAdmin) -
Cloud Build 編集者(
roles/cloudbuild.builds.editor) -
Cloud Run 管理者(
roles/run.admin) -
サービス アカウントの作成(
roles/iam.serviceAccountCreator) -
サービス アカウント ユーザー(
roles/iam.serviceAccountUser) -
Service Usage ユーザー (
roles/serviceusage.serviceUsageConsumer) -
Parameter Manager 管理者 (
roles/parametermanager.admin)
ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。
カスタム サービス アカウントを作成する
このチュートリアルでは、プロビジョニングされた リソースを使用するために必要な最小 権限を持つ次の 2 つのサービス アカウントが必要です。
コンシューマー サービス アカウント: バックグラウンド ワークロードを実行するワーカープールの ID。次のコマンドを実行して、コンシューマー サービス アカウントを作成します。
gcloud iam service-accounts create $CONSUMER_SA_NAME \ --display-name="Consumer service account"CREMA サービス アカウント: オートスケーラーの ID。次のコマンドを実行して、CREMA サービス アカウントを作成します。
gcloud iam service-accounts create $CREMA_SA_NAME \ --display-name="CREMA service account"
カスタム サービス アカウントに追加の権限を付与する
ワーカープールをスケーリングするには、カスタム サービス アカウントに次の権限を付与します。
Parameter Manager から読み取る権限を CREMA サービス アカウントに付与します。
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:$CREMA_SA_NAME@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/parametermanager.parameterViewer"ワーカープールをスケーリングする権限を CREMA サービス アカウントに付与します。
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:$CREMA_SA_NAME@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/run.developer"サービス アカウント ユーザーのロールを CREMA サービス アカウントに付与します。
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:$CREMA_SA_NAME@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/iam.serviceAccountUser"指標を表示する権限を CREMA サービス アカウントに付与します。
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:$CREMA_SA_NAME@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/monitoring.viewer"指標を書き込む権限を CREMA サービス アカウントに付与します。
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:$CREMA_SA_NAME@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/monitoring.metricWriter"
Cloud Run ワーカープールをデプロイする
CREMA がスケールアップできるように、0 個のインスタンスでワーカープールをデプロイします。
gcloud beta run worker-pools deploy $CONSUMER_WORKER_POOL_NAME \
--image us-docker.pkg.dev/cloudrun/container/worker-pool:latest \
--instances 0 \
--region $REGION \
--memory 4G \
--cpu 4 \
--service-account="$CONSUMER_SA_NAME@$PROJECT_ID.iam.gserviceaccount.com"
オートスケーラー CREMA サービスをデプロイする
Prometheus 指標に基づいてワーカープールを自動スケーリングするように CREMA サービスをデプロイします。
オートスケーラーを構成する
このチュートリアルでは、Parameter Manager を使用して、CREMA の YAML 構成ファイルを保存します。
Parameter Manager にパラメータを作成して、CREMA のパラメータ バージョンを保存します。
PARAMETER_ID=crema-config PARAMETER_REGION=global gcloud parametermanager parameters create $PARAMETER_ID --location=$PARAMETER_REGION --parameter-format=YAMLルート ディレクトリに YAML ファイル
my-crema-config.yamlを作成して、オートスケーラーの構成を定義します。自動スケーリングのしきい値を CPU 使用率 50% に設定します。apiVersion: crema/v1 kind: CremaConfig spec: pollingInterval: 30 triggerAuthentications: - metadata: name: google-crema-auth spec: podIdentity: provider: gcp scaledObjects: - spec: scaleTargetRef: name: projects/PROJECT_ID/locations/us-central1/workerPools/worker-pool-consumer minReplicaCount: 1 maxReplicaCount: 20 triggers: - type: prometheus metadata: serverAddress: https://monitoring.googleapis.com/v1/projects/PROJECT_ID/location/global/prometheus threshold: "0.5" query: | histogram_quantile( 0.50, sum by (le) ( increase( run_googleapis_com:container_cpu_utilizations_bucket{ monitored_resource="cloud_run_worker_pool", worker_pool_name="worker-pool-consumer", location="us-central1", project_id="PROJECT_ID" }[2m] ) ) ) authenticationRef: name: google-crema-auth advanced: horizontalPodAutoscalerConfig: behavior: scaleDown: stabilizationWindowSeconds: 300PROJECT_ID は、 Google Cloud プロジェクト ID に置き換えます。
ローカル YAML ファイルを新しいパラメータ バージョンとしてアップロードします。
LOCAL_YAML_CONFIG_FILE=my-crema-config.yaml PARAMETER_VERSION=1 gcloud parametermanager parameters versions create $PARAMETER_VERSION \ --location=$PARAMETER_REGION \ --parameter=$PARAMETER_ID \ --payload-data-from-file=$LOCAL_YAML_CONFIG_FILE次のコマンドを実行して、パラメータの追加が成功したことを確認します。
gcloud parametermanager parameters versions list \ --parameter=$PARAMETER_ID \ --location=$PARAMETER_REGIONパラメータ パス(
projects/PROJECT_ID/locations/global/parameters/crema-config/versions/1など)が表示されます。
サービスをデプロイしてワークロードをスケーリングする
ワーカープールをスケーリングするサービスをデプロイするには、ビルド済みのコンテナ イメージを使用して次のコマンドを実行します。
CREMA_CONFIG_PARAM_VERSION=projects/$PROJECT_ID/locations/$PARAMETER_REGION/parameters/$PARAMETER_ID/versions/$PARAMETER_VERSION
IMAGE=us-central1-docker.pkg.dev/cloud-run-oss-images/crema-v1/autoscaler:1.0
gcloud beta run deploy $CREMA_SERVICE_NAME \
--image=${IMAGE} \
--region=${REGION} \
--service-account="${CREMA_SA_NAME}" \
--no-allow-unauthenticated \
--no-cpu-throttling \
--base-image=us-central1-docker.pkg.dev/serverless-runtimes/google-24/runtimes/java25 \
--labels=created-by=crema \
--set-env-vars="CREMA_CONFIG=${CREMA_CONFIG_PARAM_VERSION},OUTPUT_SCALER_METRICS=True"
自動スケーリング サービスをテストする
自動スケーリング サービスが正しく機能していることを確認するには、Cloud Run サービスの [ログ] タブを 確認します。 CREMA オートスケーラー サービスは、コンシューマー ワーカー インスタンスを 0 からスケールアップします。
指標が更新されるたびに、サービスのログに次のログが表示されます。
[INFO] [METRIC-PROVIDER] Starting metric collection cycle
[INFO] [METRIC-PROVIDER] Successfully fetched scaled object metrics ...
[INFO] [METRIC-PROVIDER] Sending scale request ...
[INFO] [SCALER] Received ScaleRequest ...
[INFO] [SCALER] Current instances ...
[INFO] [SCALER] Recommended instances ...
Cloud Run は、各ログメッセージに、そのメッセージを出力したコンポーネントのラベルを付けます。
クリーンアップ
Google Cloud アカウントで追加料金が発生しないようにするには、このチュートリアルでデプロイしたすべてのリソースを削除します。
プロジェクトを削除する
このチュートリアル用に新規プロジェクトを作成した場合は、そのプロジェクトを削除します。既存のプロジェクトを使用し、このチュートリアルで行った変更を加えずに残す場合は、チュートリアル用に作成したリソースを削除します。
課金をなくす最も簡単な方法は、チュートリアル用に作成したプロジェクトを削除することです。
プロジェクトを削除するには:
- コンソールで [**リソースの管理**] ページに移動します。 Google Cloud
- プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
- ダイアログでプロジェクト ID を入力し、 [Shut down] をクリックしてプロジェクトを削除します。
チュートリアル リソースの削除
このチュートリアルでデプロイした Cloud Run サービスを削除します。Cloud Run サービスの費用は、リクエストを受け取るまでは発生しません。
Cloud Run サービスを削除するには、次のコマンドを実行します。
gcloud run services delete SERVICE-NAME
SERVICE-NAME は、サービスの名前に置き換えます。
Cloud Run サービスは Google Cloud コンソールで削除することもできます。
チュートリアルの設定時に追加した
gcloudのデフォルトのリージョン構成を削除します。gcloud config unset run/regionプロジェクト構成を削除します。
gcloud config unset projectこのチュートリアルで作成した他の Google Cloud リソースを削除します。
次のステップ
- Cloud Run ワーカープールの詳細を確認する。
- 他の Cloud Run のデモ、チュートリアル、サンプルを確認する。
- CREMA を使用して他の KEDA スケーラーを構成する。