..
terminating pv rescue
개요
Terminating 상태로 걸려있는 Persistent Volume을 복구하는 가이드를 소개합니다.
TLDR
- 대상 독자: 쿠버네티스 클러스터 관리자
- 얻을 수 있는 이점: 데이터 손실 없이 안전하게 PV를 복구할 수 있습니다.
복구 절차 요약
Terminating 상태로 전환된 PV를 다시 Bound로 돌릴 방법은 없습니다. 따라서 PV를 지운 후 다시 보존된 EBS를 가져와서 새로 만드는 절차로 진행됩니다.
쿠버네티스 클러스터에서 복구 절차를 진행하는 과정을 그림으로 표현하면 다음과 같습니다.
상세 복구 절차
PersistentVolume이 EBS CSI Driver로 관리되는 경우를 가정합니다.
- persistentVolume이 Terminating 상태로 걸려있음.
- persistentVolume 리소스의
spec.persistentVolumeReclaimPolicy
를Retain
으로 설정합니다. 잠재적인 데이터 손실을 방지하기 위함입니다.
apiVersion: v1
kind: PersistentVolume
metadata:
name: pvc-889dfdd4-e2cd-43aa-ad80-4df39d310f81
spec:
persistentVolumeReclaimPolicy: Retain
- ⚠️ 중요: Velero나 AWS의 EBS 스냅샷 기능을 사용해서 복구 전 시점의 persistentVolume 리소스를 스냅샷 백업합니다.
- persistentVolume 리소스의
spec.claimRef
설정을 삭제합니다.
아래 PV 설정에서 claimRef 삭제:
apiVersion: v1
kind: PersistentVolume
metadata:
name: pvc-889dfdd4-e2cd-43aa-ad80-4df39d310f81
spec:
persistentVolumeReclaimPolicy: Retain
claimRef:
apiVersion: v1
kind: PersistentVolumeClaim
name: n8n
namespace: n8n
resourceVersion: "732371520"
uid: ee90f911-f51f-4048-86c6-4a50ff457b80
spec.claimRef
를 삭제하면 Terminating 상태의 persistentVolume 리소스가 즉시 삭제됩니다.- persistentVolume을 정적 프로비저닝(Static Provisioning) 방식으로 클러스터 바깥에 존재하는 (기존에 보존된) EBS를 PV로 다시 가져옵니다.
apiVersion: v1
kind: PersistentVolume
metadata:
name: test-pv
spec:
accessModes:
- ReadWriteOnce
capacity:
storage: 5Gi
csi:
driver: ebs.csi.aws.com
fsType: ext4
volumeHandle: vol-<YOUR_EBS_VOLUME_ID> # Change to your EBS Volume ID
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: topology.kubernetes.io/zone
operator: In
values:
- ap-northeast-2a # Change to your zone
persistentVolumeReclaimPolicy: Retain
storageClassName: gp3
volumeMode: Filesystem
- persistentVolumeClaim 리소스의
spec.volumeName
을 새로 만든 persistentVolume의 Name으로 변경합니다. 특정 PV에 PVC가 연결되게 하려면 이 작업이 필요합니다.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: n8n
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
storageClassName: gp3
volumeMode: Filesystem
volumeName: pvc-889dfdd4-e2cd-43aa-ad80-4df39d310f81
주의할 점은 PVC가 기존의 PV를 연결하려면 아래 값들이 동일해야 합니다.
spec.storageClassName
spec.accessModes
spec.resources.requests.storage
만약 일치하지 않으면 PVC가 기존의 PV를 연결하지 못하고 새로운 PV를 생성합니다.
- 파드에 다시 데이터가 마운트되어 복구 완료됨