인메모리 볼륨(서비스)

이 페이지에서는 파일 읽기 및 쓰기에 사용할 수 있는 전용 인메모리 볼륨을 구성하는 방법을 설명합니다.

이 기능은 인메모리 파일 쓰기에서 사용되는 메모리를 제한하지 않는 Cloud Run이 제공하는 기본 인메모리 파일 시스템과 다릅니다. 인메모리 볼륨을 사용하면 소비될 수 있는 메모리 양을 제한할 수 있습니다.

동작

Cloud Run 서비스의 인메모리 볼륨을 구성하면 시작된 모든 Cloud Run 인스턴스에 대해 빈 볼륨이 생성되며 인스턴스가 실행되는 한 존재합니다. 인스턴스 실행이 중지되면 볼륨의 데이터가 영구적으로 삭제됩니다.

인메모리 볼륨의 한도를 지정한 후 해당 볼륨에 쓸 때 한도를 초과하면 사용자가 처리할 수 있는 메모리 부족 오류가 발생하며, 해당 인스턴스는 계속 실행됩니다. 볼륨 크기 한도를 지정하지 않고 볼륨에 쓸 때 인스턴스 메모리 한도를 초과하면 인스턴스가 비정상 종료됩니다.

실행 환경과 배포 유형에 따라 달라지는 볼륨 소유권

볼륨을 마운트할 때 파일과 디렉터리를 소유하는 ID는 워크로드의 실행 환경 및 배포가 컨테이너 하나 이상으로 구성되어 있는지에 따라 달라집니다.

단일 컨테이너를 배포하는 1세대 실행 환경에서는 컨테이너에 사용되는 ID가 볼륨을 소유합니다. 다른 모든 경우에는 루트에서 볼륨을 소유합니다. 여기에는 다음과 같은 정보가 포함됩니다.

  • 여러 컨테이너를 배포하는 1세대 실행 환경
  • 2세대 환경

사용 사례

인메모리 볼륨 사용 사례에는 스크래치 공간 할당 또는 비정상 종료 방지를 위한 긴 계산 체크포인트가 포함됩니다.

인메모리 볼륨 구성

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

볼륨에 메모리 크기 한도를 지정하면 이 볼륨에 액세스하는 인스턴스의 모든 개별 컨테이너에서 사용되는 메모리에서 메모리가 할당됩니다. 인스턴스의 컨테이너에서 사용하는 모든 메모리의 합계보다 큰 인메모리 볼륨 크기를 지정하면 컨테이너에 기본적으로 사용되는 합계의 합계가 볼륨으로 설정됩니다.

볼륨에 대한 메모리 크기 한도를 지정하지 않으면 인스턴스 메모리 한도를 초과하여 인스턴스가 비정상적으로 종료될 수 있습니다.

메모리 크기 한도를 지정하지 않고 멀티 컨테이너 배포에서 인메모리 볼륨을 공유 볼륨으로 사용하는 경우 사용 가능한 총 인스턴스 메모리의 절반은 공유 볼륨에 할당됩니다. 예를 들어 emptyDir 볼륨 크기는 [메모리(컨테이너 A) + 메모리(컨테이너 B) + 메모리(컨테이너 N)]/2)입니다.

콘솔

  1. Cloud Run으로 이동

  2. 구성하려는 서비스를 클릭합니다.

  3. YAML 탭을 클릭합니다.

  4. 다음과 같이 volumeMountsvolumes 속성을 구성합니다.

    apiVersion: serving.knative.dev/v1
      kind: Service
      metadata:
      annotations:
        run.googleapis.com/launch-stage: BETA
        name: SERVICE
      spec:
        template:
          metadata:
          spec:
            containers:
            - image: IMAGE_URL
              volumeMounts:
              - mountPath: PATH
                name: VOLUME_NAME
            volumes:
            - name: VOLUME_NAME
              emptyDir:
                sizeLimit: SIZE_LIMIT
                medium: Memory

    변경

    • SERVICE: Cloud Run 서비스 이름입니다.
    • IMAGE_URL을 컨테이너 이미지에 대한 참조(예: us-docker.pkg.dev/cloudrun/container/hello:latest)로 바꿉니다. Artifact Registry를 사용하는 경우 저장소 REPO_NAME이 이미 생성되어 있어야 합니다. URL의 형식은 REGION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG입니다.
    • PATH: 볼륨의 상대 경로(예: /cache)
    • VOLUME_NAME: 인메모리 볼륨에 사용할 이름
    • SIZE_LIMIT: 볼륨에 할당하려는 메모리 한도, MiB 또는 GiB 단위(MiB 또는 GiB 단위로 지정), (예: 500Mi). 이 한도는 컨테이너에 지정된 총 메모리보다 작아야 합니다.
  5. 저장 후 새 버전 배포를 클릭합니다.

YAML

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

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

    gcloud run services describe SERVICE --format export > service.yaml
  2. 다음과 같이 volumeMountsvolumes 속성을 구성합니다.

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
     annotations:
      run.googleapis.com/launch-stage: BETA
      name: SERVICE
    spec:
      template:
        metadata:
        spec:
          containers:
          - image: IMAGE_URL
            volumeMounts:
            - mountPath: PATH
              name: VOLUME_NAME
          volumes:
          - name: VOLUME_NAME
            emptyDir:
              sizeLimit: SIZE_LIMIT
              medium: Memory

    다음과 같이 바꿉니다.

    • SERVICE: Cloud Run 서비스 이름입니다.
    • IMAGE_URL을 컨테이너 이미지에 대한 참조(예: us-docker.pkg.dev/cloudrun/container/hello:latest)로 바꿉니다. Artifact Registry를 사용하는 경우 저장소 REPO_NAME이 이미 생성되어 있어야 합니다. URL의 형식은 REGION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG입니다.
    • PATH: 볼륨의 상대 경로(예: /cache)
    • VOLUME_NAME: 인메모리 볼륨에 사용할 이름
    • SIZE_LIMIT: 볼륨에 할당하려는 메모리 한도, MiB 또는 GiB 단위(MiB 또는 GiB 단위로 지정), (예: 500Mi). 이 한도는 컨테이너에 지정된 총 메모리보다 작아야 합니다.
  3. 다음 명령어를 사용하여 서비스를 새 구성으로 바꿉니다.

    gcloud run services replace service.yaml