Disk and Driver API - cloud-barista/cb-spider GitHub Wiki

Disk(Volume) and Driver API

- CB-Spider Disk Specification V0.3
- V0.3 : CB-Tumblebug ๊ฒ€ํ† /๊ฐœ๋ฐœ ์šฉ

1. CB-Spider Disk Overview

  • CB-Spider๋Š” ์—ฐ๋™ ๋Œ€์ƒ ํด๋ผ์šฐ๋“œ(CSP)๊ฐ€ ์ œ๊ณตํ•˜๋Š” Disk(๋˜๋Š” Volume)๋ฅผ
    • ๋™์ผํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋Š” Disk ์ œ์–ด ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.
  • CB-Spider ์‚ฌ์šฉ์ž๋Š” Disk๋ฅผ ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด Root-Disk(R-Disk, ์šด์˜์ฒด์ œ ํฌํ•จ)์™€ Data-Disk(D-Disk)๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
    • [1. Root-Disk ํ™œ์šฉ]

      • (์ƒ์„ฑ/๋ถ€์ฐฉ) ์‚ฌ์šฉ์ž๊ฐ€ VM ์ƒ์„ฑ ์š”์ฒญ์‹œ ์ž๋™์œผ๋กœ Root-Disk๊ฐ€ ์ƒ์„ฑ๋˜๋ฉฐ,
        • ์ƒ์„ฑ๋œ VM์— ์ƒ์„ฑ๋œ Root-Disk๊ฐ€ ๋ถ€์ฐฉ(Attach) ๋˜์–ด OS ์šด์˜์— ํ•„์š”ํ•œ ์‹œ์Šคํ…œ ๋””์Šคํฌ๋กœ ํ™œ์šฉ๋œ๋‹ค.
        • ํ•˜๋‚˜์˜ VM์€ ํ•˜๋‚˜์˜ Root-Disk๋ฅผ ์†Œ์œ ํ•  ์ˆ˜ ์žˆ๋‹ค.
      • (ํ•ด์ œ/์‚ญ์ œ) Root-Disk๋Š” VM์œผ๋กœ ๋ถ€ํ„ฐ ๋ช…์‹œ์ ์ธ ํ•ด์ œ(Detach)๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฉฐ,
        • Disk๋ฅผ ์†Œ์œ ํ•œ VM ์‚ญ์ œ ์‹œ์— ์ž๋™์œผ๋กœ ์‚ฌ์šฉ ํ•ด์ œ(Detach) ๋˜๋ฉฐ VM๊ณผ ํ•จ๊ป˜ ์‚ญ์ œ๋œ๋‹ค.
      • ์‚ฌ์šฉ์ž๋Š” VM ์ƒ์„ฑ ์š”์ฒญ ์‹œ์— Root-Disk์˜ Disk Type๊ณผ Disk Size๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • [2. Data-Disk ํ™œ์šฉ]

      • (์ƒ์„ฑ) ์‚ฌ์šฉ์ž๋Š” ํ•„์š” ์‹œ์ ์— Data-Disk๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
      • (๋ถ€์ฐฉ) ์‚ฌ์šฉ์ž๋Š” ์ƒ์„ฑํ•œ Data-Disk๋ฅผ ์šด์˜ ์ค‘์ธ ํŠน์ • VM์— ๋ถ€์ฐฉ(Attach)ํ•˜์—ฌ VM์—์„œ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
        • ๋˜ํ•œ, VM ์ƒ์„ฑ์‹œ์— ์กด์žฌํ•˜๋Š” Data-Disk๋ฅผ ๋ถ€์ฐฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
        • ํ•˜๋‚˜์˜ VM์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ Data-Disk ๋ถ€์ฐฉ์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ•˜๋‚˜์˜ Data-Disk๋Š” ํ•˜๋‚˜์˜ VM์—๋งŒ ๋ถ€์ฐฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
      • (ํ•ด์ œ) ์‚ฌ์šฉ์ž๋Š” VM์ด ์†Œ์œ  ์ค‘์ธ Data-Disk๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ํ•ด์ œ(Detach) ์š”์ฒญํ•˜์—ฌ ํšŒ์ˆ˜ํ•  ์ˆ˜ ์žˆ๋‹ค.
        • VM ์‚ญ์ œ ์‹œ์—๋Š” ๋Œ€์ƒ VM์ด ์†Œ์œ  ์ค‘์ธ Data-Disk๊ฐ€ ์ž๋™์œผ๋กœ ์†Œ์œ  ํ•ด์ œ๋œ๋‹ค.
      • (์‚ญ์ œ) ์‚ฌ์šฉ์ž๋Š” ๋” ์ด์ƒ Data-Disk๊ฐ€ ํ•„์š” ์—†์„ ๊ฒฝ์šฐ Data-Disk๋ฅผ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋‹ค.
  • โ€ป ์ฐธ๊ณ : Format / Mount / UMount

    • VM์— ๋ถ€์ฐฉ๋œ Data-Disk๋ฅผ VM์—์„œ ํŒŒ์ผ ์ €์žฅ ๋ชฉ์ ์œผ๋กœ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํŒŒ์ผ ์‹œ์Šคํ…œ ํฌ๋งท๊ณผ ๋งˆ์šดํŠธ ๊ณผ์ •์ด ํ•„์š”ํ•˜๋‹ค.

    • ๋ถ€์ฐฉ๋œ Data-Disk ํ™•์ธ ์˜ˆ์‹œ

      $ lsblk
      NAME    MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
      loop0     7:0    0  44.7M  1 loop /snap/snapd/15534
      loop1     7:1    0  55.5M  1 loop /snap/core18/2344
       ...
      sda       8:0    0    10G  0 disk
      |-sda1    8:1    0   9.9G  0 part /
      |-sda14   8:14   0     4M  0 part
      `-sda15   8:15   0   106M  0 part /boot/efi
      sdc       8:16   0    18G  0 disk                   <=======
      
    • ํŒŒ์ผ ์‹œ์Šคํ…œ ํฌ๋งท ์˜ˆ์‹œ

      • disk ์†์„ฑ ํ™•์ธ: ์†์„ฑ์ด data์ผ ๊ฒฝ์šฐ format ํ•„์š”
        $ sudo file -s /dev/sdc
        /dev/sdc: data
        
      • format
        $ sudo mkfs -t xfs /dev/sdc
        meta-data=/dev/sdc               isize=512    agcount=4, agsize=1048576 blks
                 =                       sectsz=4096  attr=2, projid32bit=1
                 =                       crc=1        finobt=1, sparse=0, rmapbt=0, reflink=0
        data     =                       bsize=4096   blocks=4194304, imaxpct=25
                 =                       sunit=0      swidth=0 blks
        naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
        log      =internal log           bsize=4096   blocks=2560, version=2
                 =                       sectsz=4096  sunit=1 blks, lazy-count=1
        realtime =none                   extsz=4096   blocks=0, rtextents=0
        
    • ๋งˆ์šดํŠธ ์˜ˆ์‹œ

      • disk ์†์„ฑ ํ™•์ธ

        $ sudo file -s /dev/sdc
        /dev/sdc: SGI XFS filesystem data (blksz 4096, inosz 512, v2 dirs)
        
      • mount

        $ mkdir data
        $ sudo mount /dev/sdc data
        $ cd data
        $ sudo chown cb-user:cb-user .
        
      • usage

        $ cd ~/data
        $ vi input.dat
        
    • ๋งˆ์šดํŠธ ํ•ด์ œ ์˜ˆ์‹œ

      • umount
        $ sudo umount -d /dev/sdc
        

2. CB-Spider Disk ์ œ๊ณต ๊ธฐ๋Šฅ

  • Disk ์ƒ์„ฑ
    • Root-Disk๋Š” VM ์ƒ์„ฑ์— ์˜ํ•ด ์ž๋™ ์ƒ์„ฑ๋˜๋ฉฐ,
    • ์‚ฌ์šฉ์ž๋Š” Data-Disk๋งŒ ์ƒ์„ฑ ๊ฐ€๋Šฅํ•˜๋‹ค.
    • Disk ์ƒ์„ฑ ์š”์ฒญ์‹œ Disk ํƒ€์ž…๊ณผ Size(๋‹จ์œ„:GB)์˜ ์„ค์ •์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • Disk ๋ชฉ๋ก
    • Root-Disk, Data-Disk ๊ตฌ๋ถ„ ์—†์ด ๋ชจ๋“  Disk ๋ชฉ๋ก์„ ์ œ๊ณตํ•œ๋‹ค.
  • Disk ์ •๋ณด
    • ํŠน์ • Disk์˜ ํƒ€์ž…, Size, ์ƒํƒœ ๋ฐ ์†Œ์œ  VM IID ์ •๋ณด ๋“ฑ์„ ์ œ๊ณตํ•œ๋‹ค.
    • ์ œ๊ณตํ•˜๋Š” Disk ์ƒํƒœ ์ข…๋ฅ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
      • Creating: Disk๊ฐ€ ์ƒ์„ฑ ์ค‘์ธ ์ƒํƒœ
      • Available: Disk๊ฐ€ VM์— ๋ถ€์ฐฉ ๋˜์ง€ ์•Š๊ณ  ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ
      • Attached: Disk๊ฐ€ VM์— ๋ถ€์ฐฉ๋˜์–ด ํŠน์ • VM์ด ์†Œ์œ  ์ค‘์ธ ์ƒํƒœ
        • Attached ์ƒํƒœ์ผ ๋•Œ๋Š” ๋Œ€์ƒ Disk๊ฐ€ ๋ถ€์ฐฉ๋œ ์†Œ์œ  VM IID ์ •๋ณด๊ฐ€ ์ œ๊ณต๋œ๋‹ค.
      • Deleting: Disk๊ฐ€ ์‚ญ์ œ ์ค‘์ธ ์ƒํƒœ
  • Disk ๋ณ€๊ฒฝ
    • Disk Size ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ, ๊ธฐ์กด ๋ณด๋‹ค ํฐ ํฌ๊ธฐ๋กœ๋งŒ ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
    • ์ฐธ๊ณ : AWS์˜ ๊ฒฝ์šฐ ์ˆ˜์ • ํ›„์—๋Š” 6์‹œ๊ฐ„์ด ๊ฒฝ๊ณผํ•ด์•ผ ์ˆ˜์ • ๊ฐ€๋Šฅํ•˜๋‹ค.
  • Disk ๋ถ€์ฐฉ
    • Available ์ƒํƒœ์ธ Disk๋Š” ํŠน์ • VM์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ถ€์ฐฉ(Attach)์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
    • ๋ถ€์ฐฉ๋œ Disk๋Š” VM์˜ block device๋กœ ํ™œ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ,
    • ํŒŒ์ผ ์‹œ์Šคํ…œ์„ ํƒ‘์žฌํ•˜์—ฌ ํ™œ์šฉํ•˜๊ณ ์ž ํ•  ๊ฒฝ์šฐ ํฌ๋งท ๋ฐ ๋งˆ์šดํŠธ ๊ณผ์ •์ด ํ•„์š”ํ•˜๋‹ค.
    • ํ•˜๋‚˜์˜ VM์—๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ Data-Disk ๋ถ€์ฐฉ์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ•˜๋‚˜์˜ Data-Disk๋Š” ํ•˜๋‚˜์˜ VM์—๋งŒ ๋ถ€์ฐฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • Disk ํ•ด์ œ
    • ํŠน์ • VM์— ๋ถ€์ฐฉ๋œ Disk๋ฅผ ํ•ด์ œ(Detach)ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ํ•ด์ œ๋œ Disk๋Š” ๋‹ค๋ฅธ VM์— ๋ถ€์ฐฉํ•˜์—ฌ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • Disk ์‚ญ์ œ
    • ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” Disk๋ฅผ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋‹ค.

3. ๋“œ๋ผ์ด๋ฒ„ ๊ฐœ๋ฐœ ๋…ธํŠธ

  • Zonal vs Regional ๊ด€๋ จ ์„ ํƒ ์˜ต์…˜์„ ์ œ๊ณตํ•˜๋Š” ๊ฒฝ์šฐ

    • ํ˜„์žฌ๋Š” Zonal๋กœ ์„ค์ •, Zone ๊ฐ’์€ Connection์—์„œ ํš๋“ ํ›„ ์ ์šฉ
  • IOPS ์ •๋ณด ๋“ฑ CSP๋ณ„๋กœ ์ œ๊ณตํ•˜๋Š” ์œ ์šฉํ•œ ๋ฐ˜ํ™˜ ์ •๋ณด๋Š”

    • ํ˜„์žฌ๋Š” KeyValueList์— ์ถ”๊ฐ€ํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•ด์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.
    • ๋ถ€๊ฐ€ ์ •๋ณด๋กœ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•จ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ
    • ๋ชจ๋“  CSP๊ฐ€ ๊ณตํ†ต์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ์ •๋ณด๋ผ๋ฉด ํ–ฅํ›„ ์ œ๊ณต ์ •๋ณด๋กœ ํ™•์žฅํ•˜๊ธฐ ์œ„ํ•จ์ž…๋‹ˆ๋‹ค.
  • Data-Disk Disk Type ๋ฐ Size ์„ค์ • ๋ฐ ์ฒ˜๋ฆฌ ๊ด€๋ จ

    • Root-Disk Type ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•๊ณผ ์œ ์‚ฌํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ์ฒ˜๋ฆฌ
      • ./cloud-driver-libs/cloudos_meta.yaml:disktype
      • ./cloud-driver-libs/cloudos_meta.yaml:disksize
  • Default disk type ๋ฐ size ์ฒ˜๋ฆฌ ๊ด€๋ จ

    • CB-Tumblebug๊ณผ ๊ฐ™์ด Code ์ˆ˜์ค€์—์„œ CSP๋ณ„๋กœ ์ œ๊ณตํ•˜๋Š” Disk type์„ ๊ตฌ๋ถ„ํ•ด๊ฐ€๋ฉด์„œ Disk ์ƒ์„ฑ ์š”์ฒญํ•˜๊ธฐ๋Š” ์–ด๋ ค์›€์ด ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๋˜ํ•œ, Test ๋“ฑ์„ ์œ„ํ•ด์„œ Type์ด๋‚˜ size๋ฅผ ๊ณ ๋ฏผํ•˜์ง€ ์•Š๊ณ  ๋น ๋ฅธ Disk ์ƒ์„ฑ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์ด๋Ÿฌํ•œ ์š”๊ตฌ๋ฅผ ์œ„ํ•ด์„œ default type ๋ฐ size๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
    • ์‚ฌ์šฉ์ž REST API๋Š” 'default'์™€ ""(๋นˆ๋ฌธ์ž์—ด)์„ ๋‹ค ์ œ๊ณตํ•˜์ง€๋งŒ,
      • Driver๋กœ ๋‚ด๋ ค ๋ณด๋‚ด์ง€๋Š” ๊ฐ’์€ ๋นˆ๋ฌธ์ž์—ด๋งŒ ๋‚ด๋ ค๊ฐ‘๋‹ˆ๋‹ค.
    • default type ๋ฐ size์˜ ์„ ์ • ๋‹ค์Œ ์ˆœ์„œ๋กœ ๊ณ ๋ คํ•ด์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.
        (1) CSP API๊ฐ€ default type ๋ฐ Size ๊ฐœ๋…์„ ์ œ๊ณตํ•  ๊ฒฝ์šฐ ์ด๋ฅผ ํ™œ์šฉ
        (2) CSP Console์—์„œ ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ธฐ๋ณธ ์„ค์ • ๊ฐ’์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ๊ฐ’์„ ํ™œ์šฉ
        (3) Referenceํ•  default Type์ด ์—†๋Š” ๊ฒฝ์šฐ Root-Disk์˜ default type์„ ํ™œ์šฉ
        (4) Referenceํ•  Size ๊ฐ’์ด ์—†๋Š” ๊ฒฝ์šฐ 50GB๋กœ ์„ค์ •
      
  • ๊ผญ ํ•„์š”ํ•ด ๋ณด์ด๋Š”๋ฐ ๊ณตํ†ต API์—์„œ ์ œ๊ณต๋˜์ง€ ์•Š๋Š” ์„ค์ •์ผ ๊ฒฝ์šฐ๋Š” ์ƒ๋‹จ ๋งํฌ์˜ ์ด์Šˆ์— ํ˜„ํ™ฉ์„ ๊ณต์œ  ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

  • ๊ทธ ์™ธ์— ๋Œ€์ƒ CSP Driver ๊ฐœ๋ฐœ์‹œ ๋ถ€์กฑํ•œ ๋ถ€๋ถ„์ด ์žˆ์œผ์‹œ๋ฉด ์ƒ๋‹จ ๋งํฌ์˜ ์ด์Šˆ์— ๊ณต์œ  ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

4. Disk Driver Common API

  • Source Tree

    $tree cb-spider/cloud-control-manager/cloud-driver/interfaces/
    cb-spider/cloud-control-manager/cloud-driver/interfaces/
    |-- CloudDriver.go
    |-- README.md
    |-- connect
    |   `-- CloudConnect.go
    `-- resources
        .
        |-- ClusterHandler.go
        |-- DiskHandler.go  <======================= Disk Driver API
        |-- IId.go
        |-- ImageHandler.go
        |-- KeyPairHandler.go
        |-- KeyValue.go
        |-- NLBHandler.go
        |-- SecurityHandler.go
        |-- VMHandler.go
        |-- VMSpecHandler.go
        `-- VPCHandler.go
    
  • Disk Driver API Spec v0.6.6 (latest)

          package resources
    
          import "time"
    
    
          //-------- Const
          type DiskStatus string
    
          const (
                  DiskCreating    DiskStatus = "Creating"
                  DiskAvailable   DiskStatus = "Available"
                  DiskAttached    DiskStatus = "Attached"
                  DiskDeleting    DiskStatus = "Deleting"
                  DiskError       DiskStatus = "Error"
          )
    
          //-------- Info Structure
          type DiskInfo struct {
                  IId     IID     // {NameId, SystemId}
    
                  DiskType string  // "", "SSD(gp2)", "Premium SSD", ...
                  DiskSize string  // "", "default", "50", "1000"  # (GB)
    
                  Status          DiskStatus      // DiskCreating | DiskAvailable | DiskAttached | DiskDeleting | DiskError
                  OwnerVM         IID             // When the Status is DiskAttached
    
                  CreatedTime     time.Time
                  KeyValueList []KeyValue
          }
    
    
          //-------- Disk API
          type DiskHandler interface {
    
                  //------ Disk Management
                  CreateDisk(DiskReqInfo DiskInfo) (DiskInfo, error)
                  ListDisk() ([]*DiskInfo, error)
                  GetDisk(diskIID IID) (DiskInfo, error)
                  ChangeDiskSize(diskIID IID, size string) (bool, error)
                  DeleteDisk(diskIID IID) (bool, error)
    
    
                  //------ Disk Attachment
                  AttachDisk(diskIID IID, ownerVM IID) (DiskInfo, error)
                  DetachDisk(diskIID IID, ownerVM IID) (bool, error)
          }
    
  • Disk ๊ด€๋ จ VMHandler API ๋ณ€๊ฒฝ: ๋ชจ๋“  Driver ๋ฐ˜์˜ ํ•„์š”

    • Data-Disk ๋ถ€์ฐฉ(Attach) ์ œ๊ณต์„ ์œ„ํ•œ ์†์„ฑ ์ถ”๊ฐ€

    • ๋ณ€๊ฒฝ ๋‚ด์šฉ

      type VMReqInfo struct {
          IId IID // {NameId, SystemId}
      
          ...
      
          RootDiskType string  // "", "SSD(gp2)", "Premium SSD", ...
          RootDiskSize string  // "", "default", "50", "1000" (GB)
      
          DataDiskIIDs []IID  <======================= ์ถ”๊ฐ€: Attachํ•  Disk list
      
          VMUserId     string
          VMUserPasswd string
      }
      
      type VMInfo struct {
          IId       IID       // {NameId, SystemId}
          StartTime time.Time // Timezone: based on cloud-barista server location.
      
          ...
      
          RootDiskType    string  // "SSD(gp2)", "Premium SSD", ...
          RootDiskSize    string  // "default", "50", "1000" (GB)
          RootDeviceName  string // "/dev/sda1", ...
      
          DataDiskIIDs []IID  <======================= ์ถ”๊ฐ€: Attach๋œ Disk list
      
          VMBootDisk      string // Deprecated soon  <======================= ์‚ญ์ œ ์˜ˆ์ •
          VMBlockDisk     string // Deprecated soon  <======================= ์‚ญ์ œ ์˜ˆ์ •
      
          ...
      }
      

5. CB-Spider Disk REST API ๊ทœ๊ฒฉ


History

- V0.2 => V0.3
  - Add REST API
- V0.1 => V0.2
  - Add DiskError Status