본문 바로가기
[Kubernetes]

[쿠버네티스] 스토리지 볼륨 유형 완벽 가이드!!

by METAVERSE STORY 2025. 10. 27.
반응형

 

 

 

🧱 쿠버네티스 스토리지 볼륨 유형 완벽 가이드


1️⃣ 볼륨(Volume)의 기본 개념

쿠버네티스에서 Pod 내부의 컨테이너는 기본적으로 임시적(Ephemeral) 입니다.
즉, Pod가 재시작되면 컨테이너의 파일시스템은 초기화됩니다.
이를 보완하기 위해 Volume 개념이 도입되었습니다.

✅ 핵심 포인트

구분 설명
역할 Pod의 데이터 저장소 역할
수명 Pod의 수명과 동일 (Pod 삭제 시 사라짐)
공유성 같은 Pod 내 여러 컨테이너 간 데이터 공유 가능
지속성 일부 Volume은 Pod 삭제 후에도 데이터 유지 가능 (예: PVC)

2️⃣ 쿠버네티스 볼륨 유형 대분류

쿠버네티스 볼륨은 크게 3가지 범주로 나눌 수 있습니다.

구분 설명 대표 예시
Ephemeral (임시 스토리지) Pod 생명주기 동안만 유지됨 emptyDir, configMap, secret, downwardAPI
Persistent (지속 스토리지) Pod 삭제 후에도 데이터 유지 가능 persistentVolumeClaim, nfs, awsElasticBlockStore, gcePersistentDisk
CSI 기반 스토리지 외부 스토리지 드라이버 통합 방식 CSI Volume, StorageClass 기반 동적 프로비저닝

 


3️⃣ 주요 볼륨 유형별 상세 설명


🔹 3.1. emptyDir

가장 기본적인 임시 볼륨입니다.

  • Pod가 노드에 스케줄링될 때 생성
  • Pod가 삭제되면 데이터도 삭제됨
  • Pod 내 컨테이너 간 공유 가능
 
volumes: - name: cache-volume emptyDir: {}

사용 예시:

  • 임시 캐시 디렉토리
  • 빌드 중간 결과물 저장

🔹 3.2. hostPath

호스트 노드의 파일시스템 디렉토리를 직접 마운트합니다.

 
volumes: - name: host-volume hostPath: path: /var/log/myapp

장점:

  • 노드의 로컬 파일 접근 가능
    단점:
  • Pod가 다른 노드로 이동하면 데이터 손실
  • 보안상 위험할 수 있음

사용 예시:

  • 로그 파일 수집용 디렉토리
  • 노드별 시스템 정보 접근

🔹 3.3. configMap / secret / downwardAPI

이들은 환경 설정 및 메타데이터 제공용 볼륨입니다.

유형 설명 사용 예시
configMap 설정 파일, 환경 변수 제공 애플리케이션 설정 주입
secret 암호화된 데이터 저장 비밀번호, API 키
downwardAPI Pod의 메타데이터 제공 Pod 이름, Namespace 정보 전달

이 볼륨들은 파일 형태로 Pod 내부에 마운트할 수 있습니다.


🔹 3.4. nfs (Network File System)

네트워크 파일 시스템(NFS) 서버를 사용하여 여러 Pod가 동일한 스토리지를 공유할 수 있습니다.

 
volumes: - name: shared-storage nfs: server: 10.0.0.5 path: /exported/path

특징:

  • 다중 Pod 간 공유 가능
  • 데이터 지속성 보장
  • 네트워크 지연 발생 가능

🔹 3.5. 클라우드 제공 스토리지 볼륨

클라우드 환경에서는 각 플랫폼의 블록 스토리지 서비스를 바로 사용할 수 있습니다.

볼륨 타입 설명
awsElasticBlockStore AWS EBS 볼륨 연결
gcePersistentDisk GCP Persistent Disk 연결
azureDisk / azureFile Azure Managed Disk / File Share
cinder OpenStack Cinder 볼륨 사용

이들은 대부분 PersistentVolume(PV)PersistentVolumeClaim(PVC) 형태로 사용됩니다.


🔹 3.6. persistentVolumeClaim (PVC)

쿠버네티스에서 데이터 지속성(Persistence) 을 보장하는 핵심 개념입니다.

PVC는 사용자가 필요한 스토리지 용량과 접근 모드를 선언하고,
관리자가 생성한 PV 또는 StorageClass 기반 동적 프로비저닝으로 실제 볼륨이 할당됩니다.

 
volumes: - name: mydata persistentVolumeClaim: claimName: my-pvc

장점:

  • Pod와 스토리지의 분리
  • 다양한 백엔드 스토리지 지원
  • Pod 삭제 후에도 데이터 유지

접근 모드:

  • ReadWriteOnce (RWO): 단일 노드 쓰기 가능
  • ReadOnlyMany (ROX): 여러 노드 읽기 가능
  • ReadWriteMany (RWX): 여러 노드에서 읽기/쓰기 가능

🔹 3.7. CSI (Container Storage Interface)

가장 현대적인 스토리지 확장 방식입니다.

CSI는 외부 스토리지 공급자(예: NetApp, Ceph, Longhorn 등)가
Kubernetes와 호환되는 드라이버 플러그인을 통해 볼륨을 동적으로 제공하는 표준입니다.

구성요소:

  • CSI Driver : 스토리지 시스템과 연동
  • StorageClass : 볼륨 생성 정책 정의
  • PVC : 사용자의 요청 인터페이스

예시:

 
 
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: fast-ssd
provisioner: csi.aws.com
parameters:
  type: gp3
reclaimPolicy: Retain

4️⃣ 동적 프로비저닝 (Dynamic Provisioning)

StorageClass를 사용하면 PVC 요청 시 자동으로 PV가 생성됩니다.

  • 관리자가 미리 PV를 만들 필요 없음
  • 클라우드나 CSI 스토리지 드라이버에서 자동 처리

예시 구조:

 
PVC → StorageClass → Provisioner(CSI Plugin) → 실제 Volume 생성

5️⃣ 쿠버네티스 볼륨 수명 비교 요약표

유형 지속성 공유 가능 사용 예시
emptyDir Pod 종료 시 삭제 O (Pod 내부) 임시 캐시, 빌드 파일
hostPath 노드 단위 제한적 로그 수집, 디버깅
configMap/secret Pod 종료 시 삭제 X 설정 주입, 인증키
nfs 지속 O 다중 Pod 데이터 공유
awsElasticBlockStore 등 지속 제한적 단일 Pod 스토리지
PVC (PV) 지속 O 데이터베이스, 애플리케이션 데이터
CSI 지속 O 고가용성 스토리지, 클라우드 통합

6️⃣ 실제 운영 환경에서의 선택 가이드

시나리오 권장 볼륨 유형
임시 파일, 캐시 emptyDir
로그 수집 hostPath, emptyDir
설정 파일 주입 configMap
보안정보 (비밀번호, 토큰) secret
DB 스토리지 PVC + StorageClass (동적 프로비저닝)
클라우드 환경 CSI 기반 스토리지 (EBS, GCP Disk 등)
다중 Pod 공유 스토리지 nfs, RWX 지원 CSI 드라이버

7️⃣ 정리

  • emptyDir, hostPath: 임시 데이터
  • configMap, secret: 설정 및 보안정보
  • PVC, PV: 데이터 지속성 보장
  • StorageClass, CSI: 동적 확장성과 클라우드 통합

쿠버네티스의 스토리지는 단순히 파일을 저장하는 것을 넘어
애플리케이션의 가용성, 안정성, 확장성과 직결되므로
업무 환경에 맞는 볼륨 전략을 설계하는 것이 핵심입니다.

 

 

반응형

댓글