작업에 대한 인메모리 볼륨 마운트 구성

이 페이지에서는 Cloud Run 볼륨 마운트를 사용하여 파일 읽기 및 쓰기에 사용할 수 있는 전용 인메모리 볼륨을 구성하는 방법을 설명합니다. 이 기능은 Cloud Run에서 제공하는 기본 인메모리 파일 시스템과 다릅니다.

인메모리 볼륨을 사용하여 다음을 수행할 수 있습니다.

  • 인메모리 볼륨 크기 제한. 볼륨 크기를 제한하면 전체 볼륨에 대한 쓰기가 실패하게 되는데, 이는 볼륨이 너무 많은 메모리를 사용하는 탓에 Cloud Run이 인스턴스를 종료하는 것보다 바람직합니다.
  • 하나의 Cloud Run 인스턴스에서 서로 다른 컨테이너 간에 인메모리 볼륨 공유

동작

인메모리 볼륨을 만들 때는 크기 한도를 지정하는 것이 좋습니다. 볼륨 크기가 크기 한도에 도달하면 추가 쓰기는 메모리 부족 오류로 인해 실패합니다. 인스턴스는 이 오류를 처리하고 계속 실행할 수 있습니다.

참고로 크기 제한은 한도 설정일 뿐이며, 인메모리 볼륨에 추가 공간을 할당하지는 않습니다. 대신 인메모리 볼륨은 컨테이너에 구성된 메모리를 사용합니다. 컨테이너를 여러 개 배포하는 경우 볼륨에 쓸 때마다 사용되는 메모리는 데이터를 작성한 컨테이너의 메모리 사용량으로 계산됩니다.

크기 한도를 지정하지 않으면 작업 또는 서비스에 있는 모든 컨테이너 총 크기의 절반으로 자동 설정됩니다. 예를 들어 emptyDir 볼륨 크기는 [메모리(컨테이너 A) + 메모리(컨테이너 B) + 메모리(컨테이너 N)]/2입니다. 이러한 기본 동작으로 인해 인메모리 볼륨의 크기 한도가 일부 컨테이너에 할당된 메모리보다 높을 수 있습니다. 이 경우 컨테이너가 볼륨에 메모리를 계속 쓰면 볼륨 크기 한도에 도달하기 전에 할당된 메모리를 초과해서 비정상 종료됩니다.

크기 한도는 선택사항이지만 컨테이너가 메모리 부족 및 비정상 종료로부터 보호되도록 크기 한도를 설정하는 것이 좋습니다.

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

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

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

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

인메모리 볼륨 구성

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

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

명령줄

  • 볼륨을 추가하고 마운트하려면 다음 명령어를 실행합니다.

    gcloud beta run jobs update JOB \
    --add-volume=name=VOLUME_NAME,type=in-memory,size-limit=SIZE_LIMIT \
    --add-volume-mount=volume=VOLUME_NAME,mount-path=MOUNT_PATH

    다음과 같이 바꿉니다.

    • JOB을 작업 이름으로 바꿉니다.
    • VOLUME_NAME: 볼륨에 사용할 이름. VOLUME_NAME 값은 볼륨을 볼륨 마운트에 매핑하는 데 사용됩니다.
    • MOUNT_PATH: 볼륨을 마운트할 컨테이너 파일 시스템 내의 상대 경로(예: /cache)
    • SIZE_LIMIT: 볼륨에 할당하려는 메모리 한도, MiB 또는 GiB 단위(Mi 또는 Gi 단위로 지정)(예: 500Mi). 이 한도는 컨테이너에 지정된 총 메모리보다 작아야 합니다.
  • 여러 컨테이너를 사용하는 경우 먼저 볼륨을 지정한 후 각 컨테이너의 볼륨 마운트를 지정합니다.

    gcloud beta run jobs update JOB \
    --add-volume=name= VOLUME_NAME,type=in-memory,size-limit=SIZE_LIMIT \
    --container=CONTAINER_1 \
    --add-volume-mount=volume= VOLUME_NAME,mount-path=MOUNT_PATH \
    --container==CONTAINER_2 \
    --add-volume-mount=volume= VOLUME_NAME,mount-path=MOUNT_PATH2

YAML

  1. 새 작업을 만드는 경우에는 이 단계를 건너뜁니다. 기존 작업을 업데이트하는 경우 YAML 구성을 다운로드합니다.

    gcloud run jobs describe JOB_NAME --format export > job.yaml
  2. 다음과 같이 volumeMountsvolumes 속성을 구성합니다.

    apiVersion: run.googleapis.com/v1
    kind: Job
    metadata:
      name: JOB_NAME
    metadata:
     annotations:
      run.googleapis.com/launch-stage: BETA
    spec:
      template:
        metadata:
        spec:
          containers:
          - image: IMAGE_URL
            volumeMounts:
            - mountPath: MOUNT_PATH
              name: VOLUME_NAME
          volumes:
          - name: VOLUME_NAME
            emptyDir:
              sizeLimit: SIZE_LIMIT
              medium: Memory
    

    다음과 같이 바꿉니다.

    • 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입니다.
    • VOLUME_NAME: 볼륨에 사용할 이름. VOLUME_NAME 값은 볼륨을 볼륨 마운트에 매핑하는 데 사용됩니다.
    • MOUNT_PATH: 볼륨을 마운트할 컨테이너 파일 시스템 내의 상대 경로(예: /cache)
    • SIZE_LIMIT: 볼륨에 할당하려는 메모리 한도, MiB 또는 GiB 단위(Mi 또는 Gi 단위로 지정)(예: 500Mi). 이 한도는 컨테이너에 지정된 총 메모리보다 작아야 합니다.
  3. 다음 명령어를 사용하여 서비스를 새 구성으로 바꿉니다.

    gcloud beta run jobs replace job.yaml