Kubernetes/Kubernetes Advanced

📌 [StatefulSet 심화편 #29] StatefulSet에서 Persistent Volume Reclaim 정책 이해 및 활용

ygtoken 2025. 3. 15. 11:22
728x90

 

1️⃣ 개요

 

StatefulSet을 운영할 때 Persistent Volume(PV)이 어떻게 유지되고 삭제되는지를 정확히 이해하는 것이 중요합니다.

특히, StatefulSet은 Pod가 삭제되더라도 동일한 데이터를 유지해야 하기 때문에 PV의 Reclaim(재활용) 정책을 신중하게 설정해야 합니다.

 

이번 글에서는 Kubernetes Persistent Volume의 Reclaim 정책을 설명하고, StatefulSet에서 적절한 PV Reclaim 전략을 적용하는 방법을 정리하겠습니다. 🚀

 


2️⃣ Persistent Volume Reclaim 정책이란?

 

📌 Persistent Volume(PV) Reclaim 정책은 PVC(Persistent Volume Claim) 삭제 후 PV의 동작을 결정하는 설정입니다.

Reclaim 정책 설명 사용 사례
Retain PVC 삭제 후에도 PV를 유지 (데이터 보호) StatefulSet (데이터베이스, Kafka 등)
Delete PVC 삭제 시 PV도 함께 삭제 임시 데이터 저장 (CI/CD 캐시)
Recycle (Deprecated) PVC 삭제 시 PV를 초기화 후 재사용 더 이상 사용되지 않음

StatefulSet의 경우, 데이터 보존이 중요하므로 기본적으로 Retain 정책을 사용해야 합니다.

 


3️⃣ StatefulSet에서 Reclaim 정책 확인 및 변경 방법

 

✅ 1. 현재 Persistent Volume의 Reclaim 정책 확인

 

📌 현재 PV의 Reclaim 정책 확인 명령어

kubectl get pv

 

출력 예시:

NAME              CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS
pvc-12345678      10Gi       RWO            Retain           Bound
pvc-87654321      20Gi       RWO            Delete           Available

Reclaim 정책이 Retain인지 Delete인지 확인할 수 있습니다.

 


✅ 2. StatefulSet의 Persistent Volume을 Retain으로 변경하는 방법

 

📌 (1) 기존 PV의 Reclaim 정책 변경

kubectl patch pv pvc-12345678 -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}'

 

📌 (2) 변경된 Reclaim 정책 확인

kubectl get pv pvc-12345678 -o jsonpath='{.spec.persistentVolumeReclaimPolicy}'

 

출력:

Retain

이제 PVC가 삭제되더라도 PV가 유지되며, 데이터를 보호할 수 있습니다.

 


4️⃣ StatefulSet PVC 삭제 후 기존 PV를 재활용하는 방법

 

PVC를 삭제한 후에도 기존 PV를 StatefulSet에서 재사용하려면 수동으로 바인딩해야 합니다.

 

📌 (1) PVC 삭제 후 PV가 “Released” 상태인지 확인

kubectl get pv

 

출력 예시:

NAME              CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS
pvc-12345678      10Gi       RWO            Retain           Released

PVC가 삭제되었지만 PV는 남아 있는 상태입니다.

 

📌 (2) 기존 PV를 새로운 PVC와 연결

kubectl patch pv pvc-12345678 -p '{"spec":{"claimRef": null}}'

 

📌 (3) 새로운 PVC를 생성하여 기존 PV를 재활용

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-data
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
  volumeName: pvc-12345678  # 기존 PV와 바인딩

 

📌 (4) PVC 적용 후 정상적으로 Bound 상태인지 확인

kubectl get pvc

 

출력 예시:

NAME         STATUS    VOLUME         CAPACITY
mysql-data   Bound     pvc-12345678   10Gi

이제 기존 데이터를 유지한 채 새로운 PVC에서 PV를 재사용할 수 있습니다.

 


5️⃣ StatefulSet에서 Reclaim 정책 적용 시 고려해야 할 사항

 

✅ 1. PVC 자동 삭제를 방지하는 StatefulSet 설정

 

일반적으로 StatefulSet을 삭제할 때 PVC도 자동으로 삭제되지 않도록 설정해야 합니다.

 

📌 StatefulSet PVC 자동 삭제 방지 설정

persistentVolumeClaimRetentionPolicy:
  whenDeleted: Retain
  whenScaled: Retain

StatefulSet 삭제 후에도 PVC가 남아 있도록 설정할 수 있습니다.

 


✅ 2. 특정 클라우드 환경에서의 Reclaim 정책 적용 주의사항

 

클라우드 제공업체마다 Reclaim 정책이 다르게 동작할 수 있습니다.

 

클라우드 환경 기본 Reclaim  정책변경 가능 여부
AWS EBS Delete ✅ 변경 가능 (Retain 권장)
Azure Disk Delete ✅ 변경 가능 (Retain 권장)
GCP Persistent Disk Retain ✅ 변경 가능

클라우드 환경에서는 StatefulSet의 PV가 자동 삭제되지 않도록 Retain으로 변경하는 것이 안전합니다.

 


✅ 3. StatefulSet에서 PV를 확장하는 방법

 

📌 (1) PVC 크기 변경

kubectl patch pvc mysql-data -p '{"spec":{"resources":{"requests":{"storage":"20Gi"}}}}'

 

📌 (2) 확장된 PV 적용 확인

kubectl get pvc

 

출력 예시:

NAME         STATUS    VOLUME         CAPACITY
mysql-data   Bound     pvc-12345678   20Gi

StatefulSet PVC를 확장할 때 기존 PV를 재사용하면서 크기를 늘릴 수 있습니다.

 


🔥 6️⃣ 결론

 

StatefulSet의 Persistent Volume은 기본적으로 Retain 정책을 적용해야 데이터 보호가 가능함

PVC 삭제 후에도 기존 PV를 재활용하려면 claimRef를 삭제한 후 새로운 PVC와 연결해야 함

StatefulSet을 삭제하더라도 PVC가 자동으로 삭제되지 않도록 persistentVolumeClaimRetentionPolicy 설정 필요

클라우드 환경에서는 기본 Reclaim 정책이 다를 수 있으므로, Retain 설정을 검토해야 함

PV 크기를 확장할 때 기존 데이터를 유지하면서 PVC를 업데이트할 수 있음

728x90