커스텀 이미지 만들기


소스 디스크, 이미지, 스냅샷 또는 Cloud Storage에 저장된 이미지에서 커스텀 이미지를 만들고 이 이미지를 사용하여 가상 머신(VM) 인스턴스를 만들 수 있습니다. 커스텀 이미지는 영구 부팅 디스크 또는 구체적인 이미지를 만들어 특정 상태로 수정하고 VM을 만들기 위해 이 상태를 저장해야 하는 상황에 적합합니다.

또는 가상 디스크 가져오기 도구를 사용하여 부팅 디스크 이미지를 기존 시스템에서 Compute Engine으로 가져와 커스텀 이미지 목록에 추가할 수 있습니다.

시작하기 전에

커스텀 이미지 만들기

이 섹션에서는 Linux VM에서 커스텀 이미지를 만드는 방법을 설명합니다. Windows 이미지를 만드는 방법에 대한 상세 설명은 Windows 이미지 만들기를 참조하세요.

이미지 저장 위치 선택

커스텀 이미지를 만들 때 이중 리전 위치를 제외하고 이미지의 Cloud Storage 위치를 지정할 수 있습니다. 이미지 스토리지 위치를 지정하면 데이터 위치에 대한 규제 및 규정 준수 요구사항뿐 아니라 여러 리전 간에 데이터 중복성을 보장함으로써 고가용성 요건을 충족할 수 있습니다. Cloud Storage에 저장된 이미지를 생성, 수정, 삭제하려면 roles/compute.storageAdmin이 있어야 합니다.

스토리지 위치 기능은 선택사항입니다. 위치를 선택하지 않으면 Compute Engine은 이미지 소스와 가장 가까운 멀티 리전에 이미지를 저장합니다. 예를 들어 us-central1에 있는 소스 디스크에서 이미지를 만들 때 커스텀 이미지의 위치를 지정하지 않으면 Compute Engine은 us 멀티 리전에 이미지는 저장합니다.

VM을 만드는 리전에서 이미지를 사용할 수 없는 경우 Compute Engine은 VM을 처음 만들 때 해당 리전에 이미지를 캐시합니다.

이미지가 저장된 위치를 확인하려면 gcloud compute에서 images describe 명령어를 사용하세요.

gcloud compute images describe IMAGE_NAME \
    --project=PROJECT_ID

다음을 바꿉니다.

  • IMAGE_NAME: 이미지의 이름입니다.

  • PROJECT_ID: 이미지가 속한 프로젝트 ID입니다.

이 기능이 출시되기 이전의 모든 기존 이미지는 현재 위치에 그대로 남아 있으며, 변경 사항은 다른 모든 이미지의 이미지 위치를 볼 수 있다는 점뿐입니다. 기존 이미지를 옮기려면 원하는 위치에서 이 이미지를 다시 만들어야 합니다.

이미지를 위한 VM 준비

실행 중인 VM에 연결되어 있는 경우에도 디스크에서 이미지를 만들 수 있습니다. 그러나 이미지의 안정성을 높이려면 이미지를 쉽게 캡처할 수 있는 상태로 VM을 전환해야 합니다. 이 섹션에서는 이미지의 부팅 디스크를 준비하는 방법을 설명합니다.

영구 디스크에 데이터 쓰기 최소화

디스크 쓰기를 줄이려면 다음 프로세스 중 하나를 사용합니다.

  • 인스턴스가 영구 디스크에 데이터를 쓰지 않고 종료될 수 있도록 VM을 중지합니다.

  • 이미지를 만들기 전에 VM을 중지할 수 없는 경우 디스크에 쓰는 양을 최소화하고 파일 시스템을 동기화합니다. 영구 디스크에 쓰기를 최소화하려면 다음 단계를 따르세요.

    1. 영구 디스크에 데이터를 쓰는 앱 또는 운영체제 프로세스를 일시중지합니다.
    2. 필요한 경우 디스크에 앱 플러시를 실행합니다. 예를 들어 MySQL에는 FLUSH 문이 있습니다. 다른 앱에도 비슷한 프로세스가 있을 수 있습니다.
    3. 앱에서 영구 디스크에 쓰지 못하도록 합니다.
    4. sudo sync를 실행합니다.

디스크의 자동 삭제 옵션 중지

기본적으로 자동 삭제 옵션은 부팅 디스크에 사용 설정되어 있습니다. 디스크에서 이미지를 만들기 전에 자동 삭제를 중지하여 VM이 삭제될 때 디스크가 자동으로 삭제되지 않도록 합니다.

Google Cloud Console, Google Cloud CLI 또는 Compute Engine API를 사용하여 디스크의 자동 삭제를 중지할 수 있습니다.

Console

  1. Google Cloud 콘솔에서 VM 인스턴스 페이지로 이동합니다.

    VM 인스턴스 페이지로 이동

  2. 이미지를 만들 수 있는 소스로 사용하고 있는 VM을 클릭합니다. VM 인스턴스 세부정보 페이지가 표시됩니다.

  3. 수정을 클릭합니다.

  4. 부팅 디스크 섹션의 삭제 규칙에서 디스크 유지 옵션이 선택되어 있는지 확인합니다.

  5. 저장을 클릭합니다.

gcloud

Google Cloud CLI에서 gcloud compute instances set-disk-auto-delete 명령어를 사용하여 디스크의 자동 삭제 옵션을 중지합니다.

gcloud compute instances set-disk-auto-delete VM_NAME \
    --no-auto-delete \
    --disk=SOURCE_DISK

다음을 바꿉니다.

  • VM_NAME: VM 인스턴스의 이름입니다.
  • SOURCE_DISK: 이미지를 만들 디스크의 이름입니다.

API

디스크의 자동 삭제 옵션을 설정하려면 instances.setDiskAutoDelete 메서드에 대한 POST 요청을 실행합니다.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setDiskAutoDelete?autoDelete=false&deviceName=SOURCE_DISK

다음을 바꿉니다.

  • PROJECT_ID: 소스 VM이 속한 프로젝트 ID입니다.
  • ZONE: 소스 VM이 있는 영역입니다.
  • VM_NAME: 소스 VM 이름입니다.
  • SOURCE_DISK: 이미지를 만들 디스크의 기기 이름입니다.

VM을 준비한 후 이미지를 만듭니다.

이미지 만들기

다음 소스에서 디스크 이미지를 만들 수 있습니다.

  • 영구 디스크(디스크가 VM에 연결된 경우에도 가능)
  • 영구 디스크의 스냅샷
  • 프로젝트의 다른 이미지
  • 다른 프로젝트에서 공유된 이미지
  • Cloud Storage의 압축 RAW 이미지

10분마다 한 번씩 디스크 이미지를 만들 수 있습니다. 디스크 이미지 만들기 요청 버스트를 실행하려면 60분 동안 최대 6개의 요청을 실행할 수 있습니다. 자세한 내용은 스냅샷 빈도 제한을 참조하세요.

Console

  1. Google Cloud 콘솔에서 이미지 만들기 페이지로 이동합니다.

    이미지 만들기로 이동

  2. 이미지의 이름을 지정합니다.

  3. 이미지를 만들 소스를 지정합니다. 소스는 영구 디스크, 스냅샷, 다른 이미지, Cloud Storage의 disk.raw 파일일 수 있습니다.

  4. 실행 중인 VM에 연결된 디스크에서 이미지를 만드는 경우 인스턴스 계속 실행을 선택하여 VM이 실행되는 동안 이미지를 만들 것임을 확인합니다. 이미지를 만들기 전에 VM을 준비할 수 있습니다.

  5. 소스 디스크 위치 기준(기본값) 드롭다운 목록에서 이미지를 저장할 위치를 지정합니다. 예를 들어 us를 지정하여 us 멀티 리전에 이미지를 저장하거나 us-central1을 지정하여 us-central1 리전에 저장합니다. 선택하지 않으면 Compute Engine은 이미지의 소스 위치와 가장 가까운 멀티 리전에 이미지를 저장합니다.

  6. 선택사항: 이미지 속성을 지정합니다.

    • 계열: 새 이미지가 속할 이미지 계열입니다.
    • 설명: 커스텀 이미지에 대한 설명입니다.
    • 라벨: 리소스를 그룹화하는 라벨입니다.
  7. 암호화 키를 지정합니다. Google 관리 키, Cloud Key Management Service(Cloud KMS) 키 또는 고객 제공 암호화(CSEK) 키 중 한 가지를 선택할 수 있습니다. 암호화 키가 지정되지 않은 경우 이미지는 Google 관리 키를 사용하여 암호화됩니다.

  8. 만들기를 클릭하여 이미지를 만듭니다.

gcloud

Google Cloud CLI에서 gcloud compute images create 명령어를 사용하여 커스텀 이미지를 만듭니다.

소스 디스크에서 이미지 만들기:

--force 플래그는 실행 중인 인스턴스에서 이미지를 만들 수 있는 선택적 플래그입니다. 기본적으로는 실행 중인 인스턴스에서 이미지를 만들 수 없습니다. 인스턴스가 실행되는 동안 이미지를 만들려고 하는 경우에만 이 플래그를 지정하세요.

gcloud compute images create IMAGE_NAME \
    --source-disk=SOURCE_DISK \
    --source-disk-zone=ZONE \
    [--family=IMAGE_FAMILY] \
    [--storage-location=LOCATION] \
    [--force]

다음을 바꿉니다.

  • IMAGE_NAME: 새 이미지의 이름입니다.
  • SOURCE_DISK: 이미지를 만들 소스 디스크입니다.
  • ZONE: 디스크가 있는 영역입니다.
  • IMAGE_FAMILY: (선택 사항) 이 이미지가 속한 이미지 계열을 지정하는 플래그입니다.
  • LOCATION: (선택 사항) 이미지가 저장되는 리전 또는 멀티 리전을 지정할 수 있는 플래그입니다. 예를 들어 us를 지정하여 us 멀티 리전에 이미지를 저장하거나 us-central1을 지정하여 us-central1 리전에 저장합니다. 선택하지 않으면 Compute Engine은 이미지의 소스 위치와 가장 가까운 멀티 리전에 이미지를 저장합니다.

소스 이미지에서 이미지 만들기:

gcloud compute images create IMAGE_NAME \
  --source-image=SOURCE_IMAGE \
  [--source-image-project=IMAGE_PROJECT] \
  [--family=IMAGE_FAMILY] \
  [--storage-location=LOCATION]

다음을 바꿉니다.

  • IMAGE_NAME: 새 이미지의 이름입니다.
  • SOURCE_IMAGE: 새 이미지를 만들 소스 이미지입니다.
  • IMAGE_PROJECT: (선택 사항) 소스 이미지가 있는 프로젝트입니다. 다른 프로젝트에서 이미지를 복사하려는 경우 이 매개변수를 사용합니다.
  • IMAGE_FAMILY: (선택 사항) 새 이미지가 속할 이미지 계열
  • LOCATION: (선택 사항) 이미지가 저장되는 리전 또는 멀티 리전을 지정할 수 있습니다. 예를 들어 us를 지정하여 us 멀티 리전에 이미지를 저장하거나 us-central1을 지정하여 us-central1 리전에 저장합니다. 선택하지 않으면 Compute Engine은 이미지의 소스 위치와 가장 가까운 멀티 리전에 이미지를 저장합니다.

스냅샷에서 이미지 만들기:

gcloud compute images create IMAGE_NAME \
    --source-snapshot=SOURCE_SNAPSHOT \
    [--storage-location=LOCATION]

다음을 바꿉니다.

  • IMAGE_NAME: 새 이미지의 이름입니다.
  • SOURCE_SNAPSHOT: 이미지를 만들 스냅샷입니다.
  • LOCATION: (선택 사항) 이미지가 저장되는 리전 또는 멀티 리전을 지정할 수 있는 플래그입니다. 예를 들어 us를 지정하여 us 멀티 리전에 이미지를 저장하거나 us-central1을 지정하여 us-central1 리전에 저장합니다. 선택하지 않으면 Compute Engine은 이미지의 소스 위치와 가장 가까운 멀티 리전에 이미지를 저장합니다.

이미지 위치 보기:

gcloud compute images describe 명령어를 사용하여 이미지 위치를 봅니다.

gcloud compute images describe IMAGE_NAME

IMAGE_NAME을 검토할 이미지의 이름으로 바꿉니다.

API

images().insert 메서드에 대해 POST 요청을 실행합니다. 이때 요청 본문의 URL은 이미지를 만들 소스 객체를 가리킵니다. 자체 프로젝트 ID와 리소스 이름을 사용하여 리소스에 URL을 지정합니다.

영구 디스크에서 이미지 만들기:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images

{
  "name": "IMAGE_NAME",
  "sourceDisk": "/zones/ZONE/disks/SOURCE_DISK",
  ("storageLocations": "LOCATION",)
  ("forceCreate": "TRUE")
}

다음을 바꿉니다.

  • PROJECT_ID: 이미지가 속한 프로젝트 ID입니다.
  • IMAGE_NAME: 만들려는 새 이미지의 이름입니다.
  • ZONE: 소스 디스크가 있는 영역입니다.
  • SOURCE_DISK: 이미지를 만들 소스 디스크입니다.
  • LOCATION: (선택 사항) 이미지의 스토리지 위치입니다. 예를 들어 us를 지정하여 us 멀티 리전에 이미지를 저장하거나 us-central1을 지정하여 us-central1 리전에 저장합니다. 선택하지 않으면 Compute Engine은 이미지의 소스 위치와 가장 가까운 멀티 리전에 이미지를 저장합니다.

선택사항인 forceCreate 매개변수를 사용하면 실행 중인 VM에서 이미지를 만들 수 있습니다. 실행 중인 VM에서 이미지를 만들려고 하는 경우에만 TRUE로 지정하세요. forceCreate 기본 설정은 FALSE입니다.

다른 이미지에서 이미지 만들기:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images

{
  "name": "IMAGE_NAME",
  "sourceImage": "/global/images/SOURCE_IMAGE",
  ("storageLocations": "LOCATION")
}

다음을 바꿉니다.

  • PROJECT_ID: 이미지가 속한 프로젝트입니다.
  • IMAGE_NAME: 만들려는 새 이미지의 이름입니다.
  • SOURCE_IMAGE: 이미지를 만들려는 소스 이미지입니다.
  • LOCATION: (선택 사항) 이미지의 스토리지 위치입니다. 예를 들어 us를 지정하여 us 멀티 리전에 이미지를 저장하거나 us-central1을 지정하여 us-central1 리전에 저장합니다. 선택하지 않으면 Compute Engine은 이미지의 소스 위치와 가장 가까운 멀티 리전에 이미지를 저장합니다.

스냅샷에서 이미지 만들기:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images
{
  "name": "IMAGE_NAME",
  "sourceSnapshot": "(/SOURCE_PROJECT_ID)/global/snapshots/SOURCE_SNAPSHOT",
  ("storageLocations": "LOCATION")
}

다음을 바꿉니다.

  • PROJECT_ID: 이미지가 속한 프로젝트입니다.
  • IMAGE_NAME: 만들려는 새 이미지의 이름입니다.
  • SOURCE_PROJECT_ID: (선택 사항) 스냅샷이 있는 프로젝트입니다. 해당 프로젝트의 스냅샷 리소스에 액세스할 수 있는 권한이 있어야 합니다.
  • SOURCE_SNAPSHOT: 이미지를 만들 소스 스냅샷입니다.
  • LOCATION: (선택 사항) 이미지의 스토리지 위치입니다. 예를 들어 us를 지정하여 us 멀티 리전에 이미지를 저장하거나 us-central1을 지정하여 us-central1 리전에 저장합니다. 선택하지 않으면 Compute Engine은 이미지의 소스 위치와 가장 가까운 멀티 리전에 이미지를 저장합니다.

이미지 추가에 대한 상세 설명은 이미지 참조를 확인하세요.

이미지 공유

커스텀 이미지를 만든 후에는 프로젝트 간에 공유할 수 있습니다. 다른 프로젝트의 사용자가 커스텀 이미지를 사용하도록 허용하면 해당 사용자는 요청에 이미지 프로젝트를 지정하여 이러한 이미지에 액세스할 수 있습니다.

커스텀 이미지에서 게스트 운영체제 기능 사용 설정

게스트 운영체제(OS) 기능을 사용하여 커스텀 이미지에서 다음 네트워킹, 보안, 스토리지, OS 옵션을 구성합니다. 이렇게 기능이 구성된 커스텀 이미지는 부팅 디스크로 사용됩니다.

gcloud

기존 커스텀 이미지에서 새 커스텀 이미지를 만들려면 --guest-os-features 플래그와 함께 gcloud compute images create 명령어를 사용하세요.

gcloud compute images create IMAGE_NAME \
    --source-image=SOURCE_IMAGE \
    [--source-image-project=IMAGE_PROJECT] \
    --guest-os-features="FEATURES,..." \
    [--storage-location=LOCATION]

다음을 바꿉니다.

  • IMAGE_NAME: 새 이미지의 이름입니다.
  • SOURCE_IMAGE: 새 이미지의 기반이 되는 이미지입니다.
  • IMAGE_PROJECT: (선택사항) 소스 이미지가 포함된 프로젝트입니다.

    다른 프로젝트에서 이미지를 복사하려면 이 매개변수를 사용합니다.

  • FEATURES: 이미지에서 만든 VM에 기능을 사용 설정하는 게스트 OS 태그입니다.

    여러 값을 추가하려면 쉼표를 사용하여 값을 구분하세요. 다음 중 하나 이상의 값으로 설정합니다.

    • VIRTIO_SCSI_MULTIQUEUE. NVMe 대신 로컬 SSD 기기에 사용할 수 있습니다. SCSI를 지원하는 이미지에 대한 상세 설명은 인터페이스 선택을 참조하세요.

      커널 버전이 3.17 이상인 Linux 이미지에서는 로컬 SSD 기기에서 멀티 큐 SCSI를 사용 설정할 수 있습니다. Compute Engine Windows 드라이버 버전이 1.2인 Windows 이미지에서는 로컬 SSD 기기에서 멀티 큐 SCSI를 사용 설정할 수 있습니다.

    • WINDOWS. Windows Server 커스텀 부팅 이미지를 Windows 이미지로 태그 지정합니다.
    • MULTI_IP_SUBNET. /32 이외의 넷마스크를 사용하여 인터페이스를 구성합니다. 다중 네트워크 인터페이스와 그 작동 방식에 대한 상세 설명은 다중 네트워크 인터페이스 개요 및 예시를 참조하세요.
    • UEFI_COMPATIBLE. UEFI 펌웨어 및 다음 보안 VM 기능으로 부팅합니다.
    • GVNIC. 최대 50Gbps~100Gbps 속도의 더 높은 네트워크 대역폭을 지원합니다. 자세한 내용은 Google Virtual NIC 사용을 참조하세요.
    • SEV_CAPABLE. AMD SEV(Secure Encrypted Virtualization) CPU 플랫폼에서 컨피덴셜 VM을 만드는 경우에 사용합니다. 자세한 내용은 새 컨피덴셜 VM 인스턴스 만들기를 참조하세요.
    • SUSPEND_RESUME_COMPATIBLE. VM에서 일시중지 및 재개를 지원합니다. 자세한 내용은 OS 호환성을 참조하세요.
  • LOCATION: (선택 사항) 이미지를 저장할 리전 또는 멀티 리전입니다.

    예를 들어 us를 지정하여 us 멀티 리전에 이미지를 저장하거나 us-central1을 지정하여 us-central1 리전에 저장합니다. 선택하지 않으면 Compute Engine은 이미지의 소스 위치와 가장 가까운 멀티 리전에 이미지를 저장합니다.

API

기존 커스텀 이미지에서 새 커스텀 이미지를 만들려면 guestOsFeatures 플래그와 함께 images().insert 메서드를 사용하세요.


POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images

{
 "name": "IMAGE_NAME",
 "sourceImage": "(projects/IMAGE_PROJECT)/global/images/SOURCE_IMAGE",
 ("storageLocations": "LOCATION",)
 "guestOsFeatures": [
  {
   "type": "FEATURES"
  }
 ]
}

다음을 바꿉니다.

  • PROJECT_ID: 새 이미지를 만들 프로젝트의 ID입니다.
  • IMAGE_NAME: 새 이미지의 이름입니다.
  • IMAGE_PROJECT: (선택사항) 소스 이미지가 포함된 프로젝트입니다.

    다른 프로젝트에서 이미지를 복사하려면 이 매개변수를 사용합니다.

  • SOURCE_IMAGE: 새 이미지의 기반이 되는 이미지입니다.

  • LOCATION: (선택 사항) 이미지를 저장할 리전 또는 멀티 리전입니다.

    예를 들어 us를 지정하여 us 멀티 리전에 이미지를 저장하거나 us-central1을 지정하여 us-central1 리전에 저장합니다. 선택하지 않으면 Compute Engine은 이미지의 소스 위치와 가장 가까운 멀티 리전에 이미지를 저장합니다.

  • FEATURES: 이미지에서 만든 VM에 기능을 사용 설정하는 게스트 OS 태그입니다.

    여러 값을 추가하려면 쉼표를 사용하여 값을 구분하세요. 다음 중 하나 이상의 값으로 설정합니다.

    • VIRTIO_SCSI_MULTIQUEUE. NVMe 대신 로컬 SSD 기기에 사용할 수 있습니다. SCSI를 지원하는 이미지에 대한 상세 설명은 인터페이스 선택을 참조하세요.

      커널 버전이 3.17 이상인 Linux 이미지에서는 로컬 SSD 기기에서 멀티 큐 SCSI를 사용 설정할 수 있습니다. Compute Engine Windows 드라이버 버전이 1.2인 Windows 이미지에서는 로컬 SSD 기기에서 멀티 큐 SCSI를 사용 설정할 수 있습니다.

    • WINDOWS. Windows Server 커스텀 부팅 이미지를 Windows 이미지로 태그 지정합니다.
    • MULTI_IP_SUBNET. /32 이외의 넷마스크를 사용하여 인터페이스를 구성합니다. 다중 네트워크 인터페이스와 그 작동 방식에 대한 상세 설명은 다중 네트워크 인터페이스 개요 및 예시를 참조하세요.
    • UEFI_COMPATIBLE. UEFI 펌웨어 및 다음 보안 VM 기능으로 부팅합니다.
    • GVNIC. 최대 50Gbps~100Gbps 속도의 더 높은 네트워크 대역폭을 지원합니다. 자세한 내용은 Google Virtual NIC 사용을 참조하세요.
    • SEV_CAPABLE. AMD SEV(Secure Encrypted Virtualization) CPU 플랫폼에서 컨피덴셜 VM을 만드는 경우에 사용합니다. 자세한 내용은 새 컨피덴셜 VM 인스턴스 만들기를 참조하세요.
    • SUSPEND_RESUME_COMPATIBLE. VM에서 일시중지 및 재개를 지원합니다. 자세한 내용은 OS 호환성을 참조하세요.

Arm 이미지 고려 사항

Google은 Ampere Altra CPU 플랫폼에서 실행되는 Tau T2A 머신 시리즈를 제공합니다. T2A 머신 시리즈로 VM을 시작한 다음 해당 소스 VM을 사용하여 Arm 이미지를 만들 수 있습니다. 커스텀 Arm 이미지를 만드는 프로세스는 x86 이미지를 만드는 프로세스와 동일합니다.

사용자가 Arm 이미지와 x86 이미지를 구별할 수 있도록 Arm 이미지에는 ARM64로 설정된 architecture 필드가 있습니다. 이 필드에 가능한 값은 다음과 같습니다.

  • ARCHITECTURE_UNSPECIFIED
  • X86_64
  • ARM64

이미지 사용자는 이 필드를 필터링하여 x86 또는 Arm 기반 이미지를 찾을 수 있습니다.

다음 단계