
🧱 쿠버네티스 스토리지 볼륨 유형 완벽 가이드
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 내 컨테이너 간 공유 가능
사용 예시:
- 임시 캐시 디렉토리
- 빌드 중간 결과물 저장
🔹 3.2. hostPath
호스트 노드의 파일시스템 디렉토리를 직접 마운트합니다.
장점:
- 노드의 로컬 파일 접근 가능
단점: - Pod가 다른 노드로 이동하면 데이터 손실
- 보안상 위험할 수 있음
사용 예시:
- 로그 파일 수집용 디렉토리
- 노드별 시스템 정보 접근
🔹 3.3. configMap / secret / downwardAPI
이들은 환경 설정 및 메타데이터 제공용 볼륨입니다.
| 유형 | 설명 | 사용 예시 |
| configMap | 설정 파일, 환경 변수 제공 | 애플리케이션 설정 주입 |
| secret | 암호화된 데이터 저장 | 비밀번호, API 키 |
| downwardAPI | Pod의 메타데이터 제공 | Pod 이름, Namespace 정보 전달 |
이 볼륨들은 파일 형태로 Pod 내부에 마운트할 수 있습니다.
🔹 3.4. nfs (Network File System)
네트워크 파일 시스템(NFS) 서버를 사용하여 여러 Pod가 동일한 스토리지를 공유할 수 있습니다.
특징:
- 다중 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 기반 동적 프로비저닝으로 실제 볼륨이 할당됩니다.
장점:
- Pod와 스토리지의 분리
- 다양한 백엔드 스토리지 지원
- Pod 삭제 후에도 데이터 유지
접근 모드:
- ReadWriteOnce (RWO): 단일 노드 쓰기 가능
- ReadOnlyMany (ROX): 여러 노드 읽기 가능
- ReadWriteMany (RWX): 여러 노드에서 읽기/쓰기 가능
🔹 3.7. CSI (Container Storage Interface)
가장 현대적인 스토리지 확장 방식입니다.
CSI는 외부 스토리지 공급자(예: NetApp, Ceph, Longhorn 등)가
Kubernetes와 호환되는 드라이버 플러그인을 통해 볼륨을 동적으로 제공하는 표준입니다.
구성요소:
- CSI Driver : 스토리지 시스템과 연동
- StorageClass : 볼륨 생성 정책 정의
- PVC : 사용자의 요청 인터페이스
예시:
kind: StorageClass
metadata:
name: fast-ssd
provisioner: csi.aws.com
parameters:
type: gp3
reclaimPolicy: Retain
4️⃣ 동적 프로비저닝 (Dynamic Provisioning)
StorageClass를 사용하면 PVC 요청 시 자동으로 PV가 생성됩니다.
- 관리자가 미리 PV를 만들 필요 없음
- 클라우드나 CSI 스토리지 드라이버에서 자동 처리
예시 구조:
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: 동적 확장성과 클라우드 통합
쿠버네티스의 스토리지는 단순히 파일을 저장하는 것을 넘어
애플리케이션의 가용성, 안정성, 확장성과 직결되므로
업무 환경에 맞는 볼륨 전략을 설계하는 것이 핵심입니다.
'[Kubernetes]' 카테고리의 다른 글
| sample devops end to end project v1- devops project | ci/cd declarative pipeline using devops tools (0) | 2023.07.22 |
|---|---|
| [마이크로 서비스] 사용하지 않는 경우!! (0) | 2023.07.11 |
| [k8s] Deployments란 무엇인가? & Update 방식 (0) | 2022.11.23 |
| [k8s] YAML 기본 문법 및 k8s yaml 작성방법 (0) | 2022.11.23 |
| [k8s] kubernetes의 Service가 무엇인가? (0) | 2022.11.22 |
| [k8s] Helm을 통해 Prometheus, Grafana 적용하기 (0) | 2022.11.22 |
| [k8s] 파드란 무엇인가, 파드 만들기(명령어로 생성 및 yaml로 생성) (0) | 2022.11.21 |
| [K8s] 쿠버네티스란 무엇인가? (0) | 2022.11.16 |
댓글