이 페이지에서는 Cloud Run에서 NFS 파일 공유를 볼륨으로 마운트하는 방법을 보여줍니다. 온프레미스 또는 Compute Engine VM에서 호스팅되는 자체 NFS 서버를 포함하여 모든 NFS 서버를 사용할 수 있습니다. 아직 NFS 서버가 없으면 Google Cloud의 완전 관리형 NFS 제품인 Filestore를 사용하는 것이 좋습니다.
Cloud Run에서 NFS 파일 공유를 볼륨으로 마운트하면 파일 공유가 컨테이너 파일 시스템에 파일로 나타납니다. 파일 공유를 볼륨으로 마운트한 후에는 프로그래밍 언어의 파일 시스템 작업과 라이브러리를 사용하여 로컬 파일 시스템의 디렉터리처럼 파일 공유에 액세스할 수 있습니다.
허용되지 않는 경로
Cloud Run에서는 볼륨을 /dev
, /proc
, /sys
또는 해당 하위 디렉터리에 마운트할 수 없습니다.
제한사항
- Cloud Run은 NFS 잠금을 지원하지 않습니다. NFS 볼륨은 잠금 없음 모드로 자동으로 마운트됩니다.
시작하기 전에
Cloud Run에서 NFS 서버를 볼륨으로 마운트하려면 다음을 확인하세요.
- NFS 서버 또는 Filestore 인스턴스가 실행되는 VPC 네트워크
- Cloud Run 작업자 풀이 연결된 VPC 네트워크에서 실행되는 NFS 서버 아직 NFS 서버가 없으면 Filestore 인스턴스 만들기로 하나를 만듭니다.
- Cloud Run 작업자 풀은 NFS 서버가 실행 중인 VPC 네트워크에 연결됩니다. 최상의 성능을 위해서는 VPC 커넥터 대신 직접 VPC를 사용하세요.
- 기존 프로젝트를 사용하는 경우 VPC 방화벽 구성에서 Cloud Run이 NFS 서버에 연결할 수 있는지 확인합니다. (새 프로젝트에서 시작하는 경우 기본값은 true입니다.) Filestore를 NFS 서버로 사용하는 경우 Filestore 문서에 따라 Cloud Run이 Filestore에 연결할 수 있도록 방화벽 이그레스 규칙을 만듭니다.
- 컨테이너 사용자가 액세스할 수 있도록 원격 NFS 파일 공유에 대한 권한을 설정합니다. 기본적으로 Filestore는 모든 사용자에게 읽기 액세스 권한을 제공하지만 루트 사용자 (
uid 0
)에 대한 쓰기 액세스 권한은 제한합니다. 컨테이너에 쓰기 액세스 권한이 필요하고 루트 사용자로 실행되지 않는 경우 연결된 클라이언트 (루트로 실행)를 사용하여 공유 권한을 수정해야 합니다. 예를 들어chown
명령어를 사용하여 파일 또는 디렉터리의 소유권을 컨테이너가 실행되는 특정 사용자 ID로 변경할 수 있습니다.
필요한 역할
Cloud Run과 연결된 IAM 역할 및 권한 목록은 Cloud Run IAM 역할 및 Cloud Run IAM 권한을 참조하세요. Cloud Run 작업자 풀이 Cloud 클라이언트 라이브러리와 같은Google Cloud API와 상호작용하는 경우에는 서비스 ID 구성 가이드를 참조하세요. 역할 부여에 대한 자세한 내용은 배포 권한 및 액세스 관리를 참조하세요.
NFS 볼륨 마운트
여러 NFS 서버, Filestore 인스턴스 또는 기타 볼륨 유형을 서로 다른 마운트 경로에 마운트할 수 있습니다.
여러 컨테이너를 사용하는 경우 먼저 볼륨을 지정한 후 각 컨테이너의 볼륨 마운트를 지정합니다.
Google Cloud 콘솔, Google Cloud CLI, YAML 또는 Terraform을 사용하여 NFS 볼륨 마운트를 구성합니다.
콘솔
Google Cloud 콘솔에서 Cloud Run으로 이동합니다.
메뉴에서 작업자 풀을 선택하고 컨테이너 배포를 클릭하여 새 작업자 풀을 구성합니다. 기존 작업자 풀을 구성하는 경우 작업자 풀을 클릭한 후 새 버전 수정 및 배포를 클릭합니다.
새 작업자 풀을 구성하는 경우 초기 작업자 풀 페이지를 작성한 후 컨테이너, 볼륨, 네트워킹, 보안을 클릭하여 작업자 풀 구성 페이지를 펼칩니다.
볼륨 탭을 클릭합니다.
- 볼륨에서 볼륨 추가를 클릭합니다.
- 볼륨 유형 드롭다운에서 NFS를 선택합니다.
- 볼륨 이름 필드에 볼륨에 사용하려는 이름을 입력합니다.
- NFS 서버 필드에 NFS 파일 공유의 도메인 이름 또는 위치 (
IP_ADDRESS
형식)를 입력합니다. - 경로 필드에 마운트할 NFS 서버 디렉터리의 경로를 입력합니다.
- 완료를 클릭합니다.
- 컨테이너 탭을 클릭하고 마운트할 컨테이너를 찾아 컨테이너의 세부정보를 펼칩니다.
- 볼륨 마운트 탭을 클릭합니다.
- 볼륨 마운트를 클릭합니다.
- 메뉴에서 NFS 볼륨을 선택합니다.
- 볼륨을 마운트할 경로를 지정합니다.
- 볼륨 마운트를 클릭합니다.
- 완료를 클릭합니다.
- 볼륨에서 볼륨 추가를 클릭합니다.
만들기 또는 배포를 클릭합니다.
gcloud
볼륨을 추가하고 마운트하려면 다음 명령어를 실행합니다.
gcloud beta run worker-pools update WORKER_POOL \ --add-volume name=VOLUME_NAME,type=nfs,location=IP_ADDRESS:NFS_PATH \ --add-volume-mount volume=VOLUME_NAME,mount-path=MOUNT_PATH
다음을 바꿉니다.
- WORKER_POOL: 작업자 풀의 이름입니다.
- VOLUME_NAME: 볼륨에 지정할 이름입니다.
- IP_ADDRESS: NFS 파일 공유의 위치입니다.
- NFS_PATH: 슬래시로 시작하는 NFS 파일 공유 경로(예:
/example-directory
) - MOUNT_PATH: 볼륨을 마운트할 상대 경로(예:
/mnt/my-volume
)
볼륨을 읽기 전용 볼륨으로 마운트하려면 다음 명령어를 실행합니다.
--add-volume name=VOLUME_NAME,type=nfs,location=IP_ADDRESS:NFS_PATH,readonly=true
여러 컨테이너를 사용하는 경우 먼저 볼륨을 지정한 후 각 컨테이너의 볼륨 마운트를 지정합니다.
gcloud beta run worker-pools update WORKER_POOL \ --add-volume name=VOLUME_NAME,type=nfs,location=IP_ADDRESS:NFS_PATH \ --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
새 작업자 풀을 만드는 경우에는 이 단계를 건너뜁니다. 기존 작업자 풀을 업데이트하는 경우 YAML 구성을 다운로드합니다.
gcloud beta run worker-pools describe WORKER_POOL --format export > workerpool.yaml
다음 예시에는 YAML 구성이 포함되어 있습니다.
apiVersion: run.googleapis.com/v1 kind: WorkerPool metadata: name: WORKER_POOL annotations: run.googleapis.com/launch-stage: BETA spec: template: spec: containers: - name: CONTAINER_NAME image: IMAGE_URL volumeMounts: - name: VOLUME_NAME mountPath: MOUNT_PATH volumes: - name: VOLUME_NAME nfs: server: IP_ADDRESS path: NFS_PATH readOnly: IS_READ_ONLY
다음을 바꿉니다.
- WORKER_POOL: Cloud Run 작업자 풀의 이름
- CONTAINER_NAME: 컨테이너의 이름.
- IMAGE_URL을 작업자 풀이 포함된 컨테이너 이미지에 대한 참조로 바꿉니다(예:
us-docker.pkg.dev/cloudrun/container/worker-pool:latest
). - VOLUME_NAME: 볼륨에 사용할 이름입니다. VOLUME_NAME 값은 볼륨을 볼륨 마운트에 매핑하는 데 사용됩니다.
- MOUNT_PATH: 볼륨을 마운트할 상대 경로(예:
/mnt/my-volume
) - IP_ADDRESS: NFS 파일 공유의 주소입니다.
- NFS_PATH: 슬래시로 시작하는 NFS 파일 공유 경로입니다(예:
/example-directory
). - IS_READ_ONLY:
True
로 지정하여 볼륨을 읽기 전용으로 설정하거나False
로 지정하여 쓰기를 허용합니다.
다음 명령어를 사용하여 작업자 풀을 만들거나 업데이트합니다.
gcloud beta run worker-pools replace workerpool.yaml
Terraform
Terraform 구성을 적용하거나 삭제하는 방법은 기본 Terraform 명령어를 참조하세요.
resource "google_cloud_run_v2_worker_pool" "default" {
name = "WORKER_POOL"
location = "REGION"
launch_stage = "BETA"
template {
containers {
image = "IMAGE_URL"
volume_mounts {
name = "VOLUME_NAME"
mount_path = "MOUNT_PATH"
}
}
vpc_access {
network_interfaces {
network = "default"
subnetwork = "default"
}
}
volumes {
name = "VOLUME_NAME"
nfs {
server = google_filestore_instance.default.networks[0].ip_addresses[0]
path = "NFS_PATH"
read_only = "IS_READ_ONLY"
}
}
}
}
resource "google_filestore_instance" "default" {
name = "cloudrun-worker-pool"
location = "REGION"
tier = "BASIC_HDD"
file_shares {
capacity_gb = 1024
name = "share1"
}
networks {
network = "default"
modes = ["MODE_IPV4"]
}
}
다음을 바꿉니다.
- WORKER_POOL: 작업자 풀의 이름입니다.
- REGION: Google Cloud 리전(예:
europe-west1
). - IMAGE_URL: 작업자 풀이 포함된 컨테이너 이미지에 대한 참조(예:
us-docker.pkg.dev/cloudrun/container/worker-pool:latest
)입니다. - VOLUME_NAME: 볼륨 이름입니다. VOLUME_NAME 값은 볼륨을 볼륨 마운트에 매핑하는 데 사용됩니다.
- MOUNT_PATH: 볼륨을 마운트할 상대 경로(예:
/mnt/my-volume
) - NFS_PATH: NFS 파일 공유의 경로입니다.
- IS_READ_ONLY:
True
로 지정하여 볼륨을 읽기 전용으로 설정하거나False
로 지정하여 쓰기를 허용합니다.
작업자 풀의 환경 변수 구성 보기
Google Cloud 콘솔에서 Cloud Run으로 이동합니다.
작업자 풀을 클릭하여 배포된 작업자 풀 목록을 표시합니다.
검사할 작업자 풀을 클릭하여 세부정보 창을 표시합니다.
컨테이너 탭을 클릭하여 작업자 풀 컨테이너 구성을 표시합니다.
NFS 문제 해결
문제가 발생하면 다음을 확인하세요.
- Cloud Run 작업자 풀이 NFS 서버가 있는 VPC 네트워크에 연결되어 있습니다.
- Cloud Run이 NFS 서버에 연결하는 것을 방지하는 방화벽 규칙이 없습니다.
- 컨테이너가 데이터를 써야 하는 경우 NFS 공유 권한이 컨테이너 사용자의 쓰기를 허용하도록 구성되어 있는지 확인합니다.
컨테이너 시작 시간 및 NFS 볼륨 마운트
NFS 볼륨 마운트를 사용하면 컨테이너를 시작하기 전에 볼륨 마운트가 시작되므로 Cloud Run 컨테이너 콜드 스타트 시간이 약간 늘어날 수 있습니다. NFS가 성공적으로 마운트된 경우에만 컨테이너가 시작됩니다.
NFS는 서버에 대한 연결을 설정하고 파일 핸들을 가져온 후에만 볼륨을 성공적으로 마운트합니다. Cloud Run에서 서버에 대한 연결을 설정할 수 없으면 Cloud Run 작업자 풀을 시작할 수 없습니다.
또한 Cloud Run에는 모든 마운트에 대한 총 30초 제한 시간이 있으므로 네트워킹 지연은 컨테이너 시작 시간에 영향을 미칠 수 있습니다. NFS에서 마운트하는 데 30초 넘게 걸리면 Cloud Run 작업자 풀을 시작할 수 없습니다.
NFS 성능 특성
NFS 볼륨을 2개 이상 만들면 모든 볼륨이 동시에 마운트됩니다.
NFS는 네트워크 파일 시스템이므로 대역폭 제한이 적용되며 제한된 대역폭으로 인해 파일 시스템에 대한 액세스가 영향을 받을 수 있습니다.
NFS 볼륨에 쓰면 데이터가 플러시될 때까지 쓰기가 Cloud Run 메모리에 저장됩니다. 다음과 같은 경우에 데이터가 플러시됩니다.
- 애플리케이션이 sync(2), msync(2) 또는 fsync(3)를 사용하여 파일 데이터를 명시적으로 플러시합니다.
- 애플리케이션에서 close(2)로 파일을 닫습니다.
- 메모리 압력은 시스템 메모리 리소스의 재생성을 강제합니다.
자세한 내용은 NFS에 대한 Linux 문서를 참조하세요.
볼륨 및 볼륨 마운트 삭제
모든 볼륨과 볼륨 마운트를 또는 개별 볼륨과 볼륨 마운트를 삭제할 수 있습니다.
모든 볼륨 및 볼륨 마운트 삭제
단일 컨테이너 작업자 풀에서 모든 볼륨과 볼륨 마운트를 삭제하려면 다음 명령어를 실행합니다.
gcloud beta run worker-pools update WORKER_POOL \ --clear-volumes --clear-volume-mounts
컨테이너가 여러 개 있으면 사이드카 CLI 규칙에 따라 볼륨과 볼륨 마운트를 삭제합니다.
gcloud beta run worker-pools update WORKER_POOL \ --container=container1 \ --clear-volumes -–clear-volume-mounts \ --container=container2 \ --clear-volumes \ -–clear-volume-mounts
개별 볼륨 및 볼륨 마운트 삭제
볼륨을 삭제하려면 해당 볼륨을 사용하는 모든 볼륨 마운트도 삭제해야 합니다.
개별 볼륨이나 볼륨 마운트를 삭제하려면 remove-volume
및 remove-volume-mount
플래그를 사용합니다.
gcloud beta run worker-pools update WORKER_POOL \ --remove-volume VOLUME_NAME \ --container=container1 \ --remove-volume-mount MOUNT_PATH \ --container=container2 \ --remove-volume-mount MOUNT_PATH