Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Metadata: VM Image] Enhance Supported VM ImageInfo #1405

Open
powerkimhub opened this issue Dec 20, 2024 · 8 comments
Open

[Metadata: VM Image] Enhance Supported VM ImageInfo #1405

powerkimhub opened this issue Dec 20, 2024 · 8 comments
Labels
enhancement New feature or request FullStack Developments across all layers of the CB-Spider

Comments

@powerkimhub
Copy link
Member

@powerkimhub powerkimhub added enhancement New feature or request FullStack Developments across all layers of the CB-Spider labels Dec 20, 2024
@yunkon-kim
Copy link
Member

yunkon-kim commented Dec 23, 2024

@powerkimhub 단위 관련하여 개선 의견을 공유 드립니다.

이미 다양한 각도에서 살펴보셨을 것이라 생각되는 단위에 대한 의견입니다. 가볍게 살펴보시길 바랍니다.

Background

단위에 대한 혼란은 20년이 넘도록 계속되고 있는 것 같습니다..

안타깝게도 이러한 IEC 측정은 유용하고 20년 이상 존재해 왔지만, 많은(대부분의?) 사람들이 아직 들어본 적도 없고 그것이 무엇인지 전혀 알지 못합니다. - https://massive.io/ko/file-transfer/gb-vs-gib-whats-the-difference/

Suggestion

Cloud-Barista에서 사이즈 단위 및 값을 맞추고 중심을 잡을 필요가 있어 보여 말씀드리는 의견입니다.

  • 현황: 현재 기본 단위로 GB, MB를 사용하고 있지만, 실제 값은 GiB, MiB의 값이 제공되고 있습니다.
  • 제안: 단위를 변경하거나, 값을 변경하여 일관성을 유지하도록 개선이 필요하여 제안 드립니다.

(참고) 사이즈 단위와 값을 표기하는 여러 가지 방법이 활용되고 있었으며, 이 중 몇 가지를 공유드립니다.

  1. 변수 명칭에 기본 단위 표시
type VMSpecInfo struct {
        MemMiB   string    `example:”1024”`   // (확인) 단위 MiB, 숫자만 입력, 추후 활용시 상수 값으로 추출 예정
}
type VMSpecInfo struct {
        MemMB   string    `example:”1000”`   // (확인) 단위 MB, 숫자만 입력, 추후 활용시 상수 값으로 추출 예정
}
  1. 기본 단위 별도 표기
type VMSpecInfo struct {
        Mem   string    `example:”1024”`  // (확인) 단위 MiB, 숫자만 입력, 추후 활용시 상수 값으로 추출 예정
        MemUnit string `example:"MiB"`  // 단위를 명시 및 제공
}
  1. 변수 명칭에 단위 표시, Default 단위 및 Byte 단위 제공
type VMSpecInfo struct {
        MemB    string    `example:"1,073,741,824"` // Byte 단위 제공, 사용자가 환산하여 사용
        MemMi   string    `example:”1024”`              // (확인) 단위 MB, 숫자만 입력, 추후 활용시 상수 값으로 추출 예정
}

References

@powerkimhub
Copy link
Member Author

@yunkon-kim (@MZC-CSC @ish-hcc @innodreamer )

  • 좋은 의견/제안 입니다.
  • 금번 작업에 반영하겠습니다.

@powerkimhub
Copy link
Member Author

@MZC-CSC @ish-hcc @innodreamer (@yunkon-kim)


[주요 CSP의 VM Spec 선택 가이드에서의 단위 표기법 및 Spider 채택 단위]

  • 세부내용: 아래 부록 참고
Resources AWS Azure GCP Alibaba Tencent NVIDIA CB-Spider
Main Memory GiB GiB GB GiB GB - MiB
Storage/Disk GB GiB GiB GB GB - GB
GPU Memroy GB GB GB GB GB GB GB

[추가 사항]

  • CSP 사이트 공유 단위와 실제 CSP CLI로 제공되는 단위가 다른 CSP들이 존재
    • 예시) AWS VM Spec 정보 중 Memory 단위(GiB vs MiB)

       <CLI 제공 정보>
           "SizeInMiB" : 1048576
      
    • 예시) Azure VM Spec 정보 중 Memory 단위(GiB vs MB)

       <CLI 제공 정보>
        "memoryInMB" : 8192,
      
    • Main Memory의 경우,

      • AWS, Azure API의 경우에도 MiB 단위로 제공하고,
      • Memory 경우 작은 단위도 민감한 듯하여 MiB로 제공

[적용 가이드]

  • 적용 방식

    • 1. 변수 명칭에 기본 단위 표시(위 제안글 참고) 를 기본으로 처리, 부득이한 경우 다른 방식 고려
  • 적용 대상 및 시기:

    • VMSpecHandler:Disk, Mem ----------------------------- 현재 작업 마무리 후 추가 변경으로 추진(별도 안내)
    • ImageHandler:OSDiskSize ------------------------------- 현재 작업에 반영
    • PriceInfoHandler:Storage, MaxVolumeSize, Memory, GpuMemory ------------ 이하 항목 별도 일정으로 안내
    • ClusterHandler:RootDiskSize
    • DiskHandler:DiskSize
    • VMHandler:RootDiskSize
  • 변환 시에 CSP API로 제공되는 실제 값이 어떤 단위인지 필수 확인 후 변환 부탁 드립니다.




[부록] 주요 CSP들 VM Spec 가이드의 단위 표기 방법 참고

[AWS]

[Azure]

[GCP]

[Alibaba]

[Tencent]

[NVIDIA]

@powerkimhub
Copy link
Member Author

powerkimhub commented Feb 5, 2025

[추가 조사/분석] CSP별 Image 정보에서 제공되는 Disk Size 의미

  • 대략 다음과 같은 3가지 타입으로 제공
  • (1) 생성될 VM의 Root Disk Size: GCP, NHN, NCP 등
    • GCP, NHN의 경우: Image 정보로 제공되는 DiskSize는 최소 RootDisk Size를 의미하여, Upsize 설정이 가능함.
    • 세부 내용 아래 CSP별 관련 이미지 참고
  • (2) Image 자체 Size: OpenStack 등
    • OpenStack: root disk size 정보는 flavore에서 제공하고 있으며, 별도로 root disk size를 지정할수도 있음.
  • (3) Image 정보에서 Disk Size를 별도로 제공하지 않음: AWS 등
    • AWS: Image, Spec 정보에는 Root Disk 정보 제공 없음,
      • 별도로 Root Volume 설정/변경 가능함.

[분셕 결과/추진 방안]

  • Spider Image 정보 중 OSDiskTypeOSDiskSizeInGB
  • Image로 부터 생성될 VM의 Root Disk에 대한 정보를 제공함.
    • 이러한 의미로 제공하지 않는 CSP는 NA, -1로 표시
  • 필요시, 추후 Image 자체에 대한 정보 및 format을 제공

[GCP Image OSDiskSize 관련 점검]

  • VM 생성까지는 안해봤지만,
  • 다음 Disk Size 옵션 변경으로 보이는 변화를 보면, 생성되는 VM Root Disk Size로 생각됩니다.
  • Image 선택(default diskSize: 10G, 아마도 최소 Size)
    • Image

  • Image diskSize 변경(50G)
    • Image

  • 참고
    • Image


[NHN Image OSDiskSize 관련 점검]

  • Image 선택(최소 블록 스토리지: 20G)
    • Image

  • Root Block Storage 변경(60G)
    • Image


[NCP Image OSDiskSize 관련 점검]

  • Image 선택(Root Disk Size가 50G, 100G로 고정)
    • 50G 선택: Linux 계열 이미지 선택 가능
    • 100G 선택: Windows 이미지 선택 가능
    • 50G 선택시 참고
      • Image
      • 이후 VM Spec은 50G Disk Spec만 선택 가능
        • Image


[OpenStack Image OSDiskSize 관련 점검]

  • Image 자체 size 및 format 제공
    • Image

@MZC-CSC
Copy link
Contributor

MZC-CSC commented Feb 5, 2025

GCP의 경우
(https://cloud.google.com/compute/docs/reference/rest/v1/images/list)

image에 대해서 압축했을 때 크기( archiveSizeBytes ) 와 압축을 푸는데 필요한 disk크기 ( diskSizeGB ) 로 구분됩니다.
추측하건데 diskSizeGB는 vm 생성할 때 필요한 최소 크기가 아닐까요?

items[].archiveSizeBytes : Size of the image tar.gz archive stored in Google Cloud Storage (in bytes).
items[].diskSizeGb : Size of the image when restored onto a persistent disk (in GB).

-----참고 : image 조회 결과 예시-----
project = ubuntu-os-cloud
image = ubuntu-2204-jammy-v20241218 일 때,

{
"kind": "compute#image",
"id": "6194193470833028373",
"creationTimestamp": "2024-01-16T02:01:30.602-08:00",
"name": "ubuntu-1804-bionic-arm64-v20240116a",
"description": "Canonical, Ubuntu, 18.04 LTS, arm64 bionic image built on 2024-01-16",
"sourceType": "RAW",
"rawDisk": {
"source": "",
"containerType": "TAR"
},
"status": "READY",
"archiveSizeBytes": "2720464896", => 2.53Gb
"diskSizeGb": "10",
"family": "ubuntu-1804-lts-arm64",
"storageLocations": [
"us",
"eu",
"asia"
],
"architecture": "ARM64",
"enableConfidentialCompute": false
}

@powerkimhub
Copy link
Member Author

@MZC-CSC


  • 넵, GCP나 NHN의 값은 최소 사이즈로 생각합니다.
  • 이 값을 수정하지 않으면 그대로 VM의 Root Disk Size가 되고
  • UP size로 변경하면 변경된 사이즈로 VM의 Root Disk Size로 생성 되는 걸로 보입니다.
    • 위 GCP 캡춰 이미지가 이러한 내용인데, 이미지 링크가 깨져서 크게 볼수는 없네요.
  • GCP, NHN 2 CSP만 생각하면, OSDiskSizeInGB 보다는 OSDiskMinSizeInGB가 적합하긴 합니다만,
  • NCP의 경우는 Min Size 의미가 아니어서, OSDiskSizeInGB라는 포괄적인 이름으로 추상화 하였습니다.
    • NCP의 경우 사용자가 알면 좋은 정보인데 현재는 Image 정보 외에 제공할 곳이 적당치 않습니다.
  • Spider가 제공하는 Image 정보는 VM 생성을 위해서 참고하는 정보이며, 설정을 위한 정보는 아닙니다.
    • Image 정보의 OSDiskSizeInGB 값을 RootDiskSize 설정 값으로 보기 보다는
    • 생성되는 VM의 RootDisk 참고 값 정도로 봐주시기 바랍니다.
  • 아시는 바와 같이,
    • Spider에는 VM 생성할 때, RootDiskType과 RootDiskSize를 설정안할 수도 있고, 설정 할수도 있습니다.
    • 설정 안할 경우에는 OSDiskSizeInGB 값을 default로 생성되는 RootDiskSize 값으로 사용자가 참고할 수 있고,
    • 설정 할 경우에는 OSDiskSizeInGB 값 이상 설정하도록 최소 size로 참고할 수도 있겠습니다.

@innodreamer
Copy link
Member

NCP VPC의 경우, 얼마전부터 3세대(3G) KVM 하이퍼바이저 기반 VM이 지원되면서 VM console UI가 변경되었으니 참고하시기 바랍니다.
아래와 같이 VM 생성시 storage 설정 단계가 나옵니다.

  • KVM 기반(3G) VM 생성시 : storage size 변경 가능
  • 기존 Zen 기반 VM 생성시 : 기존과 같이 storage size 변경 불가 (Image info의 default root disk size로 고정되어 적용됨.)

현재 버전의 driver 코드에는 신규 3G KVM 기반 VM image 조회 및 VM이 생성 가능하도록 NCP의 신규 API가 적용되어 update 되어 있는 상태입니다. (단, 현재는 VM image info 조회시 제시되는 default root disk size로 생성되는 상태이며, 추후 disk size 설정도 가능하도록 보완할 예정입니다.)

추가로, image info 조회시 default root disk size도 위의 신규 API가 적용된 driver로 조회시 아래와 같이 변경되어 제시되는 상태입니다.

  • KVM 기반(3G) VM image의 default root disk size : Linux 계열 > 10GB (GPU image : 100GB), Windows 계열 > 30GB
  • 기존 Zen 기반 VM image의 default root disk size : 기존과 같이 Linux 계열 > 50GB, Windows 계열 > 100GB

< KVM 기반(3G) VM 생성시 console UI (Ubuntu image의 경우)>
Image

< 기존 Zen 기반 VM 생성시 console UI (Windows image의 경우)>
Image

@powerkimhub
Copy link
Member Author

@MZC-CSC


[AWS:Image Info]

  • 현재 최신 버전의 OSPlatform 정보가 모두 NA로 제공되고 있습니다.
  • 참고
curl -sX GET http://localhost:1024/spider/vmimage?ConnectionName=aws-config01 | json_pp | grep OSPlatform | uniq
         "OSPlatform" : "NA",

  • 다음 코드 블록을 참고해봐 주시기 바랍니다.
    func GetOsTypeFromEc2Image(ec2Image *ec2.Image) string {
    var guestOS string
    //주로 윈도우즈는 Platform 정보가 존재하며 리눅스 계열은 PlatformDetails만 존재하는 듯. - "Linux/UNIX"
    //윈도우즈 계열은 PlatformDetails에는 "Windows with SQL Server Standard"처럼 SQL정보도 포함되어있음.
    if !reflect.ValueOf(ec2Image.Platform).IsNil() {
    cblogger.Info("guestOS =", *ec2Image.Platform)
    guestOS = *ec2Image.Platform //Linux/UNIX
    } else {
    // Platform 정보가 없는 경우 PlatformDetails 정보가 존재하면 PlatformDetails 값을 이용함.
    if !reflect.ValueOf(ec2Image.PlatformDetails).IsNil() {
    guestOS = *ec2Image.PlatformDetails //Linux/UNIX
    }
    }
    return guestOS
    }

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request FullStack Developments across all layers of the CB-Spider
Projects
None yet
Development

No branches or pull requests

4 participants