[Scenario PlayBook - 심화편 | Low Level #9] PersistentVolume을 이용한 애플리케이션 데이터 저장소 설정
쿠버네티스에서 애플리케이션이 재시작되거나 이동하더라도 데이터를 유지할 수 있도록 스토리지를 설정하는 것이 중요합니다.
이를 위해 PersistentVolume(PV)과 PersistentVolumeClaim(PVC)을 활용하여 안정적인 데이터 저장소를 구성하는 방법을 다룹니다.
📌 글에서 다루는 상황들
1. PersistentVolume(PV) 및 PersistentVolumeClaim(PVC)을 활용한 데이터 저장
2. Pod에서 PVC를 마운트하여 데이터 유지 확인
3. PV와 PVC를 활용한 영구 스토리지 운영 전략
각 문제를 실무에서 바로 활용할 수 있도록 Manifest 템플릿과 예상 결과 값을 제공합니다.
1️⃣ PersistentVolume(PV) 및 PersistentVolumeClaim(PVC)을 활용한 데이터 저장
❓ 문제 상황
운영팀에서 애플리케이션이 재시작되더라도 데이터를 유지할 수 있도록 영구적인 저장소를 설정해야 합니다.
이를 위해 PersistentVolume(PV)과 PersistentVolumeClaim(PVC)을 설정하여 데이터를 유지해야 합니다.
• PV의 크기: 2Gi
• 접근 모드: ReadWriteOnce
• PVC를 생성하여 특정 Pod에서 해당 스토리지를 사용할 수 있도록 설정
✅ 어떻게 해결할 수 있을까요?
🛠️ 해결 방법
1. PersistentVolume(PV)을 생성하여 클러스터에서 사용할 수 있는 스토리지를 정의합니다.
2. PersistentVolumeClaim(PVC)을 생성하여 특정 Pod에서 스토리지를 요청합니다.
✅ 정답 Manifest (PersistentVolume 및 PersistentVolumeClaim 설정)
🔹 PersistentVolume(PV) 생성
apiVersion: v1
kind: PersistentVolume
metadata:
name: web-pv
spec:
capacity:
storage: 2Gi # 2GB 크기의 볼륨
accessModes:
- ReadWriteOnce # 한 개의 노드에서 읽기/쓰기 가능
persistentVolumeReclaimPolicy: Retain # 데이터 유지
hostPath:
path: "/mnt/data" # 노드 내부 경로
🔹 PersistentVolumeClaim(PVC) 생성
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: web-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 2Gi
📌 적용 후 예상 결과 값
1. PersistentVolume(PV) 및 PVC가 정상적으로 생성되었는지 확인
kubectl get pv
kubectl get pvc
💡 예상 출력 값
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS AGE
web-pv 2Gi RWO Retain Bound default/web-pvc manual 5s
2️⃣ Pod에서 PVC를 마운트하여 데이터 유지 확인
❓ 문제 상황
운영팀에서 Pod이 PersistentVolumeClaim(PVC)을 사용하여 데이터를 저장할 수 있도록 설정해야 합니다.
Pod이 재시작되거나 이동하더라도 저장된 데이터가 유지되어야 합니다.
• Pod에서 /data 디렉터리를 PVC와 연결
• Pod이 재시작되더라도 해당 디렉터리의 데이터가 유지되어야 함
✅ 어떻게 해결할 수 있을까요?
🛠️ 해결 방법
1. Pod에서 PVC를 마운트하도록 설정합니다.
2. kubectl을 사용하여 Pod이 정상적으로 데이터를 유지하는지 확인합니다.
✅ 정답 Manifest (Pod에서 PVC 마운트 설정)
apiVersion: v1
kind: Pod
metadata:
name: pvc-pod
spec:
containers:
- name: app-container
image: nginx
volumeMounts:
- mountPath: "/data" # 데이터 저장 경로
name: storage-volume
volumes:
- name: storage-volume
persistentVolumeClaim:
claimName: web-pvc # PVC 연결
📌 적용 후 예상 결과 값
1. Pod 내 데이터 저장 확인
kubectl exec pvc-pod -- sh -c "echo 'Hello, Kubernetes' > /data/test.txt"
💡 예상 출력 값 (데이터 저장 성공)
Hello, Kubernetes
2. Pod 삭제 후 재생성 및 데이터 유지 확인
kubectl delete pod pvc-pod
kubectl apply -f pvc-pod.yaml
kubectl exec pvc-pod -- cat /data/test.txt
💡 예상 출력 값
Hello, Kubernetes
✅ Pod이 삭제되었더라도 데이터가 유지됨
3️⃣ PV와 PVC를 활용한 영구 스토리지 운영 전략
❓ 문제 상황
운영팀에서 PersistentVolume을 삭제하더라도 데이터를 유지해야 합니다.
PersistentVolume을 삭제해도 PersistentVolumeClaim이 바인딩된 상태라면 데이터를 보호할 수 있어야 합니다.
• PV 삭제 시 데이터를 유지하는 Retain 정책 설정
• PVC가 바운드된 상태에서 PV를 삭제할 경우, 데이터를 유지해야 함
✅ 어떻게 해결할 수 있을까요?
🛠️ 해결 방법
1. PersistentVolume의 persistentVolumeReclaimPolicy를 Retain으로 설정합니다.
2. PV 삭제 후에도 데이터가 유지되는지 확인합니다.
✅ PersistentVolume 삭제 후 데이터 유지 확인
🔹 PersistentVolume 삭제
kubectl delete pv web-pv
💡 예상 출력 값
persistentvolume "web-pv" deleted
🔹 PVC 상태 확인 (바운드 유지됨)
kubectl get pvc
💡 예상 출력 값
NAME STATUS VOLUME CAPACITY ACCESS MODES AGE
web-pvc Bound web-pv 2Gi RWO 10m
✅ PersistentVolume이 삭제되었어도 PVC가 바운드된 상태에서 데이터 유지됨