이 페이지에서는 외부 이벤트 기반 측정항목을 사용하여 Cloud Run 작업자 풀을 자동 확장하는 방법을 설명합니다. Cloud Run 외부 측정항목 자동 확장 (CREMA)은 Kubernetes 기반 이벤트 기반 자동 확장 (KEDA)을 활용하여 외부 이벤트 소스를 기반으로 워크로드를 확장함으로써 이 기능을 지원합니다.
지원되는 스케일러 및 Cloud Run과의 호환성은 Google Cloud GitHub 문서의 Cloud Run 외부 측정항목 자동 확장 (CREMA)를 참고하세요.
자동 확장 서비스 정보
작업자 풀을 자동 확장하려면 CREMA 자동 확장 처리 서비스가 Cloud Run에 배포되어야 합니다. 이 서비스는 다음 작업을 수행합니다.
Apache Kafka 주제 또는 GitHub Runner Scaler와 같은 외부 이벤트 소스를 폴링합니다.
YAML 구성을 기반으로 필요한 인스턴스 수를 계산합니다.
작업자 풀의 인스턴스 수를 자동으로 업데이트합니다.
시작하기 전에
설정 페이지에 설명된 대로 Cloud Run용 새 프로젝트를 설정했는지 확인합니다.
Artifact Registry, Cloud Build, Cloud Run Admin API, Secret Manager, Parameter Manager API를 사용 설정합니다.
gcloud services enable artifactregistry.googleapis.com \ cloudbuild.googleapis.com \ run.googleapis.com \ secretmanager.googleapis.com \ parametermanager.googleapis.comGitHub 러너 또는 Apache Kafka와 같은 이벤트 기반 또는 요청 기반 워크로드를 구성합니다. 워크로드 소스가 지원되는지 확인하려면 Google Cloud GitHub 문서의 CREMA 호환성 목록을 참고하세요.
가격 계산기를 검토하여 비용을 추정합니다. 확장을 트리거하는 빈도에 따라 Cloud Run 확장 서비스에 요금이 청구됩니다.
필요한 역할
작업자 풀을 자동 확장하는 데 필요한 권한을 얻으려면 관리자에게 프로젝트에 대한 다음 IAM 역할을 부여해 달라고 요청하세요.
-
Artifact Registry 저장소 관리자(
roles/artifactregistry.repoAdmin) -
Cloud Build 편집자(
roles/cloudbuild.builds.editor) -
Cloud Run 관리자(
roles/run.admin) -
서비스 계정 만들기(
roles/iam.serviceAccountCreator) -
Secret Manager 관리자(
roles/secretmanager.admin) -
서비스 계정 사용자(
roles/iam.serviceAccountUser) -
서비스 사용량 소비자(
roles/serviceusage.serviceUsageConsumer) -
스토리지 관리자(
roles/storage.admin) -
Parameter Manager 관리자 (
roles/parametermanager.admin)
역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.
커스텀 역할이나 다른 사전 정의된 역할을 통해 필요한 권한을 얻을 수도 있습니다.
커스텀 서비스 계정 만들기
워크로드에 필요한 프로비저닝된 리소스를 사용하는 데 필요한 최소 권한을 가진 커스텀 서비스 계정을 만듭니다. 서비스 계정을 설정하려면 다음 단계를 따르세요.
gcloud iam service-accounts create CREMA_SERVICE_ACCOUNT \
--display-name="CREMA Service Account"
CREMA_SERVICE_ACCOUNT을 커스텀 서비스 계정의 이름(예: crema-service-account)으로 바꿉니다. 이 명령어는 crema-service-account@example-project.iam.gserviceaccount.com 형식을 따르는 서비스 계정을 만듭니다.
CREMA 구성 파일 만들기
확장 로직을 정의하려면 루트 디렉터리에 YAML 구성 파일을 만듭니다. 이 파일은 모니터링할 외부 소스, 리소스에 인증하는 방법, 확장할 작업자 풀을 CREMA 서비스에 안내합니다.
YAML 예시
다음 예는 GitHub Runner 측정항목을 사용하여 Cloud Run 작업자 풀 (example-workerpool)을 확장하는 구성 파일을 보여줍니다. github_runner_token라는 Secret Manager 보안 비밀을 사용하여 측정항목을 읽기 위해 GitHub로 인증합니다.
apiVersion: crema/v1
kind: CremaConfig
metadata:
name: gh-demo
spec:
triggerAuthentications:
- metadata:
name: github-trigger-auth
spec:
gcpSecretManager:
secrets:
- parameter: personalAccessToken
id: github_runner_token
version: latest
scaledObjects:
- spec:
scaleTargetRef:
name: projects/example-project/locations/us-central1/workerpools/example-workerpool
triggers:
- type: github-runner
name: example-runner
metadata:
owner: repo-owner
runnerScope: repo
repos: repo-name
targetWorkflowQueueLength: 1
authenticationRef:
name: github-trigger-auth
advanced:
horizontalPodAutoscalerConfig:
behavior:
scaleDown:
stabilizationWindowSeconds: 10
policies:
- type: Pods
value: 100
periodSeconds: 10
scaleUp:
stabilizationWindowSeconds: 10
policies:
- type: Pods
value: 2
periodSeconds: 10
pollingInterval: 10
YAML 구성은 다음 상위 수준 매개변수를 사용합니다.
triggerAuthentications: Secret Manager에 저장된 토큰을 사용하는 등 CREMA가 외부 서비스를 인증하는 방법을 결정합니다.scaledObjects: Cloud Run 작업자 풀과 외부 측정항목 리소스 간의 매핑을 정의합니다. 이 매개변수에는 다음이 포함됩니다.scaleTargetRef: 확장할 Cloud Run 서비스 또는 작업자 풀triggers: 확장하는 데 사용되는 특정 외부 측정항목입니다. 외부 측정항목 소스에 인증이 필요한 경우authenticationRef필드를 설정하여 사용자 인증 정보의TriggerAuthentications객체 중 하나를 지정합니다.
pollingInterval: CREMA가 측정항목을 새로고침하는 간격 (초)을 제어합니다. 이 매개변수를 생략하면 CREMA가 자동으로 폴링하지 않으며 서비스에 대한 POST 요청을 사용하여 확장 확인을 수동으로 트리거해야 합니다.
기본 및 고급 구성 측정항목 정의에 대한 자세한 내용은 Google Cloud GitHub 문서의 구성 참조를 참고하세요.
호환되는 스케일러의 구성 정의 전체 목록은 KEDA 문서의 스케일러를 참고하세요.
매개변수 관리자에 CREMA 구성 저장
CREMA 자동 스케일러 서비스의 매개변수 버전을 저장하려면 다음 단계를 따르세요.
매개변수 관리자에서 매개변수를 만듭니다.
gcloud parametermanager parameters create PARAMETER_ID --location=global --parameter-format=YAMLPARAMETER_ID을 매개변수 이름으로 바꿉니다.
로컬 YAML 파일을 새 매개변수 버전으로 업로드합니다.
gcloud parametermanager parameters versions create PARAMETER_VERSION \ --location=global \ --parameter=PARAMETER_ID \ --payload-data-from-file=LOCAL_YAML_CONFIG_FILE다음을 바꿉니다.
- PARAMETER_VERSION: 파라미터 버전에 할당할 ID입니다(예:
1). - LOCAL_YAML_CONFIG_FILE: YAML 구성 파일의 경로입니다.
- PARAMETER_VERSION: 파라미터 버전에 할당할 ID입니다(예:
자세한 내용은 매개변수 만들기를 참고하세요.
CREMA 서비스 계정에 추가 권한 부여
YAML 구성에 지정된 작업자 풀을 확장하려면 커스텀 서비스 계정에 다음 권한을 부여하세요.
CREMA 서비스 계정에 Parameter Manager에서 읽을 수 있는 권한을 부여합니다.
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:CREMA_SERVICE_ACCOUNT_NAME \ --role="roles/parametermanager.parameterViewer"다음을 바꿉니다.
PROJECT_ID: Google Cloud 프로젝트의 ID입니다.
CREMA_SERVICE_ACCOUNT_NAME: CREMA 서비스 계정의 이름입니다.
작업자 풀에서 CREMA 서비스 계정에
roles/run.developer역할을 부여합니다. 이렇게 하면 CREMA 서비스가 변경되는 측정항목에 따라 작업자 풀의 인스턴스 수를 수정할 수 있습니다.WORKER_POOL_NAME=WORKER_POOL_NAME WORKER_POOL_REGION=WORKER_POOL_REGION gcloud beta run worker-pools add-iam-policy-binding $WORKER_POOL_NAME \ --region=$WORKER_POOL_REGION \ --member="serviceAccount:CREMA_SERVICE_ACCOUNT_NAME" \ --role="roles/run.developer"다음을 바꿉니다.
- WORKER_POOL_NAME: 작업자 풀 이름
- WORKER_POOL_REGION: 작업자 풀의 리전입니다.
CREMA 서비스 계정에 측정항목을 쓸 수 있는 권한을 부여합니다.
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:CREMA_SERVICE_ACCOUNT_NAME" \ --role="roles/monitoring.metricWriter"CREMA 서비스 계정에 서비스 계정 사용자 역할을 부여합니다.
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:CREMA_SERVICE_ACCOUNT_NAME" \ --role="roles/iam.serviceAccountUser"
워크로드 확장을 위해 서비스 배포
작업자 풀을 확장하도록 서비스를 배포하려면 사전 빌드된 컨테이너 이미지로 다음 명령어를 실행하세요.
gcloud beta run deploy SERVICE_NAME\
--image=us-central1-docker.pkg.dev/cloud-run-oss-images/crema-v1/autoscaler:1.0 \
--region=SERVICE_REGION \
--service-account="CREMA_SERVICE_ACCOUNT_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=projects/PROJECT_ID/locations/PARAMETER_REGION/parameters/PARAMETER_ID/versions/PARAMETER_VERSION,OUTPUT_SCALER_METRICS=True"
다음을 바꿉니다.
SERVICE_NAME: 자동 확장 처리 서비스의 이름입니다.
SERVICE_REGION: 서비스의 리전
CREMA_SERVICE_ACCOUNT_NAME: CREMA 서비스 계정의 이름입니다.
PROJECT_ID: Google Cloud 프로젝트의 ID입니다.
PARAMETER_REGION, PARAMETER_ID, PARAMETER_VERSION: Parameter Manager에 저장된 값입니다.
Cloud Build를 사용하여 소스 코드에서 빌드한 커스텀 컨테이너 이미지를 사용하여 CREMA 서비스를 배포할 수도 있습니다.
CREMA 서비스 테스트
자동 확장 서비스가 올바르게 작동하는지 확인하려면 Cloud Run 서비스의 로그 탭을 확인하세요.
측정항목이 새로고침될 때마다 서비스 로그에 다음 로그가 표시됩니다.
각 로그 메시지에는 메시지를 내보낸 구성요소가 라벨로 지정됩니다.
[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 ...
다음 단계
작업자 풀에서 자체 호스팅 GitHub 러너를 사용하여 GitHub 저장소에 정의된 워크플로를 실행하고 CREMA로 작업자 풀을 확장하는 방법을 알아보세요.
Cloud Run 작업자 풀 자세히 알아보기