볼륨 타입

Kubernetes의 다양한 볼륨 타입과 사용처 완벽 가이드


Kubernetes의 다양한 볼륨 타입과 사용처 완벽 가이드

목표: 상황에 맞는 볼륨 타입을 선택하고 구성할 수 있는 수준


📦 볼륨 타입 비교

타입수명공유사용처
emptyDirPod컨테이너 간임시 데이터, 캐시
hostPath노드노드 상에서로그, 설정 (단일 노드)
nfs외부다중 노드공유 스토리지
persistentVolumeClaim외부PVC에 따라영구 데이터
configMap/secret클러스터다중 Pod설정, 인증서
csi외부드라이버에 따라클라우드 스토리지

💾 emptyDir

Pod가 살아있는 동안만 존재하는 임시 볼륨.

apiVersion: v1
kind: Pod
metadata:
  name: emptydir-demo
spec:
  containers:
  - name: writer
    image: busybox
    command: ["sh", "-c", "while true; do echo $(date) >> /data/log.txt; sleep 5; done"]
    volumeMounts:
    - name: shared-data
      mountPath: /data
  - name: reader
    image: busybox
    command: ["sh", "-c", "while true; do cat /data/log.txt; sleep 5; done"]
    volumeMounts:
    - name: shared-data
      mountPath: /data
  volumes:
  - name: shared-data
    emptyDir: {}

특징:

  • 컨테이너 간 데이터 공유
  • Pod 삭제 시 데이터 삭제
  • 노드의 디스크/메모리 사용

🖥️ hostPath

노드의 파일시스템을 Pod에 마운트.

apiVersion: v1
kind: Pod
metadata:
  name: hostpath-demo
spec:
  containers:
  - name: app
    image: busybox
    volumeMounts:
    - name: host-log
      mountPath: /var/log/host
  volumes:
  - name: host-log
    hostPath:
      path: /var/log
      type: Directory

주의:

  • 노드에 종속적 (Pod 이동 시 데이터 유실)
  • 보안 위험 (노드 파일시스템 노출)
  • DaemonSet에서 주로 사용

🌐 NFS

네트워크 파일시스템을 Pod에 마운트.

apiVersion: v1
kind: Pod
metadata:
  name: nfs-demo
spec:
  containers:
  - name: app
    image: nginx
    volumeMounts:
    - name: nfs-volume
      mountPath: /usr/share/nginx/html
  volumes:
  - name: nfs-volume
    nfs:
      server: 192.168.1.100
      path: /exports/data

특징:

  • 다중 노드에서 공유 가능
  • ReadWriteMany 지원
  • NFS 서버 필요

🔧 CSI (Container Storage Interface)

개념

graph TB
    subgraph "CSI 아키텍처"
        KUBE["🔧 kubelet"] -->|"CSI gRPC"| DRIVER["📦 CSI Driver"]
        DRIVER -->|"Provision"| CLOUD["☁️ Cloud Storage"]
        DRIVER -->|"Attach"| NODE["💾 Node Volume"]
    end

AWS EBS CSI

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: ebs-sc
provisioner: ebs.csi.aws.com
parameters:
  type: gp3
  encrypted: "true"
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer

사용

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: ebs-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: ebs-sc
  resources:
    requests:
      storage: 10Gi

📋 체크리스트

  • emptyDir 사용처
  • hostPath 주의사항
  • NFS 구성
  • CSI 드라이버 설치
  • StorageClass 설정
  • 볼륨 확장

🔗 관련 노트

  • 02-06-PV-PVC-StorageClass — 동적 프로비저닝
  • 02-08-스테이트풀-앱-배포 — 상태유지 앱
  • 01-05-StatefulSet-관리 — StatefulSet

마지막 업데이트: 2026-06-01