새 기능 #12943
이 헌제님이 9일 전에 변경
### 개요
- csi-dirver 에 의해 PVC 생성 시 생성된 볼륨이 아닌, AnyStor-E 에 이미 운영중인 볼륨을 PVC 생성 시 해당 볼륨을 지정하여 PV 로 생성할 수 있어야 한다.
### 해결안
- pvc 에 annotation 을 넣어서 지정되어 있으면 연결 하는 로직 추가
```
pvc, err := k8sClient.CoreV1().PersistentVolumeClaims(ns).Get(ctx, pvcName, metav1.GetOptions{})
lv := pvc.Annotations["gms.io/lv"]
```
- Persistent Volume 제거 시에도 LV 가 지정되어 있는 경우라면 원래 볼륨을 제거하지는 않도록 한다.
- 복구한 경우는 어떻게 할지 구상 필요
### 변경사항
요청
1. CRD Spec api/v1/LogicalVolume.go 에 IsPreserved InPreserved 필드 추가
2. pkg/server/controller.go 에 PVC annotation 으로 기존 LV 지정
- PVC annotation gms.io.lv 확인
- AnyStor-E 에서 기존 LV 존재 확인
- 기존 LV 가 없으면 codes.NotFound 에러 반환
- newLv.Spec.IsPreserved = true 설정 처리 로직 추가
3. Reconciler 에서 IsPreserved pkg/controller/logicalvolumes_controller.go 에 InPreserved 확인
- 볼륨 생성 함수에서 IsPreserved == true 이면 AttachPersistemtVolume 호출
- AttachPersistemtVolume 에서는 PV 와 LV 정보만 연결하고, Pool, PoolSize 등은 storageclass 내용을 적용
- 볼륨 삭제 함수에서 IsPreserved 로 기존 LV 보존 여부 판별 로직 추가
4. DeletePersistentVolume pkg/storage/persistentvolume.go 에 preservedLV perserveLV 파라미터 추가하고 preservedLV 이면 LV 삭제 스킵
추가
5. 예제 파일 추가
- example/csi-pvc-thin.yaml 에서 annotation 을 적용하는 예제를 별도로 파일을 생성하여 추가
- 별도로 생성한 파일을 사용하는 pod 생성 예제 추가
개선
6. 운용중인 볼륨이 있는 경우 처리사항에 대한 가이드 작성
그 외 목표에 맞는 처리 구현
### 난이도 및 추정시간
- 해결안으로 끝나면 난이도는 쉬움, 테스트는 스냅샷까지 다양하게 테스트해봐야 할 것 같아서, 추정시간 6시간
뒤로