프로젝트

일반

사용자 정보

실행

새 기능 #12943

기존에 운영중이던 LVM 논리 볼륨 PVC 로 마이그레이션

이 헌제님이 10일 전에 추가함. 하루 전에 수정됨.

상태:
진행
우선 순위:
높음
담당자:
목표 버전:
시작 시간:
2026/02/04
완료 기한:
2026/02/05 (9일 지연)
진척도:

0%

추정 시간:
10:00 시간
발견 버전:
반영 버전:
난이도:
쉬움
중요도:
조력자:
회사:
연락처:
점수:
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 가 지정되어 있는 경우라면 원래 볼륨을 제거하지는 않도록 한다.
  • 복구한 경우는 어떻게 할지 구상 필요

변경사항

  1. CRD Spec 에 IsPreserved 필드 추가
  2. PVC annotation 으로 기존 LV 지정
    • PVC annotation gms.io.lv 확인
    • AnyStor-E 에서 기존 LV 존재 확인
    • 기존 LV 가 없으면 codes.NotFound 에러 반환
    • newLv.Spec.IsPreserved = true 설정
  3. Reconciler 에서 IsPreserved 확인
    • 볼륨 생성 함수에서 IsPreserved == true 이면 AttachPersistemtVolume 호출
      • AttachPersistemtVolume 에서는 PV 와 LV 정보만 연결하고, Pool, PoolSize 등은 storageclass 내용을 적용
    • 볼륨 삭제 함수에서 IsPreserved 로 기존 LV 보존 여부 판별
  4. DeletePersistentVolume 에 preservedLV 파라미터 추가하고 preservedLV 이면 LV 삭제 스킵
  5. 예제 파일 추가
    • example/csi-pvc-thin.yaml 에서 annotation 을 적용하는 예제를 별도로 파일을 생성하여 추가
    • 별도로 생성한 파일을 사용하는 pod 생성 예제 추가
  6. 운용중인 볼륨이 있는 경우 처리사항에 대한 가이드 작성

난이도 및 추정시간

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

이 헌제님이 10일 전에 변경

  • 우선 순위 항목을 변경했습니다 (보통 => 높음)
  • 난이도 항목을 지정했습니다. (쉬움)
  • 중요도 항목을 변경했습니다 ( => )
실행 #2

이 헌제님이 9일 전에 변경

실행 #3

이 헌제님이 9일 전에 변경

실행 #4

이 헌제님이 9일 전에 변경

실행 #5

이 헌제님이 9일 전에 변경

작업

추후 작업

  • 기존 볼륨으로 PVC 생성 삭제 테스트
실행 #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 에 추가한다.
실행 #7

이 헌제님이 9일 전에 변경

  • 완료 기한 항목을 지정했습니다. (2026/02/05)
  • 상태 항목을 변경했습니다 (신규 => 진행)
  • 시작 시간 항목을 지정했습니다. (2026/02/04)
  • 추정 시간 항목을 지정했습니다. (10:00 시간)
실행 #8

이 헌제님이 7일 전에 변경

  • 점수 항목을 변경했습니다 (0.00 => 2.50)

추가 고려사항

  • 이미 볼륨을 사용하고 있고, 해당 볼륨을 PVC 로 붙이는 경우 고려사항
  • NFS 가 이미 생성되어 있는 경우 NFS 는 경로마다 하나씩만 생성할 수 밖에 없어, k8s 네트워크 영역 권한만 업데이트 하는 형태로 개발 필요
실행 #9

이 헌제님이 6일 전에 변경

추가 시나리오

  • preserved 볼륨 삭제 시나리오 변경
    • 기존: 무조건 삭제 하지 않음
    • 변경: 스냅샷을 rename 해서 붙이기 위해서 조건에 따라 삭제
    • 시나리오
      • 보존이 필요한 경우 공유 설정 정보는 제거하지 않음
      • HA 는 제거
      • LV 는 보존이 필요하긴 한데, 스냅샷이 없는경우 복구 목적이 아니므로 제거하지 않음
      • LV 가 보존이 필요하고, 스냅샷이 있는 경우는 복구 목적이므로 LV 를 제거함
  • 스냅샷 복구 시나리오 변경
    • 기존:
      • origin 볼륨이 있으면 스냅샷만을 위한 리소스 생성
      • origin 볼륨이 없으면 rename 후 볼륨을 위한 리소스 생성
    • 변경:
      • origin 볼륨이 없으면 rename 후 preserved 플래그 추가하여 이 볼륨으로 추가 볼륨을 생성해도 이름이 유지될 수 있도록 함
실행 #10

이 헌제님이 하루 전에 변경

  • 점수 항목을 변경했습니다 (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 시에는 넘어감)
실행

내보내기 Atom PDF

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