쿠버네티스에서 PersistentVolume(PV)와 PersistentVolumeClaim(PVC)은 컨테이너가 종료되어도 데이터를 유지할 수 있도록 하는 스토리지 관리 기능입니다.
이번 글에서는 기본적인 PersistentVolume을 설정하고, 이를 PersistentVolumeClaim을 통해 사용하는 방법을 다룹니다.
📌 글에서 다루는 상황들
1️⃣ 기본적인 PersistentVolume 및 PersistentVolumeClaim 설정
2️⃣ Pod에서 PersistentVolumeClaim을 활용한 스토리지 마운트
각 문제를 실무에서 바로 활용할 수 있도록 Manifest 템플릿과 예상 결과 값을 제공합니다.
1️⃣ 기본적인 PersistentVolume 및 PersistentVolumeClaim 설정
❓ 문제 상황
운영팀에서 애플리케이션이 종료되더라도 데이터를 유지할 수 있도록 영구적인 스토리지를 설정해야 하는 요구사항이 생겼습니다.
쿠버네티스에서 기본적으로 Pod이 삭제되면 해당 Pod에 저장된 데이터도 사라지지만, PersistentVolume을 활용하면 데이터를 유지할 수 있습니다.
• 5Gi 크기의 PersistentVolume을 생성해야 합니다.
• PV는 ReadWriteOnce 모드로 설정해야 합니다.
• PVC를 생성하여 해당 PersistentVolume을 사용할 수 있도록 해야 합니다.
✅ 어떻게 해결할 수 있을까요?
🛠️ 해결 방법
1. PersistentVolume을 생성하여 5Gi 크기의 스토리지를 할당해야 합니다.
• accessModes: ReadWriteOnce → 한 개의 Pod에서만 읽기/쓰기가 가능
2. PersistentVolumeClaim을 생성하여 Pod에서 해당 스토리지를 사용할 수 있도록 설정해야 합니다.
✅ 정답 Manifest (PersistentVolume 및 PersistentVolumeClaim 설정)
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-example # PersistentVolume 이름
spec:
capacity:
storage: 5Gi # 5Gi 크기의 저장소 할당
accessModes:
- ReadWriteOnce # 하나의 Pod에서만 읽기/쓰기 가능
persistentVolumeReclaimPolicy: Retain # 데이터 유지 (삭제되지 않음)
hostPath:
path: "/mnt/data" # 노드의 특정 디렉터리를 PersistentVolume으로 사용
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-example # PersistentVolumeClaim 이름
spec:
accessModes:
- ReadWriteOnce # PersistentVolume의 액세스 모드와 동일해야 함
resources:
requests:
storage: 5Gi # 요청하는 스토리지 크기
📌 적용 후 예상 결과 값
1. PersistentVolume 및 PersistentVolumeClaim 생성 확인
kubectl get pv
kubectl get pvc
💡 예상 출력 값
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS AGE
pv-example 5Gi RWO Retain Bound default/pvc-example 5s
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
pvc-example Bound pv-example 5Gi RWO 5s
2️⃣ Pod에서 PersistentVolumeClaim을 활용한 스토리지 마운트
❓ 문제 상황
운영팀에서 애플리케이션이 데이터를 저장하고, 컨테이너가 재시작되어도 해당 데이터를 유지해야 하는 요구사항이 생겼습니다.
이를 위해 Pod에서 PersistentVolumeClaim을 마운트하여 지속적인 데이터 저장소를 제공해야 합니다.
• Pod은 pvc-example을 사용하여 /data 경로에 볼륨을 마운트해야 합니다.
• 컨테이너에서 /data에 저장한 파일이 유지되어야 합니다.
✅ 어떻게 해결할 수 있을까요?
🛠️ 해결 방법
1. Pod을 생성할 때, PersistentVolumeClaim을 volumeMounts로 마운트하여 스토리지를 활용하도록 설정해야 합니다.
• volumes.persistentVolumeClaim.claimName을 pvc-example로 지정
2. Pod이 삭제된 후 다시 생성해도 /data의 데이터가 유지되는지 확인해야 합니다.
✅ 정답 Manifest (Pod에서 PersistentVolumeClaim 마운트 설정)
apiVersion: v1
kind: Pod
metadata:
name: pvc-pod # Pod 이름
spec:
containers:
- name: busybox
image: busybox
command: ["sh", "-c", "echo 'Persistent Data' > /data/test.txt && sleep 3600"]
volumeMounts:
- mountPath: "/data"
name: storage
volumes:
- name: storage
persistentVolumeClaim:
claimName: pvc-example # 앞서 생성한 PVC 사용
📌 적용 후 예상 결과 값
1. Pod 생성 후 데이터 저장 확인
kubectl exec pvc-pod -- cat /data/test.txt
💡 예상 출력 값
Persistent Data
2. Pod 삭제 후 다시 생성한 후 데이터 유지 확인
kubectl delete pod pvc-pod
kubectl apply -f pvc-pod.yaml
kubectl exec pvc-pod -- cat /data/test.txt
💡 예상 출력 값
Persistent Data # Pod이 재시작되어도 데이터 유지됨