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 규격