개발 창고/Server

Pod 데이터 저장소 연결하기: Kubernetes 볼륨(Volume) 완벽 가이드

Royzero 2025. 7. 21. 22:00
반응형

들어가며: 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 개념을 이해해야 합니다.

반응형