Kubernetes

쿠버네티스 스토리지 볼륨(Storage Volume)

1. 스토리지 볼륨 개념

쿠버네티스(Kubernetes)에서 볼륨(Volume)은 컨테이너가 재시작되거나 이동하더라도 데이터를 유지할 수 있도록 하는 저장소 개념입니다.
쿠버네티스는 기본적으로 컨테이너의 라이프사이클과 독립적인 스토리지를 제공하여 데이터가 손실되지 않도록 보장합니다.

스토리지 볼륨의 특징

컨테이너의 라이프사이클과 독립적

  • 컨테이너가 종료되거나 다시 시작되더라도 볼륨이 유지될 수 있음.

Pod 단위의 볼륨 공유 가능

  • 같은 Pod에 속한 여러 컨테이너가 동일한 볼륨을 공유할 수 있음.

다양한 스토리지 백엔드 지원

  • 로컬 디스크, 네트워크 스토리지(NFS, Ceph, GlusterFS 등), 클라우드 스토리지(AWS EBS, GCP Persistent Disk, Azure Disk 등)와 통합 가능.

퍼시스턴트 볼륨(Persistent Volume, PV)과 클레임(Persistent Volume Claim, PVC) 제공

  • 동적 스토리지 할당을 지원하여 스토리지 관리를 자동화할 수 있음.

2. 스토리지 볼륨 유형

쿠버네티스 볼륨은 크게 임시 볼륨(일반 볼륨)과 영구 볼륨(Persistent Volume, PV) 두 가지로 나뉩니다.

(1) 임시 볼륨 (일반 Volume)

Pod 내에서 컨테이너가 실행되는 동안만 유지되는 볼륨으로, Pod가 삭제되면 데이터도 사라집니다.
사용되는 주요 볼륨 유형은 다음과 같습니다.

  • emptyDir
    • Pod가 생성될 때 빈 디렉토리가 제공되며, Pod가 삭제되면 데이터도 삭제됨.
    • 같은 Pod 내 여러 컨테이너가 데이터를 공유하는 용도로 사용됨.
  • hostPath
    • 워커 노드의 특정 디렉토리를 Pod 내에서 마운트하는 방식.
    • 컨테이너가 재시작되거나 이동하면 데이터가 유지되지 않음.
  • configMap & secret
    • 설정 파일 및 민감한 정보를 저장하는 볼륨.
    • 쿠버네티스 API를 통해 관리됨.
  • emptyDir & downwardAPI
    • Pod 내부에서 일시적인 데이터를 저장하거나, 환경 변수 및 리소스 정보를 공유하는 용도로 사용됨.

(2) 퍼시스턴트 볼륨 (Persistent Volume, PV)

Pod의 라이프사이클과 독립적으로 데이터를 보존할 수 있는 볼륨입니다.
**Persistent Volume(PV)**과 Persistent Volume Claim(PVC) 개념을 활용하여 관리됩니다.

  • Persistent Volume (PV)
    • 클러스터에서 관리하는 스토리지 리소스(NFS, 클라우드 디스크, SAN 등).
    • 관리자는 PV를 미리 정의하여 사용할 수 있음.
  • Persistent Volume Claim (PVC)
    • Pod에서 필요한 스토리지를 요청하는 볼륨 클레임(Volume Claim).
    • PVC를 통해 특정 용량과 액세스 모드를 지정할 수 있음.
  • StorageClass
    • 동적 볼륨 할당(Dynamic Provisioning)을 지원하는 클래스.
    • 클라우드 스토리지(AWS EBS, GCP PD, Azure Disk 등)와 연계하여 자동으로 PV를 생성함.

3. 쿠버네티스 볼륨 구성 예제

임시 볼륨 (emptyDir) 사용 예시

apiVersion: v1
kind: Pod
metadata:
  name: emptydir-demo
spec:
  containers:
  - name: app
    image: busybox
    volumeMounts:
    - mountPath: "/data"
      name: cache-volume
  volumes:
  - name: cache-volume
    emptyDir: {}
  • Pod 내부에서 /data 디렉토리를 공유하는 빈 디렉토리(emptyDir)를 생성.
  • Pod가 삭제되면 데이터도 함께 삭제됨.

퍼시스턴트 볼륨 (PV & PVC) 사용 예시

(1) Persistent Volume (PV) 정의

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-demo
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  hostPath:
    path: "/mnt/data"
  • 1Gi 용량을 가진 PV 생성.
  • ReadWriteOnce 모드(한 개의 노드에서만 읽기/쓰기 가능).
  • /mnt/data 경로를 호스트에 마운트.

(2) Persistent Volume Claim (PVC) 요청

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-demo
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
  • 1Gi 크기의 영구 볼륨을 요청하는 PVC 정의.
  • 쿠버네티스가 PV를 자동으로 할당함.

(3) PVC를 사용하는 Pod

apiVersion: v1
kind: Pod
metadata:
  name: pv-pod
spec:
  containers:
  - name: app
    image: busybox
    volumeMounts:
    - mountPath: "/data"
      name: storage
  volumes:
  - name: storage
    persistentVolumeClaim:
      claimName: pvc-demo
  • pvc-demo를 마운트하여 /data 경로에서 사용.
  • Pod가 삭제되어도 PVC는 유지되므로 데이터가 보존됨.

 

🔹 정리

볼륨 유형 설명 데이터 유지
emptyDir Pod 내 임시 볼륨 ❌ (Pod 삭제 시 데이터 삭제)
hostPath 노드의 특정 디렉토리를 마운트 🔄 (노드 삭제 시 데이터 유실)
ConfigMap & Secret 설정 및 민감한 정보 저장 ✅ (쿠버네티스에서 관리)
Persistent Volume (PV) 클러스터가 관리하는 스토리지 ✅ (Pod 삭제 후에도 유지)
Persistent Volume Claim (PVC) Pod에서 PV를 요청하는 방식 ✅ (PVC가 삭제되지 않는 한 유지)
StorageClass 동적 스토리지 할당을 위한 설정 ✅ (자동으로 PV 생성)

 


🔹 쿠버네티스 볼륨 선택 가이드

  • 임시 데이터 저장: emptyDir
  • 설정 파일 저장: ConfigMap, Secret
  • 로컬 파일 접근: hostPath
  • 클러스터 내 영구 데이터 저장: Persistent Volume (PV) + PVC
  • 클라우드 기반 스토리지 사용: StorageClass (AWS EBS, GCP PD 등)

쿠버네티스에서 스토리지 볼륨을 활용하면 컨테이너의 상태를 유지하면서 유연한 데이터 관리가 가능

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

error: Content is protected !!