커스텀 이미지 만들기

기존 소스 디스크에서 커스텀 이미지를 만들고 이를 사용하여 가상 머신 (VM)을 만들고 시작할 수 있습니다. 커스텀 이미지는 영구 부팅 디스크를 만들어 특정 상태로 수정하고 VM을 만들기 위해 이 상태를 저장해야 하는 상황에 적합합니다. 나중에 VM을 만들 때 새 VM 이미지로 사용할 커스텀 이미지를 만들고 저장하면 나중에 설정 단계를 중복하지 않아도 됩니다.

시작하기 전에

gdcloud 명령줄 인터페이스 (CLI) 명령어를 사용하려면 gdcloud CLI를 다운로드, 설치, 구성해야 합니다. GDC 오프라인 어플라이언스의 모든 명령어는 gdcloud 또는 kubectl CLI를 사용하며 Linux 환경이 필요합니다.

kubeconfig 파일 경로 가져오기

관리 API 서버에 대해 명령어를 실행하려면 다음 리소스가 있어야 합니다.

  1. 관리 API 서버 이름을 찾거나 플랫폼 관리자 (PA)에게 서버 이름을 문의합니다.

  2. 관리 API 서버의 kubeconfig 파일이 없는 경우 로그인 및 생성합니다.

  3. 이 안내에서 경로를 사용하여 MANAGEMENT_API_SERVER{"</var>"}}을 바꿉니다.

권한 및 액세스 요청

커스텀 이미지를 만들려면 프로젝트 수준 VM 이미지 액세스 권한이 있어야 합니다. 프로젝트 IAM 관리자에게 제공된 단계에 따라 VM이 있는 프로젝트의 네임스페이스에서 프로젝트 VirtualMachine 이미지 관리자 (project-vm-image-admin) 역할을 할당해 달라고 요청하세요. GDC 콘솔 또는 gdcloud CLI를 사용하여 이미지를 만드는 경우 프로젝트 VirtualMachine 관리자 (project-vm-admin) 역할과 프로젝트 뷰어 (project-viewer) 역할도 필요합니다.

커스텀 이미지 만들기

이 섹션에서는 Linux VM에서 커스텀 이미지를 만드는 방법을 설명합니다.

이미지를 위한 VM 준비

실행 중인 VM에 연결되어 있는 동안 디스크에서 이미지를 만들 수 있습니다. 그러나 이미지를 캡처할 수 있는 상태로 VM을 전환하면 이미지의 안정성이 향상됩니다.

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

디스크 쓰기를 줄이려면 다음 프로세스 중 하나를 사용합니다. VM을 중지하거나 디스크에 쓰는 작업을 최소화합니다.

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

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

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

이미지 만들기

디스크가 VM에 연결된 경우에도 영구 디스크에서 디스크 이미지를 만들려면 다음 단계를 따르세요.

콘솔

  1. 프로젝트를 선택합니다.

  2. 탐색 메뉴에서 가상 머신 > 이미지를 클릭합니다.

  3. 이미지 만들기를 클릭합니다.

  4. 이미지의 고유한 이름을 입력합니다. 이름은 35자(영문 기준) 이하여야 합니다.

  5. 이미지 이름에 추가할 버전을 입력합니다.

  6. 소스 디스크 필드에서 디스크를 선택합니다.

  7. 최소 디스크 크기 필드에 디스크 크기를 입력합니다.

  8. 이미지에 대한 설명을 입력합니다.

  9. 만들기를 클릭합니다.

이미지가 이미지 목록에 표시됩니다.

API

  1. 모든 VirtualMachineDisk 객체를 나열합니다.

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
       get virtualmachinedisks.virtualmachine.gdc.goog --namespace PROJECT
    
  2. 새 이미지의 소스 디스크로 사용할 VirtualMachineDisk 객체를 선택합니다.

  3. VM 디스크가 VM에 연결되어 있는지 확인합니다.

      kubectl --kubeconfig MANAGEMENT_API_SERVER \
          get virtualmachinedisks.virtualmachine.gdc.goog --namespace PROJECT \
          DISK_NAME -o jsonpath='{.status.virtualMachineAttachments}'
    

    VM에 디스크가 연결되어 있음을 보여주는 출력 예시:

      [{"autoDelete":true,"nameRef":{"name":"vm1"},"uid":"...."}]
    
    1. VM의 실행 상태확인합니다. 상태가 Stopped이 아니면 VM을 중지하고 VirtualMachineImage 만들기를 진행합니다.
  4. VirtualMachineDisksize 가져오기를 사용하여 이미지를 만듭니다.

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
        get virtualmachinedisks.virtualmachine.gdc.goog --namespace PROJECT \
        DISK_NAME -o jsonpath='{.spec.size}'
    
  5. 관리 API 서버에서 VirtualMachineImageImport 객체를 만듭니다.

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
        apply -n PROJECT -f - <<EOF
    apiVersion: virtualmachine.gdc.goog/v1
    kind: VirtualMachineImageImport
    metadata:
      name: VM_IMAGE_IMPORT_NAME
    spec:
      source:
        diskRef:
          name: DISK_NAME
      imageMetadata:
        name: IMAGE_NAME
        operatingSystem: OS_NAME
        minimumDiskSize: MINIMUM_DISK_SIZE
    EOF
    
  6. 이미지 가져오기가 완료되었고 상태가 Ready인지 확인합니다.

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
        get virtualmachineimageimports.virtualmachine.gdc.goog --namespace PROJECT \
        VM_IMAGE_IMPORT_NAME -o jsonpath='{.status}'
    

    가져오기가 완료되면 상태가 다음과 같이 표시됩니다.

    {
      "conditions": [
        {
          "lastTransitionTime": "",
          "message": "",
          "observedGeneration": 1,
          "reason": "ImportJobComplete",
          "status": "True",
          "type": "Ready"
        }
      ],
      "imageName": IMAGE_NAME
    }
    
  7. 이미지가 생성되었는지 확인합니다.

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
        get virtualmachineimages.virtualmachine.gdc.goog --namespace PROJECT \
        CREATED_IMAGE_NAME
    

    다음 정의를 사용하여 변수를 바꿉니다.

    변수정의
    MANAGEMENT_API_SERVER 관리 API 서버 kubeconfig 파일입니다.
    PROJECT 이미지를 만들 GDC 프로젝트입니다.
    DISK_NAME 소스 디스크의 이름입니다(예: vm1-boot-disk).
    VM_IMAGE_IMPORT_NAME VM 이미지 가져오기의 이름입니다. 이름은 35자(영문 기준) 이하여야 합니다.
    IMAGE_NAME 생성된 이미지의 이름입니다(예: custom-image).
    OS_NAME 이미지 OS의 이름으로,
    ubuntu-2004, windows-2019, rhel-8 중 하나여야 합니다.
    MINIMUM_DISK_SIZE VM 이미지 가져오기의 최소 디스크 크기(예: 20G:
    minimumDiskSize)는 항상 소스 부팅 디스크 크기보다 크거나 같아야 합니다.
    CREATED_IMAGE_NAME 생성된 이미지의 이름입니다. 생성된 이미지 이름은 고유해야 합니다. 프로젝트에 이미 있는 이미지 이름일 수 없습니다.