-
Notifications
You must be signed in to change notification settings - Fork 47
MyImage and Driver API
ByoungSeob Kim edited this page Dec 13, 2023
·
19 revisions
- CB-Spider MyImage Specification V0.1
- V0.1 : Driver 검토/개발 용
- 검토의견: https://github.com/cloud-barista/cb-spider/issues/719
- 분석참고: 주요 CSP VM Snapshot 제공 기능 분석
- 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의 추가/삭제 등이 불가능
[CB-Spider VM Snapshot 및 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를 삭제할 수 있다.
-
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 개발시 부족한 부분이 있으시면 상단 링크의 이슈에 공유 부탁드립니다.
-
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) }
-
- 기존 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와 구분 위한
-
Install & Start Guide
-
Features & Usage
-
- AdminWeb Tool Guide
- CLI Tool Guide
- REST API Guide
-
Design
-
Developer Guide
-
Cloud Driver Developer Guide
- Cloud Driver Developer Guide-WIP
- VM SSH Key Development Guide-WIP
- VM User Development Guide
- What is the CSP SDK API Version of drivers
- Region Zone Info and Driver API
- Price Info and Driver API
- (StartVM TerminateVM) API Call Counts and Waiting
- StartVM and TerminateVM Main Flow of drivers
- VM Root Disk Configuration Guide
- Security Group Rules and Driver API
- Network Load Balancer and Driver API
- VM Snapshot, MyImage and Disk Overview
- Kubernetes and Driver API(PMKS, K8S)
- Tag and Cloud Driver API
- AnyCall API Extension Guide
-
Test Reports
- v0.2.8-for-espresso-release
- v0.3.0-espresso-release
- Azure:Terminating VM
- cb-user@VM: ssh login, sudo run
- v0.3.14 test for SG Source
- v0.4.0-cafemocha-release
- Test via REST API Gateway
- Test Reports of v0.4.11 (IID2 initial Version)
- Test Reports of v0.4.12 (Register & Unregister existing Resources)
- Test Reports for v0.6.0 Release
- How to ...
- How to provision GPU VMs
- How to Resolve the 'Failed to Connect to Database' Error
- How to test CB Spider with Mock Driver
- How to install CB Spider on WSL2 under 공유기/사설망
- How to install CB Spider on macOS
- How to run CB Spider Container on macOS
- How to install OpenStack on a VM for CB Spider Testing
- How to get Azure available Regions
- How to profile memory usage in Golang
- Deprecated:How to install protoc and plugins
- [For Cloud-Migrator]