프로젝트

일반

사용자 정보

실행

조사/학습 #12735

csi-driver-lvm 프로젝트 구성

이 헌제님이 2달 전에 추가함. 9일 전에 수정됨.

상태:
해결
우선 순위:
보통
담당자:
목표 버전:
시작 시간:
2025/12/05
완료 기한:
2025/12/18 (58일 지연)
진척도:

100%

추정 시간:
50:00 시간
발견 버전:
반영 버전:
난이도:
보통
중요도:
조력자:
회사:
연락처:
점수:
0.62

설명

개요

  • 다양한 csi-driver 구현체를 보고 진행 가/불 과 진행된다면 어느정도 걸릴지 파악
  • 1차적으로 내부 csi-driver 가 ASE 에서 지원 가능한지 확인
  • metal-stack/csi-driver-lvm 을 GMS 에 맞게 재구성하고 프로젝트를 생성한다.

난이도 및 추정시간

  • k8s 는 너무 오랜만에 보고, csi 는 개념부터 이해가 필요해서 난이도 보통
  • 설치부터 막히고 있어 추정시간 17시간

추가 작업

  • metal-stack/csi-driver 를 gms-csi-driver 로 리펙토링
  • proxy 형태로 개발
    • nfs 를 생성하여 배포
    • helm 설치 형태

추가 작업으로 인한 추정시간

  • controller/node 개발 및 helm chart 지정 정책 등 복합적인 구성이 필요하여 추정시간을 33시간으로 추정
  • 필요시 일감을 분리할 수 있음
실행 #1

이 헌제님이 2달 전에 변경

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

기본 테스트까지 완료

  • k8s 설치
cat << EOF > /etc/yum.repo.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.29/rpm/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.29/rpm/repodata/repomd.xml.key
EOF

wget https://buildlogs.centos.org/c7.2003.00.x86_64/conntrack-tools/20200401021911/1.4.4-7.el7.x86_64/conntrack-tools-1.4.4-7.el7.x86_64.rpm
yum -y localinstall conntrack-tools-1.4.4-7.el7.x86_64.rpm
yum install -y kubelet kubeadm kubectl
systemctl start kubelet
  • k8s 클러스터 실행
kubeadm init --pod-network-cidr=10.244.0.0/16
export KUBECONFIG=/etc/kubernetes/admin.conf

# 네트워크 플러그인 설치 (Flannel)
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

# 마스터 노드에서도 워커 역할 수행
kubectl taint nodes localhost node-role.kubernetes.io/control-plane:NoSchedule-
  • helm 설치
curl -fsSL https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

helm version
  • metal-stack 실행
git clone https://github.com/metal-stack/csi-driver-lvm.git
cd csi-driver-lvm/charts/csi-driver-lvm 
vim values.yaml
...
  devicePattern: /dev/sd[b-d]
...

cd ../..
helm install csi-driver-lvm ./charts/csi-driver-lvm/
  • 확인
kubectl get pods -n default
kubectl get ds -n default

kubectl apply -f examples/csi-pvc-raw.yaml
kubectl apply -f examples/csi-pod-raw.yaml
kubectl apply -f examples/csi-pvc.yaml
kubectl apply -f examples/csi-app.yaml

# pv 확인
kubectl get pv
NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM             STORAGECLASS            VOLUMEATTRIBUTESCLASS   REASON   AGE
pvc-18b009b1-6c5c-4430-ae48-7f2938d2e12f   10Mi       RWO            Delete           Bound    default/csi-pvc   csi-driver-lvm-linear   <unset>                          5m55s

# 실제 확인
lvs
  LV                                       VG      Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root                                     centos  -wi-ao---- <35.12g                                                    
  swap                                     centos  -wi-a-----  <3.88g                                                    
  pvc-18b009b1-6c5c-4430-ae48-7f2938d2e12f csi-lvm -wi-a-----  12.00m  
실행 #2

이 헌제님이 2달 전에 변경

동작 구조

  • Controller , Node, CSI sidecar container 필요
    • Controller : CreateVolume 등
    • Node: NodePublishVolume 등(Pod 에 mount)
    • sidecar:
      • csi-provisioner: PVC 요청시 볼륨 생성
      • csi-attacher: attach/detach 처리
      • csi-resizer: PV 확장
      • csi-snapshotter: 스냅샷 지원
      • node-driver-registrar: k8s 에 csi-driver 등록
      • livenessprobe: 상태 체크

간단 동작 흐름 예상

  • kubectl pvc 생성 요청
  • kube API
  • kube controller
  • kubectl call CSI
  • csi driver
  • ase API
실행 #3

이 헌제님이 약 2달 전에 변경

  • 제목 항목을 변경했습니다 (csi-driver 기능 검토 => csi-driver 기능 개발)
  • 설명이 변경되었습니다. (비교(diff))
  • 상태 항목을 변경했습니다 (신규 => 검토)
  • 진척도 항목을 변경했습니다 (0 => 50)
  • 추정 시간 항목을 변경했습니다 (17:00 시간 => 50:00 시간)
  • 점수 항목을 변경했습니다 (6.50 => 5.62)
실행 #4

이 헌제님이 약 2달 전에 변경

  • 완료 기한 항목을 변경했습니다 (2025/12/11 => 2026/01/31)
실행 #5

이 헌제님이 약 2달 전에 변경

  • 상태 항목을 변경했습니다 (검토 => 진행)
실행 #6

이 헌제님이 약 2달 전에 변경

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

개발 현황

  • https://github.com/metal-stack/csi-driver-lvm 를 gms proxy 를 통해서 진행하도록 수정
  • helm 을 통해서 설치할 수 있도록 한다.
  • storage-class 는 thin, thick 을 제공한다.
  • storage-class 를 통해서 제공되는 볼륨은 nfs 를 통해서 접근할 수 있다.
  • helm
    • charts/csi-driver-lvm/values.yaml: template 에 들어갈 변수를 지정한다.
      • vgName: 생성한 볼륨 그룹 이름 지정
      • storageAuth: gms_token 입력
      • storageVIP: GMS 에 접근가능한 네트워크 주소 입력
      • driverName: lvm.csi.gms.io
      • gms.io/thinpool: thinpool 이름을 지정한다. (없을 시 자동 생성)
      • gms.io/thinpoolSize: thinpool 이 자동 생성될 때 크기를 지정한다.
      • gms.io/networkZone: nfs 에서 사용할 네트워크 영역을 지정한다.
    • charts/csi-driver-lvm/templates/storageclasses.yaml: 최신 버전 k8s 의 storageclass 를 지원한다.
      • storageClasses 에서 thin, thick 볼륨을 제공하도록 한다.
    • charts/csi-driver-lvm/templates/storageclasses-compat03x.yaml: 레거시 k8s 의 storageclass 를 지원한다.
      • storageclasses 와 storageClassStub 지정이 다르며 나머지는 동일
    • charts/daemonset.yaml
      • csi-driver 의 데몬 설정을 지정한다. (제공하는 기능 등)
      • 실행 명령은 args: 참조
  • cmd
    • lvmplugin/main.go : 명령을 통해 받은 정보로 controller, node, indentity 서버를 시작
  • pkg
    • server
      • controller.go: controller 서버로 볼륨 생성, 삭제 등 시행 (nfs 생성)
      • node.go: k8s 에서 publish/unpublish 진행 (targetPath 를 제공하면 생성한 nfs 로 마운트)
      • driver.go: 공통 모듈, parameter 지정 (storage 는 driver.storage 형태로 정보 제공)
      • identity.go: 드라이버 식별 정보 제공(변경사항 없음)
    • proxy : gms api call wrapper
      • api_lvm.go : LV 생성, 삭제, 확장, VG 조회 등 제공
      • api_daemon.go: NFS 데몬 제어 제공
      • api_lvm_snapshot.go: LV 스냅샷 생성, 삭제, 확장, 병합 제공
      • api_share.go: 공유 생성/삭제, 공유 NFS 생성/삭제, 공유 NFS 네트워크 설정 생성/삭제 등 제공
      • api_zone.go: zone 조회 제공
      • client.go: api 서비스를 묶어서 제공
      • model_body_opts.go: api 에서 body 요청이 있을 경우 제공되는 자료형
      • model_*.go: api 응답에서 제공되는 자료형
    • storage: driver 에서 제공하는 정보로 gms proxy 연결 (API 가 변경되면 proxy 만 변경하면 됌)
      • csi-driver 에서 할 수 있는 모든 기능 제공
  • example
    • 사용 예 제공 (현재 수정중)
  • tests
    • 테스트 (미 수정)

제약사항

  • LVM 볼륨 그룹은 생성되어 있어야 한다.
  • LVM 볼륨 그룹은 1개 지원한다.
  • AnyStor-E API 및 k8s-cluster 에서 접근할 수 있는 VIP 를 제공해야 한다.
  • NFS 에서 접근할 수 있는 네트워크 영역은 생성되어 있어야 한다.
  • 네트워크 영역은 1개 지원한다.

미구현 사항

  • LVM HA 제공 등
실행 #7

이 헌제님이 약 2달 전에 변경

Proxy 구현 정보 상세

  • api_daemon
    • NfsKernelControl
  • api_lvm
    • ChangeLv
    • DeleteLv
    • ExtendLv
    • GetLv
      • Response: LvmLvResponse
      • Lv
    • ListLv
      • Response: LvmLvResponse
        • Lv
    • CreateLv
    • GetVg
      • Response: LvmVgResponse
        • Vg
    • ListVg
      • Response: LvmVgResponse
        • Vg
  • api_lvm_snapshot
    • ActivateSnapshot
    • CreateSnapshot
    • DeleteSnapshot
    • ExtendSnapshot
    • ListSnapshot
      • Response: LvmSnapshotResponse
        • Snapshot
    • MergeSnapshot
  • api_zone
    • CreateNetworkZone
    • DeleteNetworkZone
    • ListNetworkZone
      • Response: NetworkZoneResponse
        • cZone
  • api_share
    • DisableNfs
    • EnableNfs
      • Response: ShareNfsResponse
        • ShareSection
          • ShareNfsNetwork
    • GetNfsConfig
      • Response: ShareNfsConfigResponse
        • NfsSetting
    • SetNfsConfig
    • SetNfsNetworkAccess
    • CreateShare
    • DeleteShare
    • ListShare
      • param: ShareParamOpts
      • response: ShareResponse
        • Share
    • UpdateShare
  • api_default
    • ExtendFilesystem
    • FormatFilesystem
    • MountFilesystem
    • UnmountFilesystem
실행 #8

이 헌제님이 약 2달 전에 변경

  • 제목 항목을 변경했습니다 (csi-driver 기능 개발 => csi-driver-lvm 프로젝트 구성)
  • 설명이 변경되었습니다. (비교(diff))
실행 #9

이 헌제님이 약 2달 전에 변경

  • 프로젝트 항목을 변경했습니다 (92 => csi-driver-lvm)
  • 목표 버전 항목을 지웠습니다. (3.3.1)
  • 중요도 항목을 지정했습니다. ()
실행 #10

이 헌제님이 약 2달 전에 변경

  • 완료 기한 항목을 변경했습니다 (2026/01/31 => 2025/12/18)
  • 상태 항목을 변경했습니다 (진행 => 해결)
  • 목표 버전 항목을 지정했습니다. (1.0.0)
  • 진척도 항목을 변경했습니다 (50 => 100)
  • 점수 항목을 변경했습니다 (4.38 => 0.88)

프로젝트를 구축하고 기본적인 내용을 작성하여 본 일감을 해결 처리함
추후 스냅샷, HA 구성 일감이 필요함.

실행 #11

이 헌제님이 9일 전에 변경

  • 점수 항목을 변경했습니다 (0.88 => 0.62)
실행

내보내기 Atom PDF

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