MyImage and Driver API - cloud-barista/cb-spider GitHub Wiki
MyImage and Driver API
- CB-Spider MyImage Specification V0.1
- V0.1 : Driver ๊ฒํ /๊ฐ๋ฐ ์ฉ
- ๊ฒํ ์๊ฒฌ: https://github.com/cloud-barista/cb-spider/issues/719
- ๋ถ์์ฐธ๊ณ : ์ฃผ์ CSP VM Snapshot ์ ๊ณต ๊ธฐ๋ฅ ๋ถ์
1. CB-Spider MyImage Overview
- Snapshot์ ํ์ฌ ์ด์ ์ค์ธ ์์์ ์ํ๋ฅผ ์ ์ฅํ ํ ํ์ ์์ ๋์ผํ ์ํ๋ก ๋ณต์ ํ์ฌ ์ฌ ์์ฐํ ์ ์๋ ๊ธฐ๋ฅ์ ๋งํ๋ค.
- Snapshot์ VM์ ์ํ๋ฅผ ์ ์ฅํด์ฃผ๋
VM Snapshot
๊ณผ Disk(Volume)์ ์ํ๋ฅผ ์ ์ฅํด์ฃผ๋Disk Snapshot
์ด ์กด์ฌํ๋ค. - CB-Spider MyImage ๊ด๋ฆฌ ๊ธฐ๋ฅ์ VM Snapshot ์คํ๊ณผ ๊ฒฐ๊ณผ๋ก ์์ฑ๋ VM Image(MyImage)๋ฅผ ๊ด๋ฆฌํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
- MyImage ์ข ๋ฅ: VM Snapshot ๊ฒฐ๊ณผ ์ด๋ฏธ์ง, ์ฌ์ฉ์๊ฐ ์ง์ ์ ๋ก๋ํ ์ด๋ฏธ์ง(์ง์ ๋ฏธ์ ) ๋ฑ์ด ๋ ์ ์๋ค
- CB-Spider VM Snapshot์ ์ด์ ์ค์ธ VM์ ์ํ์ VM์ Attach๋ Data-Disk์ ์ํ ๋ฐ ๊ตฌ์ฑ ํ์์ด ์ ์ฅ๋๋ค.
- VM ์ํ์๋ VM์ ์ด์์ฒด์ , ์ถ๊ฐ ์ค์น๋ SW, VM์ ์ ์ฅ๋ ํ์ผ ๋ฑ์ ํฌํจํ๋ฉฐ,
- ์ธ๋ถ ํญ๋ชฉ์ CSP๋ง๋ค ์ฐจ์ด๊ฐ ์์ ์ ์๋ค.
- ์์: Command History์ ๊ฒฝ์ฐ AWS์ ๊ฐ์ด ๋ณต์ ๋๋ ๊ฒฝ์ฐ์ Azure, GCP์ ๊ฐ์ด ๋ณต์ ๋์ง ์๋ ๊ฒฝ์ฐ๊ฐ ์์
- CB-Spider์์๋ ์ด์ ๊ฐ์ ์ธ๋ถ ํญ๋ชฉ์ ์ฐจ์ด๋ ๊ณ ๋ คํ์ง ์๊ณ , ๊ฐ CSP๋ณ ํน์ฑ์ ๊ทธ๋๋ก ์ ๊ณตํ๋ค.
- VM์ ์ฐ๋๋ Data-Disk๋ ํจ๊ป ์ ์ฅ๋๋ฏ๋ก ์ํ ์ ์ฅ์ ์ํ์ง ์์ ๊ฒฝ์ฐ์๋
- ๋์ VM์์ ๋จผ์ Data-Disk๋ฅผ Detach ํ Snapshot์ ์์ฒญํด์ผ ํ๋ค.
- VM ์ํ์๋ VM์ ์ด์์ฒด์ , ์ถ๊ฐ ์ค์น๋ SW, VM์ ์ ์ฅ๋ ํ์ผ ๋ฑ์ ํฌํจํ๋ฉฐ,
- CB-Spider๋ ๋ค์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด
- MyImage ๊ด๋ฆฌ ์์ญ์ VM Snapshot ๊ธฐ๋ฅ๊ณผ ๊ฒฐ๊ณผ๋ก ์์ฑ๋ MyImage๋ฅผ ๊ด๋ฆฌํ๋ฉฐ, MyImage๋ VM ๊ด๋ฆฌ ์์ญ์์ ํ์ฉํ๋ค.
- โป Notice
- MyImage๋ฅผ ํ์ฉํ VM ์์ฑ ์์๋ MyImage์ ์ ์๋ Root-Disk ๋ฐ Data-Disk์ ๋์ผ ๊ตฌ์ฑ ํ์์ผ๋ก VM์ด ์์ฑ๋๋ฉฐ, - ์ด๋, Root-Disk ๋ฐ Data-Disk์ Type ๋ฐ Size ๋ณ๊ฒฝ ๋๋ Data-Disk์ ์ถ๊ฐ/์ญ์ ๋ฑ์ด ๋ถ๊ฐ๋ฅ
2. CB-Spider MyImage ์ ๊ณต ๊ธฐ๋ฅ
- MyImage ์์ฑ
-
์ด์ ์ค์ธ VM์ IID(NameId)๋ฅผ ์ค์ ํ์ฌ VM Snapshot ์์ฑ์ ์์ฒญํ ์ ์์ผ๋ฉฐ,
-
Snapshot ์คํ ๊ฒฐ๊ณผ๋ก MyImage๊ฐ ์์ฑ๋๋ค.
-
์์ฑ๋ MyImage๋ VM ์์ฑ์ ์ด๋ฏธ์ง๋ก ์ ํํ์ฌ ๋์ผํ ํ์์ VM ์์ฑ์ ํ์ฉํ ์ ์๋ค.
-
โป Notice ( ๊ด๋ จ ๋ถ์ ๋ฐ ๋ฐฉ์ ์ฐธ๊ณ )
Azure์ ๊ฒฝ์ฐ VM Snapshot ํ ์๋ณธ VM์ ์ฌ์ฉ ๋ถ๊ฐ ์ํ๋ก ์ ํ๋จ
-
- MyImage ๋ชฉ๋ก
- ์์ฑ๋ MyImage ๋ชฉ๋ก์ ์ ๊ณตํ๋ค.
- MyImage ์ ๋ณด
- MyImage ์์ฑ์ ์ ํํ VM IID ๋ฐ MyImage์ ์ํ๋ฅผ ์ ๊ณตํ๋ค.
- ์ ๊ณตํ๋ MyImage ์ํ ์ ๋ณด ์ข
๋ฅ๋ ๋ค์๊ณผ ๊ฐ๋ค.
Available
: ์ฌ์ฉ ๊ฐ๋ฅํ ์ํUnavailable
: ์ฌ์ฉ ๋ถ๊ฐ๋ฅํ ์ํ
- MyImage ์ญ์
- ์ฌ์ฉํ์ง ์๋ MyImage๋ฅผ ์ญ์ ํ ์ ์๋ค.
3. ๋๋ผ์ด๋ฒ ๊ฐ๋ฐ ๋ ธํธ
-
VM Snapshot ๋ฐ Snapshot์ ํตํด์ ์์ฑ๋ MyImage๋ฅผ ์ด์ฉํ์ฌ ๋ณต์ ๋ VM ์คํ๊ด๋ จ ์ํ ํ๊ฒฝ์
- ์๋จ์ ๋ถ์์ฐธ๊ณ ๋งํฌ์ 1page๋ฅผ ์ฐธ๊ณ ํด์ฃผ์๊ธฐ ๋ฐ๋๋๋ค.
- Driver ๊ฐ๋ฐ ์์ ๋์ ์ํ์ ๋ถ์์ฐธ๊ณ ๋งํฌ์ ๋์ผ ์๋๋ฆฌ์ค ํ๊ฒฝ์ผ๋ก ๊ฒฐ๊ณผ ํ์ธ ๋ถํ ๋๋ฆฝ๋๋ค.
-
์์์
Notice
๋ก ๊ฐ์ด๋ํ๊ณ ์๋ MyImage๋ฅผ ์ด์ฉํ VM ์์ฑ์ Disk ์ถ๊ฐ ๋ฐ ์ค์ ๊ด๋ จ ์ ์ฝ ์ฌํญ์ ๊ฒฝ์ฐ๋- ๊ฐ๋ณ Driver ์์ค์์๋ CSP์ ์ง์ ์ฌ๋ถ๋ฅผ ๋ณ๋๋ก ๊ณ ๋ คํ์ค ํ์๋ ์์ต๋๋ค.
- MyImage ๊ธฐ๋ฐ VM ์์ฑ ์์๋ Data-Disk ์ถ๊ฐ ๋ฐ ๋ณ๊ฒฝ ์ค์ ์์ฒญ ์์๋ Server ์์ค์์ ์๋ฌ๋ก ์ฐจ๋จ ์ํฌ ์์ ์ ๋๋ค.
-
VM Snapshot ์คํ ์ ๋์ VM ์ํ ๋ณํ(stop, restart ๋ฑ)๋ CSP๋ณ ํน์ด ์ฌํญ ๋ฑ ํน์ด์ฌํญ์ ์ ์ด์ ๋งํฌ์ ๊ณต์ ๋ถํ ๋๋ฆฝ๋๋ค.
-
๋ค์์ ์์ ์ ๋๋ค.
- ์ฐธ๊ณ : AWS์ ๊ฒฝ์ฐ
- By default, Amazon EC2 shuts down the instance, takes snapshots of any attached volumes, creates and registers the AMI, and then reboots the instance. - Choose No reboot if you don't want your instance to be shut down. If you choose No reboot, we can't guarantee the file system integrity of the created image.
- ์ฐธ๊ณ : Azure์ ๊ฒฝ์ฐ
- VM์ด Stop ๋๊ณ , Generalized(์ผ๋ฐํ) ์ํจ ํ Snapshot ์ด๋ฏธ์ง ์ ์ฅ, ๋ค์ ์ฌ์ฉํ ์ ์๊ฒ ๋จ
- VM Generalized: VM์ HostName์ด๋ IP์ ๊ฐ์ด VM๋ง๋ค ๋ฌ๋ผ์ผ ํ๋ ์ ๋ณด๋ค์ ์ญ์ ๋๋ dummy ๊ฐ์ผ๋ก ๋ง๋ฆ
- ์ฐธ๊ณ : AWS์ ๊ฒฝ์ฐ
-
OS Platform ์ข ๋ฅ ๋ฑ CSP๋ณ๋ก ์ ์ฉํ ๋ฐํ ์ ๋ณด๋
- ํ์ฌ๋ KeyValueList์ ์ถ๊ฐํ์ฌ ๋ฐํํด์ฃผ์๊ธฐ ๋ฐ๋๋๋ค.
- ๋ถ๊ฐ ์ ๋ณด๋ก ์ ๊ณตํ๊ธฐ ์ํจ๋ฟ๋ง ์๋๋ผ
- ๋ชจ๋ CSP๊ฐ ๊ณตํต์ผ๋ก ์ ๊ณตํ๋ ์ ๋ณด๋ผ๋ฉด ํฅํ ์ ๊ณต ์ ๋ณด๋ก ํ์ฅํ๊ธฐ ์ํจ์ ๋๋ค.
-
๊ผญ ํ์ํด ๋ณด์ด๋๋ฐ ๊ณตํต API์์ ์ ๊ณต๋์ง ์๋ ์ค์ ์ผ ๊ฒฝ์ฐ๋ ์๋จ ๋งํฌ์ ์ด์์ ํํฉ์ ๊ณต์ ๋ถํ๋๋ฆฝ๋๋ค.
-
๊ทธ ์ธ์ ๋์ CSP Driver ๊ฐ๋ฐ์ ๋ถ์กฑํ ๋ถ๋ถ์ด ์์ผ์๋ฉด ์๋จ ๋งํฌ์ ์ด์์ ๊ณต์ ๋ถํ๋๋ฆฝ๋๋ค.
4. MyImage 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 |-- IId.go |-- ImageHandler.go |-- KeyPairHandler.go |-- KeyValue.go |-- MyImageHandler.go <======================= MyImage Driver API |-- NLBHandler.go |-- SecurityHandler.go |-- VMHandler.go |-- VMSpecHandler.go `-- VPCHandler.go
-
MyImage Driver API Spec V0.6.5 (latest)
package resources import "time" //-------- Const type MyImageStatus string const ( MyImageAvailable MyImageStatus = "Available" MyImageUnavailable MyImageStatus = "Unavailable" ) //-------- Info Structure type MyImageInfo struct { IId IID // {NameId, SystemId} SourceVM IID Status MyImageStatus // Available | Unavailable CreatedTime time.Time KeyValueList []KeyValue } //-------- MyImage API type MyImageHandler interface { //------ Snapshot to create a MyImage SnapshotVM(snapshotReqInfo MyImageInfo) (MyImageInfo, error) //------ MyImage Management ListMyImage() ([]*MyImageInfo, error) GetMyImage(myImageIID IID) (MyImageInfo, error) DeleteMyImage(myImageIID IID) (bool, error) }
-
MyImage๊ด๋ จ VMHandler API ๋ณ๊ฒฝ: ๋ชจ๋ Driver ๋ฐ์ ํ์
- ๊ธฐ์กด Public Image์ ๊ตฌ๋ถ ์ํ
ImageType
๋ฐ ๊ด๋ จ ์ค์ ์์ฑ ์ถ๊ฐ - ํ์ ๋ฒ์ ํธํ์ ์ํด์ ImageType ์ค์ ์ํ๋ฉด, default๋ก
PublicImage
์ ์๋ฏธ - ๋ณ๊ฒฝ ๋ด์ฉ
type ImageType string <======================= ์ถ๊ฐ: Image Type ์ ์ const ( PublicImage ImageType = "PublicImage" MyImage ImageType = "MyImage" ) type VMReqInfo struct { IId IID // {NameId, SystemId} ImageType ImageType // PublicImage | MyImage, default: PublicImage <======================= ์ถ๊ฐ: ์ฌ์ฉํ ์ด๋ฏธ์ง์ Image Type ImageIID IID ... } ... type VMInfo struct { IId IID // {NameId, SystemId} StartTime time.Time // Timezone: based on cloud-barista server location. Region RegionInfo // ex) {us-east1, us-east1-c} or {ap-northeast-2} ImageType ImageType // PublicImage | MyImage <======================= ์ถ๊ฐ: ์ฌ์ฉํ ์ด๋ฏธ์ง์ Image Type ImageIId IID ... }
- ๊ธฐ์กด Public Image์ ๊ตฌ๋ถ ์ํ