🚀 요약
SUMMARY
nfs-subdir-provisioner의 pathPattern 설정으로 인해 PVC 삭제 시 실제 NFS 디렉토리가 삭제되지 않는 버그가 4.0.18 버전에서 해결되었다. Docker 이미지가 공식 레지스트리에 없어 직접 빌드하여 문제를 해결했다.
⚙️ 환경
- Kubernetes 클러스터
- nfs-subdir-external-provisioner (4.0.17 이하 버전)
- pathPattern 설정이 포함된 StorageClass
💬 이슈
Kubernetes에서 nfs-subdir-provisioner를 사용하여 동적 볼륨 프로비저닝을 구성했다. StorageClass에서 reclaimPolicy: Delete로 설정했음에도 불구하고, PVC를 삭제할 때 실제 NFS 서버의 디렉토리는 그대로 남아있는 문제가 발생했다.
프로비저너의 로그를 확인해보니 pathPattern을 설정한 경로를 인식하지 못하고 삭제 작업에 실패하는 것으로 판단됐다. pathPattern은 NFS 서버에 생성되는 디렉토리 구조를 커스터마이징할 때 사용하는 설정인데, 이 설정이 있을 때 삭제 로직에서 올바른 경로를 찾지 못하는 버그가 있었다.
INFO
pathPattern 설정 예시:
${.PVC.namespace}-${.PVC.name}-${.PVC.annotations.volume.beta.kubernetes.io/storage-class}
🧗 해결
GitHub Issues에서 같은 증상을 겪은 사람들의 보고를 찾았다. 조사해보니 nfs-subdir-external-provisioner의 알려진 버그였고, 4.0.18 버전에서 수정됐다.
문제는 공식 Docker Hub에 4.0.18 이미지가 올라오지 않았다는 점이었다. 그래서 아래처럼 직접 해결했다.
- 소스 코드 클론 및 빌드
git clone https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner.git
cd nfs-subdir-external-provisioner
git checkout tags/nfs-subdir-external-provisioner-v4.0.18- Docker 이미지 직접 빌드
docker build -t nfs-subdir-external-provisioner:4.0.18 .- 프라이빗 레지스트리에 푸시
docker tag nfs-subdir-external-provisioner:4.0.18 your-registry/nfs-subdir-external-provisioner:4.0.18
docker push your-registry/nfs-subdir-external-provisioner:4.0.18- Deployment 이미지 업데이트
spec:
template:
spec:
containers:
- name: nfs-client-provisioner
image: your-registry/nfs-subdir-external-provisioner:4.0.18✅ 확인
업데이트 후 테스트했다. pathPattern이 설정된 StorageClass로 PVC를 생성하고 삭제해보니 결과는 이랬다.
- PVC 삭제 시 프로비저너 로그에 삭제 성공 메시지가 남음
- NFS 서버에서 해당 디렉토리가 정상적으로 삭제됨
archived-접두사가 붙은 백업 디렉토리도 정상적으로 정리됨
NOTE
nfs-subdir-provisioner는 기본적으로 삭제된 볼륨을
archived-접두사를 붙여서 백업하는 방식으로 동작한다. 완전 삭제를 원한다면archiveOnDelete: "false"설정을 추가해야 한다.