Kubernetes의 스토리지 관리: Persistent Volume(PV) 및 Persistent Volume Claim(PVC)

1. 개요

Kubernetes는 기본적으로 상태가 없는(stateless) 애플리케이션을 실행하는 데 적합하지만, 데이터의 지속성을 보장해야 하는 상태 저장(stateful) 애플리케이션도 많이 사용된다. 이를 위해 Kubernetes는 Persistent Volume(PV) 및 Persistent Volume Claim(PVC) 개념을 도입하여 스토리지를 동적으로 관리할 수 있도록 한다.

2. Persistent Volume(PV)란?

Persistent Volume(PV)은 클러스터 내에서 관리되는 독립적인 스토리지 리소스로, 관리자가 미리 생성해두고 사용자가 요청하여 사용할 수 있다. PV는 특정 스토리지 유형과 연결되며, 수명 주기가 Pod보다 길어 Pod가 재시작되거나 이동하더라도 데이터를 유지할 수 있다.

2.1 PV의 주요 속성

  • 스토리지 클래스(Storage Class): 동적 프로비저닝(dynamic provisioning)을 지원하는 경우 스토리지 클래스를 지정하여 자동으로 스토리지를 생성할 수 있음.
  • 액세스 모드(Access Modes):
    • ReadWriteOnce (RWO): 하나의 노드에서 읽기 및 쓰기 가능
    • ReadOnlyMany (ROX): 여러 노드에서 읽기만 가능
    • ReadWriteMany (RWX): 여러 노드에서 읽기 및 쓰기 가능
  • 용량(Capacity): 저장 가능한 데이터의 크기 지정.
  • 볼륨 플러그인(Volume Plugin): NFS, iSCSI, AWS EBS, Azure Disk, GCE Persistent Disk 등 다양한 스토리지 백엔드를 지원.
  • Reclaim Policy: 스토리지가 반환될 때 처리 방식 (Retain, Recycle, Delete).

2.2 PV 예제 (NFS 기반)

apiVersion: v1
kind: PersistentVolume
metadata:
  name: example-pv
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  nfs:
    path: /mnt/data
    server: 192.168.1.100

3. Persistent Volume Claim(PVC)란?

Persistent Volume Claim(PVC)은 사용자가 스토리지를 요청하는 방식이다. PVC는 PV에서 정의된 스토리지를 사용하기 위한 요구사항을 명시하며, Kubernetes가 적절한 PV를 자동으로 바인딩해준다.

3.1 PVC의 주요 속성

  • 요청된 스토리지 용량 및 액세스 모드 지정 가능.
  • 특정 Storage Class 지정 가능.
  • 동적으로 PV를 생성할 수도 있음.

3.2 PVC 예제

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: example-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi

4. PVC와 PV 바인딩

PVC가 생성되면 Kubernetes는 해당 PVC의 요구사항과 일치하는 PV를 찾아 자동으로 바인딩한다. 사용자는 PVC를 Pod에 마운트하여 영구적인 스토리지를 사용할 수 있다.

4.1 PVC를 사용하는 Pod 예제

apiVersion: v1
kind: Pod
metadata:
  name: example-pod
spec:
  containers:
    - name: my-container
      image: busybox
      volumeMounts:
        - mountPath: "/data"
          name: storage
  volumes:
    - name: storage
      persistentVolumeClaim:
        claimName: example-pvc

5. 동적 스토리지 프로비저닝

PV를 미리 생성하는 대신, Storage Class를 이용하여 PVC가 생성될 때 자동으로 PV를 동적으로 생성할 수도 있다.

5.1 Storage Class 예제 (AWS EBS)

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: standard
provisioner: kubernetes.io/aws-ebs
parameters:
  type: gp2

PVC에서 Storage Class를 지정하면 Kubernetes가 자동으로 EBS 볼륨을 프로비저닝하여 PVC에 연결해준다.

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

6. 결론

Kubernetes의 PV와 PVC는 애플리케이션이 지속적인 스토리지를 활용할 수 있도록 도와준다. 이를 통해 Stateful 애플리케이션을 Kubernetes 환경에서도 안정적으로 운영할 수 있으며, 동적 프로비저닝을 활용하면 운영의 편의성을 더욱 높일 수 있다.

댓글 달기

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