실행
새 기능 #12943
기존에 운영중이던 LVM 논리 볼륨 PVC 로 마이그레이션
발견 버전:
반영 버전:
난이도:
쉬움
중요도:
중
조력자:
회사:
연락처:
점수:
1.75
설명
목표¶
- 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 가 지정되어 있는 경우라면 원래 볼륨을 제거하지는 않도록 한다.
- 복구한 경우는 어떻게 할지 구상 필요
변경사항¶
- CRD Spec 에 IsPreserved 필드 추가
- PVC annotation 으로 기존 LV 지정
- PVC annotation gms.io.lv 확인
- AnyStor-E 에서 기존 LV 존재 확인
- 기존 LV 가 없으면 codes.NotFound 에러 반환
- newLv.Spec.IsPreserved = true 설정
- Reconciler 에서 IsPreserved 확인
- 볼륨 생성 함수에서 IsPreserved == true 이면 AttachPersistemtVolume 호출
- AttachPersistemtVolume 에서는 PV 와 LV 정보만 연결하고, Pool, PoolSize 등은 storageclass 내용을 적용
- 볼륨 삭제 함수에서 IsPreserved 로 기존 LV 보존 여부 판별
- 볼륨 생성 함수에서 IsPreserved == true 이면 AttachPersistemtVolume 호출
- DeletePersistentVolume 에 preservedLV 파라미터 추가하고 preservedLV 이면 LV 삭제 스킵
- 예제 파일 추가
- example/csi-pvc-thin.yaml 에서 annotation 을 적용하는 예제를 별도로 파일을 생성하여 추가
- 별도로 생성한 파일을 사용하는 pod 생성 예제 추가
- 운용중인 볼륨이 있는 경우 처리사항에 대한 가이드 작성
난이도 및 추정시간¶
- 해결안으로 끝나면 난이도는 쉬움, 테스트는 스냅샷까지 다양하게 테스트해봐야 할 것 같아서, 추정시간 6시간
이 헌제님이 9일 전에 변경
목표¶
- 스냅샷 예제 추가
추가 작업¶
- 예제에 csi-pvc-preserved.yaml 를 활용하는 csi-snapshot-preserved.yaml 을 csi-snapshot-thin.yaml 을 참조하여 생성한다.
- 예제에 csi-snapshot-preserved.yaml 에서 생성된 스냅샷을 PV 로 지정하는 csi-snapshot-preserved-restore.yaml 을 csi-snapshot-thin-restore.yaml 을 참조하여 생성한다.
- 예제에 csi-snapshot-preserved-restore.yaml 를 통해서 생성한 PVC 를 사용하는 POD 를 csi-pod-preserved-restore.yaml 에 csi-pod-thin-restore.yaml 을 참조하여 생성한다.
- preserved 볼륨 생성 예를 README.md 에 있는 기본 생성 예제를 참조하여 docs/guide-preserved-volume.md 에 추가한다.
이 헌제님이 5일 전에 변경
추가 시나리오¶
- preserved 볼륨 삭제 시나리오 변경
- 기존: 무조건 삭제 하지 않음
- 변경: 스냅샷을 rename 해서 붙이기 위해서 조건에 따라 삭제
- 시나리오
- 보존이 필요한 경우 공유 설정 정보는 제거하지 않음
- HA 는 제거
- LV 는 보존이 필요하긴 한데, 스냅샷이 없는경우 복구 목적이 아니므로 제거하지 않음
- LV 가 보존이 필요하고, 스냅샷이 있는 경우는 복구 목적이므로 LV 를 제거함
- 스냅샷 복구 시나리오 변경
- 기존:
- origin 볼륨이 있으면 스냅샷만을 위한 리소스 생성
- origin 볼륨이 없으면 rename 후 볼륨을 위한 리소스 생성
- 변경:
- origin 볼륨이 없으면 rename 후 preserved 플래그 추가하여 이 볼륨으로 추가 볼륨을 생성해도 이름이 유지될 수 있도록 함
- 기존:
이 헌제님이 하루 전에 변경
- 점수 항목을 변경했습니다 (2.50 => 1.75)
추가 고려사항¶
- 여러 볼륨을 이미 지정해놨으면(마운트를 해놨으면)
ocf:heartbeat:LVM생성 시 Stopping 을 하게 된다면 VG 가 deactivate 가 되지 않아 VIP 까지 죽음 - VIP 가 살아나지 않으므로 csi-driver 에서 접근할 수 없어 PVC 생성가 생성 완료 되었어도 실패로 남게 됌
[LVM]
- VG1 - LV1 - mount <- deactivate failed VG1
- LV2 - mount -> HA 구성 -> stopping (vgchange -an)
- Pacemaker 에서는 VG 가 같은 PV 로 구성되어 있어 통채로 가져가길 원함
해결방안¶
- 방안1) csi-driver 에 연결된 VG 의 모든 LV에 대해서 HA 를 보장? (마운트되어 있는 건 전부 Filesystem 리소스 에이전트 등록) - constraint 까지 전부 지정해줘야 되서 복잡도는 증가할 것으로 예상
- 방안2) csi-dirver 에 연결된 VG 의 모든 LV 에 대해서 Filesystem 리소스 에이전트가 등록되어 있지 않다면 구성할때마다 unmount 처리 volume template 을 생성하고 (다시 마운트하게 되면 HA 는 안될 것으로 예상, 추가적으로 안 그래도 동시 접근 시 느린데 모든 LV 에 대해 Filesystem RA 를 확인하는 로직으로 과부하 예상)
- 방안3) 모든 LV 로 HA 구성될때까지 unmaintenance 금지? unmaintenance 규칙이 많이 겹치면 unmaintenance 를 아예 안하는 경우도 생길 수 있음
- 방안4) rsc_VG - vip_group 간 colocation 을 SCORE 를 낮춰 로 완화 (stop 실패시에는 유지, failover 시에는 넘어감)
실행