CPU 할당(서비스)

기본적으로 Cloud Run 인스턴스에서는 요청 처리, 컨테이너 시작 및 종료 중에만 CPU가 할당됩니다. 인스턴스 수명 주기를 참조하세요. 들어오는 요청이 없는 경우에도 CPU가 항상 할당되고 사용 가능하도록 이 동작을 변경할 수 있습니다. CPU를 항상 할당되도록 설정하면 단기 백그라운드 작업 및 기타 비동기 처리 작업을 실행할 때 유용할 수 있습니다.

CPU 할당 모드 이미지

CPU가 항상 할당되더라도 Cloud Run 자동 확장은 계속 적용되며 수신 트래픽 또는 요청 외의 현재 CPU 사용률을 처리하는 데 필요하지 않은 경우 인스턴스를 종료할 수 있습니다. 최소 인스턴스를 사용하여 활성 상태로 유지되지 않는 한 인스턴스는 요청 처리 후 15분 이상 유휴 상태로 유지되지 않습니다.

항상 할당된 CPU와 최소 인스턴스 수를 결합하면 CPU 리소스에 대한 전체 액세스 권한으로 여러 인스턴스가 실행되어 백그라운드 처리 사용 사례가 가능해집니다. 이 패턴을 사용할 때 Cloud Run은 서비스가 요청 이외의 CPU를 사용하더라도 인스턴스 자동 확장을 적용합니다.

상태 점검 프로브를 사용하는 경우 모든 프로브에 CPU가 할당됩니다. 결제 세부정보는 컨테이너 상태 점검 프로브를 참조하세요.

가격 책정 영향

요청 처리 중에만 CPU를 할당하도록 선택하면 인스턴스가 요청을 처리할 때만 요청별로 요금이 청구됩니다. CPU 항상 할당됨 설정을 선택할 경우에는 인스턴스의 전체 수명 주기 동안 비용이 부과됩니다. 자세한 내용은 Cloud Run 가격 책정표를 참조하세요.

Google의추천자는 지난 1개월 동안 Cloud Run 서비스에서 수신한 트래픽을 자동으로 조회하여 요청 중에 할당된 CPU보다 항상 할당된 CPU가 저렴한 경우 항상 할당된 CPU로 전환하도록 추천합니다.

적절한 CPU 할당을 선택하는 방법

사용 사례에 적합한 CPU 할당 선택은 트래픽 패턴, 백그라운드 실행, 비용 등 여러 가지 요소에 따라 결정됩니다. 각 요소에 대해서는 다음 섹션에서 설명합니다.

트래픽 패턴 고려사항

  • 요청 처리 중에만 할당되는 CPU는 수신 트래픽이 산발적이거나 급격히 증가하는 경우에 권장됩니다.
  • 수신 트래픽이 일정하고 느리게 변화하는 경우 항상 할당된 CPU를 사용하는 것이 좋습니다.

백그라운드 실행 고려사항

항상 할당된 CPU를 선택하면 응답을 반환한 후 단기 백그라운드 작업 및 기타 비동기 처리 작업을 실행할 수 있습니다. 예를 들면 다음과 같습니다.

  • 백그라운드에서 실행될 수 있다고 가정할 수 있는 OpenTelemetry와 같은 모니터링 에이전트 활용
  • Go의 Goroutines, Node.js 비동기, 자바 스레드, Kotlin 코루틴 사용
  • 기본 제공 예약/백그라운드 기능에 의존하는 애플리케이션 프레임워크 사용

최소 인스턴스를 사용하여 준비 상태로 유지되는 인스턴스를 포함하여 유휴 인스턴스를 언제든지 종료할 수 있습니다. 컨테이너가 종료되기 전 미해결 태스크를 완료해야 할 경우 SIGTERM을 트랩하여 중지되기 전 인스턴스에 10초의 유예 시간을 제공할 수 있습니다.

비동기 태스크 실행을 위해서는 Cloud Tasks 사용을 고려합니다. Cloud Tasks는 실패한 태스크를 자동으로 재시도하고 최대 30분까지 실행 시간을 지원합니다.

비용 고려사항

현재 요청 처리 중에만 할당된 CPU를 사용하는 경우 다음과 같은 경우 항상 할당된 CPU를 사용하는 것이 더 경제적일 수 있습니다.

  • Cloud Run 서비스가 많은 수의 현재 요청을 일정한 속도로 처리하고 있습니다.
  • 인스턴스 수 측정항목을 확인할 때 '유휴' 인스턴스가 많지 않습니다.

가격 계산기를 사용하여 비용 차이를 추정할 수 있습니다.

CPU가 항상 0부터 확장에 할당됨

0부터의 확장은 요청에 의해서만 트리거될 수 있으므로 요청을 처리하지 않는 서비스는 0부터 확장할 수 없습니다. 이러한 워크로드의 경우 최소 인스턴스를 0보다 크게 설정하거나 0으로 축소한 후 처리를 다시 시작하도록 설계에 'wake-up 요청'을 포함할 수 있습니다.

CPU가 항상 0으로 축소에 할당됨

CPU가 0%인 인스턴스가 없는 경우 모든 CPU 사용량을 살펴보면 0으로 축소되지 않습니다. 즉, 인스턴스가 요청을 처리 중인지 확인해야만 1에서 0으로 축소할 수 있습니다.

CPU 할당 설정 및 업데이트

구성을 변경하면 새 버전이 생성됩니다. 이를 변경하는 명시적 업데이트가 없으면 이후 버전에도 이 구성 설정이 자동으로 적용됩니다.

CPU 항상 할당됨 옵션을 선택할 경우에는 최소 512MiB 메모리를 지정해야 합니다.

기본적으로 CPU는 각 컨테이너 인스턴스에 대한 요청 처리 중에만 할당됩니다. 새 서비스를 만들거나 새 버전을 배포할 때 Google Cloud 콘솔, gcloud 명령줄 또는 YAML 파일을 사용하여 이 값을 변경할 수 있습니다.

콘솔

  1. Google Cloud 콘솔에서 Cloud Run으로 이동합니다.

    Cloud Run으로 이동

  2. 배포할 새 서비스를 구성하려면 서비스 만들기를 클릭합니다. 기존 서비스를 구성하는 경우 서비스를 클릭한 후 새 버전 수정 및 배포를 클릭합니다.

  3. 새 서비스를 구성하는 경우 원하는 대로 초기 서비스 설정 페이지를 작성한 후 컨테이너, 볼륨, 네트워킹, 보안을 클릭하여 서비스 구성 페이지를 펼칩니다.

  4. 컨테이너 탭을 클릭합니다.

    이미지

    • CPU 할당 및 가격 책정에서 원하는 CPU 할당을 선택합니다. 요청을 수신할 때만 인스턴스가 CPU를 수신하도록 하려면 요청 처리 중에만 CPU가 할당됨을 선택합니다. 인스턴스의 전체 수명 주기 동안 CPU를 할당하려면 CPU가 항상 할당됨을 선택합니다.
  5. 만들기 또는 배포를 클릭합니다.

명령줄

CPU 할당을 업데이트할 수 있습니다. 지정된 서비스에 대해 CPU를 항상 할당됨으로 설정하려면 다음 안내를 따르세요.

gcloud run services update SERVICE --no-cpu-throttling 

SERVICE를 서비스 이름으로 바꿉니다.

요청을 처리하는 동안에만 CPU 할당을 설정하려면 다음 안내를 따르세요.

gcloud run services update SERVICE --cpu-throttling 

배포 중에 CPU 할당을 설정할 수도 있습니다. 항상 할당되도록 CPU를 설정하려면 다음 안내를 따르세요.

gcloud run deploy --image IMAGE_URL --no-cpu-throttling

요청을 처리하는 동안에만 CPU 할당을 설정하려면 다음 안내를 따르세요.

gcloud run deploy --image IMAGE_URL --cpu-throttling

IMAGE_URL을 컨테이너 이미지에 대한 참조(예: us-docker.pkg.dev/cloudrun/container/hello:latest)로 바꿉니다. Artifact Registry를 사용하는 경우 저장소 REPO_NAME이 이미 생성되어 있어야 합니다. URL의 형식은 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG입니다.

YAML

YAML 형식으로 정리된 결과를 생성하는 gcloud run services describe --format export 명령어를 사용하면 기존 서비스 구성을 다운로드해서 볼 수 있습니다. 그런 다음 아래 설명된 필드를 수정하고 gcloud run services replace 명령어를 사용하여 수정된 YAML을 업로드할 수 있습니다. 설명된 대로 필드만 수정해야 합니다.

  1. 구성을 보고 다운로드하려면 다음을 실행합니다.

    gcloud run services describe SERVICE --format export > service.yaml
  2. cpu 속성을 업데이트합니다.

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
          annotations:
            run.googleapis.com/cpu-throttling: 'BOOLEAN'
          name: REVISION

    다음과 같이 바꿉니다.

    • SERVICE를 Cloud Run 서비스 이름으로 바꿉니다.
    • BOOLEANtrue로 지정하여 요청 처리 중에만 CPU 할당을 설정하거나 false로 지정하여 항상 CPU를 할당하도록 설정합니다.
    • REVISION을 새 버전 이름으로 변경하거나 이미 있는 경우 삭제합니다. 새 버전 이름을 제공할 경우 다음 기준을 반드시 충족해야 합니다.
      • SERVICE-로 시작해야 합니다.
      • 소문자, 숫자, -만 포함합니다.
      • -로 끝나면 안 됩니다.
      • 63자(영문 기준) 이하여야 합니다.
  3. 다음 명령어를 사용하여 서비스를 새 구성으로 바꿉니다.

    gcloud run services replace service.yaml

Terraform

Terraform 구성을 적용하거나 삭제하는 방법은 기본 Terraform 명령어를 참조하세요.

template.containers.resources 아래의 Terraform 구성에서 google_cloud_run_v2_service 리소스에 다음 항목을 추가합니다.

resource "google_cloud_run_v2_service" "default" {
  name     = "cloudrun-service-cpu-allocation"
  location = "us-central1"

  template {
    containers {
      image = "us-docker.pkg.dev/cloudrun/container/hello"
      resources {
        # If true, garbage-collect CPU when once a request finishes
        cpu_idle = false
      }
    }
  }
}

CPU 할당 설정 보기

Cloud Run 서비스의 현재 CPU 할당 설정을 보려면 다음 안내를 따르세요.

콘솔

  1. Google Cloud 콘솔에서 Cloud Run으로 이동합니다.

    Cloud Run으로 이동

  2. 관심이 있는 서비스를 클릭하여 서비스 세부정보 페이지를 엽니다.

  3. 버전 탭을 클릭합니다.

  4. 오른쪽의 세부정보 패널에서 CPU 할당 설정이 컨테이너 탭에 표시됩니다.

명령줄

  1. 다음 명령어를 사용하세요.

    gcloud run services describe SERVICE
  2. 반환된 구성에서 CPU 할당 설정을 찾습니다.