볼륨(Volume)이란 Kubernetes에서 컨테이너가 데이터를 저장하고 공유할 수 있도록 지원하는 스토리지 메커니즘이다. 컨테이너 내부의 파일 시스템은 휘발성이라 Pod가 재시작되면 데이터가 손실될 수 있다. 볼륨을 사용하면 Pod가 재시작되더라도 데이터를 유지할 수 있다. 볼륨은 Pod의 생명 주기를 따르지만, Persistent Volume을 사용하면 Pod가 삭제되어도 데이터 유지 가능하다.
| 개념 | 설명 |
|---|---|
| Volume | Pod 내에서 컨테이너 간 데이터 공유용 저장소 |
| PersistentVolume (PV) | 클러스터에서 관리하는 영구적 볼륨 |
| PersistentVolumeClaim (PVC) | Pod가 영구적 볼륨을 요청하는 방법 |
| StorageClass | 동적 볼륨 프로비저닝을 위한 스토리지 설정 |
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: local-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
클러스터 관리자가 미리 생성해 둔 영구적인 스토리지 리소스이다. Lifecycle이 Pod와 독립적이며 StorageClass를 통해 동적 볼륨 프로비저닝 가능하다.
apiVersion: v1
kind: PersistentVolume
metadata:
name: mypv1
labels:
type: local
spec:
storageClassName: local-storage
persistentVolumeReclaimPolicy: Delete
capacity:
storage: 500Mi
accessModes:
- ReadWriteOnce
hostPath:
path: "/mnt/data1"
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- slave1
Pod가 필요한 스토리지를 요청하는 방법이다. PVC를 통해 특정 PV를 사용하거나 StorageClass를 이용해 동적 프로비저닝 가능하다.
k apply -f mypvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mypvc
spec:
storageClassName: local-storage
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 500Mi
Kubernetes에서 볼륨 접근 모드는 하나 이상의 Pod가 볼륨에 접근할 수 있는 방법을 정의한다. 지원되는 접근 모드는 다음과 같다
ReadWriteOnce (RWO): 볼륨을 하나의 노드에서 읽기/쓰기 모드로 사용. 여러 개의 Pod가 동일한 노드에서만 볼륨을 공유 ReadOnlyMany (ROX): 여러 개의 노드에서 읽기 전용으로 볼륨을 사용 ReadWriteMany (RWX): 여러 개의 노드에서 읽기/쓰기가 가능하도록 볼륨을 사용 ReadWriteOncePod (RWOP): 볼륨을 하나의 Pod에서만 읽기/쓰기 모드로 사용. 특정 Pod에 대해서만 독점적인 액세스를 허용볼륨 재사용 정책은 PersistentVolume (PV)이 삭제된 후 해당 볼륨의 데이터를 어떻게 처리할지에 대한 규칙을 정의한다.
Retain: PV가 삭제되어도 볼륨은 삭제되지 않는다. 즉, 사용자가 수동으로 PV를 삭제하거나 클러스터 외부에서 작업을 해야 한다.Delete: PV가 삭제되면 볼륨도 함께 삭제된다. 이 경우, 볼륨에 저장된 데이터도 영구적으로 삭제된다.Recycle (Deprecated): PV가 삭제되면 볼륨이 재사용을 위해 클린징된다. 하지만 이 정책은 더 이상 권장되지 않으며, 대신 다른 방식(예: Delete 또는 Retain)을 사용하는 것이 좋다.