반응형
들어가며: Pod에서 데이터 저장은 어떻게 할까?
컨테이너는 기본적으로 **휘발성(volatile)**입니다.
컨테이너가 재시작되면 컨테이너 내부에 저장된 데이터는 사라집니다.
그렇다면 로그, DB 데이터, 설정 파일 같은 중요한 데이터는 어떻게 보존할까요?
정답은 Kubernetes Volume입니다.
이번 글에서는 다음 내용을 다룹니다:
- Pod와 Volume의 관계
- 다양한 볼륨 타입 (emptyDir, hostPath, PersistentVolume 등)
- PVC(PersistentVolumeClaim) 활용법
- 실습 예제와 YAML 파일 작성법
1. Volume이란 무엇인가?
**Volume(볼륨)**은 Kubernetes에서 Pod에 마운트되는 독립적인 스토리지 단위입니다.
- 컨테이너가 삭제되어도 Volume 데이터는 유지 가능 (특정 타입에 따라 다름)
- 여러 컨테이너 간 데이터 공유 가능
- 외부 스토리지(NFS, AWS EBS, Ceph 등)와 연결 가능
2. 왜 Pod에 Volume이 필요한가?
질문: “컨테이너 이미지에 데이터를 넣으면 되지 않을까?”
답변: 컨테이너는 불변(immutable) 환경입니다. 재시작 시 데이터가 초기화됩니다.
볼륨을 사용하면:
- 로그나 캐시 파일이 사라지지 않음
- 여러 컨테이너가 동일한 데이터를 공유
- Persistent Volume(PV)과 PVC를 통해 클러스터 수준에서 스토리지 관리 가능
3. Kubernetes 볼륨의 종류
(1) emptyDir
- Pod가 생성될 때 빈 디렉토리 생성
- Pod가 삭제되면 데이터도 삭제됨
- 캐시, 임시 데이터 저장 용도로 사용
volumes:
- name: cache-volume
emptyDir: {}
(2) hostPath
- 노드의 로컬 디렉토리를 Pod에 마운트
- 개발 환경에서만 권장 (운영 환경에서는 노드 종속성 때문에 위험)
volumes:
- name: host-volume
hostPath:
path: /data/logs
(3) PersistentVolume (PV) & PersistentVolumeClaim (PVC)
- 클러스터 전역에서 사용할 수 있는 지속성 스토리지
- PVC를 통해 PV를 Pod와 연결
- AWS EBS, GCP PD, NFS 등 외부 스토리지와 연계 가능
4. Volume을 Pod에 연결하는 방법
예시: emptyDir 사용
apiVersion: v1
kind: Pod
metadata:
name: volume-pod
spec:
containers:
- name: nginx
image: nginx
volumeMounts:
- name: cache-volume
mountPath: /usr/share/nginx/html
volumes:
- name: cache-volume
emptyDir: {}
/usr/share/nginx/html
경로에 Pod 레벨의 임시 저장소가 연결됨
5. PersistentVolume & PersistentVolumeClaim 실습
(1) PV 정의 예시
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-example
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
hostPath:
path: /mnt/data
(2) PVC 정의 예시
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-example
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
(3) Pod에서 PVC 마운트
apiVersion: v1
kind: Pod
metadata:
name: pvc-pod
spec:
containers:
- name: app
image: nginx
volumeMounts:
- mountPath: "/app/data"
name: storage
volumes:
- name: storage
persistentVolumeClaim:
claimName: pvc-example
6. 볼륨 접근 모드(AccessModes)
모드 | 설명 |
---|---|
ReadWriteOnce | 하나의 노드에서 읽기/쓰기 가능 |
ReadOnlyMany | 여러 노드에서 읽기 가능 |
ReadWriteMany | 여러 노드에서 읽기/쓰기 가능 |
7. FAQ (Answer Engine Optimization)
Q1. emptyDir과 hostPath의 차이점은?
A. emptyDir
는 Pod 생명주기와 함께 생성·삭제되는 임시 저장소이고, hostPath
는 노드의 로컬 디렉토리를 공유합니다.
Q2. PVC 없이 PV를 직접 쓸 수 있나요?
A. PV는 PVC를 통해 요청되어야 하며, Pod가 직접 PV를 참조할 수 없습니다.
Q3. 클라우드 환경에서는 어떤 볼륨을 쓰나요?
A. AWS EBS, GCP Persistent Disk, Azure Disk 등 클라우드 제공 스토리지를 PV로 매핑합니다.
8. 핵심 요약
개념 | 설명 |
---|---|
Volume | Pod에 연결되는 스토리지 |
PV | 클러스터 전역에서 관리되는 스토리지 리소스 |
PVC | Pod에서 스토리지를 요청하는 리소스 |
emptyDir | Pod 임시 스토리지 |
hostPath | 노드 로컬 스토리지 |
AccessModes | 스토리지 접근 모드 |
마무리
Pod에 데이터를 안전하게 저장하고 공유하려면 Volume과 PV/PVC 개념을 이해해야 합니다.
반응형
'개발 창고 > Server' 카테고리의 다른 글
Pod 리소스 관리: Requests, Limits, QoS 완벽 이해하기 (2) | 2025.07.23 |
---|---|
Pod에 정보 전달하기: ConfigMap과 Secret 완벽 가이드 (2) | 2025.07.22 |
Pod 라벨링 시스템 이해하기: 왜 Kubernetes에서 라벨이 중요한가? (3) | 2025.07.20 |
핵심 리소스, Pod: 쿠버네티스 기본 단위 이해하기 (3) | 2025.07.19 |
kubectl 명령어 꿀팁 모음: 실전에서 바로 써먹는 노하우 (2) | 2025.07.18 |