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

MyImage and Driver API

- CB-Spider MyImage Specification V0.1
- V0.1 : Driver ๊ฒ€ํ† /๊ฐœ๋ฐœ ์šฉ

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์„ ์š”์ฒญํ•ด์•ผ ํ•œ๋‹ค.
  • 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 ๊ฐ’์œผ๋กœ ๋งŒ๋“ฆ
  • 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
                  ...
          }
      
      
      

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