-
Notifications
You must be signed in to change notification settings - Fork 48
Disk and Driver API
ByoungSeob Kim edited this page Sep 23, 2022
·
21 revisions
- 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 시험
- CB-Spider는 연동 대상 클라우드(CSP)가 제공하는 Disk(또는 Volume)를
- 동일한 인터페이스를 사용하여 제어할 수 있는 Disk 제어 기능을 제공한다.
- CB-Spider 사용자는 Disk를 아래 그림과 같이 Root-Disk(R-Disk, 운영체제 포함)와 Data-Disk(D-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가 생성되며,
-
- (생성) 사용자는 필요 시점에 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를 삭제할 수 있다.
-
[CB-Spider Disk 종류 및 활용 개요]
-
-
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
-
- 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로 활용이 가능하며,
- 파일 시스템을 탑재하여 활용하고자 할 경우 포맷 및 마운트 과정이 필요하다.
- 하나의 VM에는 여러 개의 Data-Disk 부착이 가능하며, 하나의 Data-Disk는 하나의 VM에만 부착이 가능하다.
-
- Disk 해제
- 특정 VM에 부착된 Disk를 해제(Detach)할 수 있다.
- 해제된 Disk는 다른 VM에 부착하여 활용할 수 있다.
- Disk 삭제
- 사용하지 않는 Disk를 삭제할 수 있다.
-
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 개발시 부족한 부분이 있으시면 상단 링크의 이슈에 공유 부탁드립니다.
-
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) }
-
-
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 <======================= 삭제 예정 ... }
-
- V0.2 => V0.3
- Add REST API
- V0.1 => V0.2
- Add DiskError Status
-
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]