이 페이지에서는 파일 읽기 및 쓰기에 사용할 수 있는 전용 인메모리 볼륨을 구성하는 방법을 설명합니다.
이 기능은 인메모리 파일 쓰기에서 사용되는 메모리를 제한하지 않는 Cloud Run이 제공하는 기본 인메모리 파일 시스템과 다릅니다. 인메모리 볼륨을 사용하면 소비될 수 있는 메모리 양을 제한할 수 있습니다.
동작
Cloud Run 서비스의 인메모리 볼륨을 구성하면 시작된 모든 Cloud Run 인스턴스에 대해 빈 볼륨이 생성되며 인스턴스가 실행되는 한 존재합니다. 인스턴스 실행이 중지되면 볼륨의 데이터가 영구적으로 삭제됩니다.
인메모리 볼륨의 한도를 지정한 후 해당 볼륨에 쓸 때 한도를 초과하면 사용자가 처리할 수 있는 메모리 부족 오류가 발생하며, 해당 인스턴스는 계속 실행됩니다. 볼륨 크기 한도를 지정하지 않고 볼륨에 쓸 때 인스턴스 메모리 한도를 초과하면 인스턴스가 비정상 종료됩니다.
실행 환경과 배포 유형에 따라 달라지는 볼륨 소유권
볼륨을 마운트할 때 파일과 디렉터리를 소유하는 ID는 워크로드의 실행 환경 및 배포가 컨테이너 하나 이상으로 구성되어 있는지에 따라 달라집니다.
단일 컨테이너를 배포하는 1세대 실행 환경에서는 컨테이너에 사용되는 ID가 볼륨을 소유합니다. 다른 모든 경우에는 루트에서 볼륨을 소유합니다. 여기에는 다음과 같은 정보가 포함됩니다.
- 여러 컨테이너를 배포하는 1세대 실행 환경
- 2세대 환경
사용 사례
인메모리 볼륨 사용 사례에는 스크래치 공간 할당 또는 비정상 종료 방지를 위한 긴 계산 체크포인트가 포함됩니다.
인메모리 볼륨 구성
구성을 변경하면 새 버전이 생성됩니다. 이를 변경하는 명시적 업데이트가 없으면 이후 버전에도 이 구성 설정이 자동으로 적용됩니다.
볼륨에 메모리 크기 한도를 지정하면 이 볼륨에 액세스하는 인스턴스의 모든 개별 컨테이너에서 사용되는 메모리에서 메모리가 할당됩니다. 인스턴스의 컨테이너에서 사용하는 모든 메모리의 합계보다 큰 인메모리 볼륨 크기를 지정하면 컨테이너에 기본적으로 사용되는 합계의 합계가 볼륨으로 설정됩니다.
볼륨에 대한 메모리 크기 한도를 지정하지 않으면 인스턴스 메모리 한도를 초과하여 인스턴스가 비정상적으로 종료될 수 있습니다.
메모리 크기 한도를 지정하지 않고 멀티 컨테이너 배포에서 인메모리 볼륨을 공유 볼륨으로 사용하는 경우 사용 가능한 총 인스턴스 메모리의 절반은 공유 볼륨에 할당됩니다. 예를 들어 emptyDir
볼륨 크기는 [메모리(컨테이너 A) + 메모리(컨테이너 B) + 메모리(컨테이너 N)]/2)입니다.
콘솔
구성하려는 서비스를 클릭합니다.
YAML 탭을 클릭합니다.
다음과 같이
volumeMounts
및volumes
속성을 구성합니다.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
). 이 한도는 컨테이너에 지정된 총 메모리보다 작아야 합니다.
저장 후 새 버전 배포를 클릭합니다.
YAML
YAML 형식으로 정리된 결과를 생성하는 gcloud run services describe --format export
명령어를 사용하면 기존 서비스 구성을 다운로드해서 볼 수 있습니다.
그런 다음 아래 설명된 필드를 수정하고 gcloud run services replace
명령어를 사용하여 수정된 YAML을 업로드할 수 있습니다.
설명된 대로 필드만 수정해야 합니다.
구성을 보고 다운로드하려면 다음을 실행합니다.
gcloud run services describe SERVICE --format export > service.yaml
다음과 같이
volumeMounts
및volumes
속성을 구성합니다.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
). 이 한도는 컨테이너에 지정된 총 메모리보다 작아야 합니다.
다음 명령어를 사용하여 서비스를 새 구성으로 바꿉니다.
gcloud run services replace service.yaml