프로젝트

일반

사용자 정보

새 기능 #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.goIsPreserved 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.gopreservedLV    perserveLV 파라미터 추가하고 preservedLV 이면 LV 삭제 스킵 
 추가  
 5. 예제 파일 추가 
     - example/csi-pvc-thin.yaml 에서 annotation 을 적용하는 예제를 별도로 파일을 생성하여 추가 
     - 별도로 생성한 파일을 사용하는 pod 생성 예제 추가  
 개선 
 6. 운용중인 볼륨이 있는 경우 처리사항에 대한 가이드 작성 


 그 외 목표에 맞는 처리 구현 

 ### 난이도 및 추정시간 

 - 해결안으로 끝나면 난이도는 쉬움, 테스트는 스냅샷까지 다양하게 테스트해봐야 할 것 같아서, 추정시간 6시간 

뒤로

클립보드 이미지 추가 (최대 크기: 50 MB)