태스크 #12951
이 헌제님이 약 2달 전에 변경
## 목표
- 현재 csi-driver-lvm 은 단일 볼륨을 제어하는 방식으로 가이드하고 있다
- 여러 볼륨 그룹을 사용하는 경우 storageclass 와 csi-driver-lvm 을 어떤 식으로 구성해야 가능한지 가이드를 만들고, 그에 따른 테스트를 진행하여 검증한다.
## 다중 csi-driver-lvm 설치
### 다중 설치 가능성
csi-driver-lvm을 여러 개 설치하여 VG를 나누는 방향으로 운영 가능합니다.
### 설치 방법 (namespace별)
```bash
# namespace 생성 Namespace 1 설치
kubectl create namespace storage-1
kubectl create namespace storage-2
# 내부 registry 로 테스트시 namespace 별 secret 생성
kubectl create secret docker-registry gitlab-regcred --docker-server=registry.gitlab.gluesys.com --docker-username=gitlab-runner --docker-password=gldt-f2kyALfrvGAbDnxsKoSJ --namespace storage-1
kubectl create secret docker-registry gitlab-regcred --docker-server=registry.gitlab.gluesys.com --docker-username=gitlab-runner --docker-password=gldt-f2kyALfrvGAbDnxsKoSJ --namespace storage-2
# Namespace 1 설치
helm install csi-driver-lvm-1 \
--namespace storage-1 \
--set lvm.storageVG='VG1' \
--set lvm.storageVIP='10.0.24.70' \
--set lvm.driverName='lvm.csi.gms.io1' \
--set lvm.storageClassStub='csi-driver-lvm-1' \
./charts/gluesys-csi ./charts/csi-driver-lvm
# Namespace 2 설치
kubectl create namespace storage-2
helm install csi-driver-lvm-2 \
--namespace storage-2 \
--set lvm.storageVG='VG2' \
--set lvm.storageVIP='10.0.24.71' \
--set lvm.driverName='lvm.csi.gms.io2' \
--set lvm.storageClassStub='csi-driver-lvm-2' \
./charts/gluesys-csi ./charts/csi-driver-lvm
```
### 9.3 생성되는 StorageClass
| 항목 | gluesys-csi-1 csi-driver-lvm-1 | gluesys-csi-2 csi-driver-lvm-2 |
|------|------------------|------------------|
| **StorageClass 이름** | `csi-driver-lvm-1-thin` | `csi-driver-lvm-2-thin` |
| **provisioner** | `lvm.csi.gms.io1` | `lvm.csi.gms.io2` |
| **연결된 driver** | csi-driver-lvm-1 | csi-driver-lvm-2 |
| **VG** | VG1 | VG2 |
| **VIP** | 10.0.24.70 | 10.0.24.71 |
### 9.4 장점
| 장점 | 설명 |
|------|------|
| **용량 분산** | VG별로 별도의 thinpool 관리 가능 |
| **장애 격리** | 한 VG에 장애 발생 시 다른 VG에 영향 없음 |
| **성능 분산** | 여러 AnyStor-E 노드에 부하 분산 |
| **애플리케이션 분리** | 앱/환경별로 별도 스토리지 할당 가능 |
### 9.5 제약사항
| 제약사항 | 내용 |
|---------|------|
| **동일 StorageClass 공유 불가** | 다른 driver가 같은 StorageClass 이름을 사용할 수 없음 |
| **앱별 명확한 지정** | 앱이 사용할 StorageClass를 명확히 지정해야 함 |
| **Migration 불가** | 한 VG에서 다른 VG로 마이그레이션 불가 |
| **driverName 충돌 방지** | 각 csi-driver-lvm은 고유한 driverName 사용 필수 |
| **Kasten 백업** | 각 StorageClass별로 백업 정책 설정 필요 |
### 주의사항
| 항목 | 내용 |
|------|------|
| **Pod와 PVC 동일 namespace** | PVC가 생성된 namespace의 csi-driver-lvm만 사용 가능 |
| **Cross namespace 사용 불가** | Namespace A에서 생성된 PVC는 Namespace A의 csi-driver-lvm만 접근 가 능 |
| **StorageClass 지정** | 각 앱은 사용할 VG에 맞는 StorageClass를 명확히 지정해야 함 |
| **초기 단순화** | 초기에는 단일 csi-driver-lvm으로 시작하고 필요에 따라 확장 권장 |
뒤로