Kubernetes/Kubernetes Best Practices

[Scenario PlayBook - 심화편 | Low Level #9] PersistentVolume을 이용한 애플리케이션 데이터 저장소 설정

ygtoken 2025. 3. 16. 18:54
728x90

 

쿠버네티스에서 애플리케이션이 재시작되거나 이동하더라도 데이터를 유지할 수 있도록 스토리지를 설정하는 것이 중요합니다.

이를 위해 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가 바운드된 상태에서 데이터 유지됨

 

728x90