쿠버네티스 다중 pod 환경에서 사용 가능한 공유 저장공간 - Kubernetes에서 PVC, PV, NFS의 역할과 로직 흐름

dodo·2025년 2월 4일

GoogleDeveloperGroups

목록 보기
3/9
post-thumbnail

위는 이해를 돕기 위한 사진. 실제로는 3개의 pod를 사용하며 저장공간은 NFS를 이용하여 VM 내부를 활용중이다.

클라이언트 마이페이지단에서 사진 이미지를 저장해야하는 상황이다. 그러나, 단순하게 pod에 저장하면 영속성을 보장하지 못하고 pod끼리 사진 이미지를 공유하지 못하기 때문에 PV, PVC, NFS를 통해 이 문제를 해결하였다.

1. 기본 개념

  • PV (Persistent Volume):
    • 클러스터에서 사용할 수 있는 물리적 또는 네트워크 스토리지
    • NFS, AWS EBS, Ceph 등 다양한 스토리지 백엔드 지원
  • PVC (Persistent Volume Claim):
    • 애플리케이션(파드)이 스토리지를 요청하는 방식
    • 특정 용량과 접근 모드를 정의하여 PV를 요청함
    • PV와 연결되면 해당 PVC를 사용하는 모든 파드는 데이터를 공유 가능
  • NFS (Network File System):
    • 여러 서버(또는 Pod)에서 동시에 접근 가능한 파일 시스템
    • PV의 백엔드 스토리지가 될 수 있음

2. 현재 서버의 스토리지 구조

Pod 내부 경로: /usr/share/nginx/html  (NFS가 마운트됨)
PV 실제 저장 경로: /mnt/nfs  (NFS 서버에서 관리)
  1. PVC가 PV를 요청
    • PVC가 특정 용량과 접근 권한을 요구
    • PV 중 해당 요청을 충족하는 스토리지가 PVC와 바인딩됨
  2. NFS를 통한 스토리지 공유
    • PV가 NFS 서버의 /mnt/nfs 디렉터리를 사용
    • PVC를 통해 /usr/share/nginx/html 경로에 마운트됨
    • 여러 Pod가 같은 PVC를 사용하여 동일한 데이터를 공유 가능
  3. Pod에서 파일 저장 및 접근
    • 백엔드 서버는 /usr/share/nginx/html/files 경로에 파일을 저장
    • 파일은 NFS를 통해 /mnt/nfs/files에 저장됨
    • Nginx가 /usr/share/nginx/html/files를 서빙하여 외부에서 접근 가능

3. 백엔드에서 파일 업로드 & 조회 흐름

  • 파일 업로드
  1. 백엔드에서 클라이언트가 보낸 파일을 /usr/share/nginx/html/files/ 경로에 저장
  2. PVC를 통해 파일이 NFS 서버의 /mnt/nfs/files/ 경로에 저장됨
  3. 여러 Pod에서 같은 PVC를 사용하기 때문에 동일한 파일 접근 가능
  • 파일 조회
  1. 백엔드에서 파일 경로(/usr/share/nginx/html/files/{filename})를 활용하여 직접 조회
  2. 프론트엔드가 HTTP 요청을 통해 백엔드에서 해당 파일을 받을 수 있음
  3. 또는 http://algo.knu-soft.site/files/{filename} URL을 통해 Nginx에서 직접 파일 서빙 가능

4. 정리

  • PVC와 PV의 역할
    • PVC는 Pod가 요청하는 논리적 스토리지
    • PV는 실제 물리적 스토리지 (NFS)
  • NFS를 사용하는 이유
    • 여러 Pod가 같은 파일을 공유 가능
    • 영구적인 파일 저장 가능
  • 파일 업로드 및 조회 방식
    • /usr/share/nginx/html/files/ 경로에 저장하면 자동으로 NFS에 저장됨
    • 프론트엔드는 백엔드 API를 통해 파일을 조회하거나 Nginx URL로 직접 접근 가능
profile
클라우드 데이터 플랫폼 주니어 개발자 도도입니다!

0개의 댓글