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 ๊ฒํ /๊ฐ๋ฐ ์ฉ
- ๊ฒํ ์๊ฒฌ: https://github.com/cloud-barista/cb-spider/issues/717
- ๋ถ์์ฐธ๊ณ : ์ฃผ์ CSP Disk(Volume) ์๋น์ค ์ ๊ณต ๊ธฐ๋ฅ ๋ถ์
- ๋ถ์์ฐธ๊ณ : AWS: VM์ 2๊ฐ์ Disk(Volume) Attach ์ํ ๋ฐ ์ค๋ณต Device Name ์ํ
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๋ฅผ ์ค์ ํ ์ ์๋ค.
- ์ฐธ๊ณ : VM Root Disk Configuration Guide
- (์์ฑ/๋ถ์ฐฉ) ์ฌ์ฉ์๊ฐ VM ์์ฑ ์์ฒญ์ ์๋์ผ๋ก Root-Disk๊ฐ ์์ฑ๋๋ฉฐ,
-
[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 ์์ฑ ํ์ธ: ์์ฑ์ด
-
๋ง์ดํธ ์์
-
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
- umount
-
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๋ก ํ์ฉ์ด ๊ฐ๋ฅํ๋ฉฐ,
- ํ์ผ ์์คํ
์ ํ์ฌํ์ฌ ํ์ฉํ๊ณ ์ ํ ๊ฒฝ์ฐ ํฌ๋งท ๋ฐ ๋ง์ดํธ ๊ณผ์ ์ด ํ์ํ๋ค.
- ์ฐธ๊ณ : Format / Mount / UMount
- ํ๋์ 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
- Root-Disk Type ์ฒ๋ฆฌ ๋ฐฉ๋ฒ๊ณผ ์ ์ฌํ ๋ฐฉ๋ฒ์ผ๋ก ์ฒ๋ฆฌ
-
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