작업에서 QEMU 태스크 드라이버 사용하기

작업에서 QEMU 태스크 드라이버 사용하기 (Use the QEMU task driver in a job)

이름: qemu

qemu 드라이버는 일반적인 가상 머신 러너를 제공해요. QEMU는 KVM 커널 모듈을 활용해 하드웨어 가상화 기능을 이용하고 우수한 성능을 제공할 수 있어요. 현재 qemu 드라이버는 호스트 머신에서 게스트 가상 머신으로 포트 집합을 매핑할 수 있고, 리소스 할당 구성을 제공해요.

qemu 드라이버는 일반적인 qemu 이미지(예: qcow, img, iso)를 실행할 수 있으며, emulator 매개변수로 지정된 QEMU 바이너리로 호출돼요.

드라이버는 이미지가 artifact 다운로더를 통해 Nomad 클라이언트에서 접근 가능해야 해요.

기능, 클라이언트 요구 사항, 플러그인 구성은 QEMU 태스크 드라이버 구성을 참조하세요.

출처: 문서

본문

작업 구성 (Task Configuration)

task "webservice" {
  driver = "qemu"

  config {
    image_path        = "/path/to/my/linux.img"
    machine_type      = "q35"
    accelerator       = "kvm"
    graceful_shutdown = true
    args              = ["-nodefaults", "-nodefconfig"]
  }
}

qemu 드라이버는 작업 명세에서 다음 구성을 지원해요:

  • image_path — 다운로드된 이미지의 경로. 대부분의 경우 이는 그냥 이미지의 이름이에요. 하지만 제공된 아티팩트가 이미지를 하위 폴더에 포함하는 아카이브라면 경로는 상대 경로(subdir/from_archive/my.img)여야 해요. 이 이미지에는 "image0"이라는 ID가 부여돼요.

  • emulator (string: "x86_64") — 가상 머신을 실행하는 데 사용되는 QEMU 에뮬레이터 아키텍처. 전체 에뮬레이터 바이너리 이름도 지원해요. 예를 들어 qemu-system-x86_64처럼요.

  • machine_type (string: "pc") — 이름으로 에뮬레이션할 머신을 선택하는 데 사용돼요.

  • drive_interface — (선택) 이 옵션은 드라이브가 연결되는 인터페이스 유형을 정의해요. 사용 가능한 유형은 ide, scsi, sd, mtd, floppy, pflash, virtio, none이에요. 기본값은 ide예요.

  • accelerator — (선택) 호출에서 사용할 가속기 유형. 호스트 머신에 KVM 지원으로 qemu가 설치되어 있다면 accelerator에 kvm을 지정할 수 있어요. 기본값은 tcg예요.

  • graceful_shutdown (bool: false) — qemu 모니터를 사용해 가상 머신을 그냥 종료하는 대신 ACPI 종료 신호를 보내요. 이는 물리적 전원 버튼 누름을 에뮬레이션하며 인스턴스에 깨끗하게 종료할 기회를 줘요. kill_timeout 후에도 VM이 여전히 실행 중이면 강제로 종료돼요. 이 기능은 태스크 디렉토리 안에 배치되는 Unix 소켓을 사용하며 운영체제가 이러한 경로의 길이에 제한을 둘 수 있어요. 이 기능은 현재 Windows에서 지원되지 않아요.

  • guest_agent (bool: false) — 이 가상 머신에 대해 QEMU Guest Agent 지원을 활성화해요. 필요한 가상 하드웨어를 추가하고 에이전트와 상호작용하기 위해 태스크 작업 디렉토리에 qa.sock 파일을 만들어요. QEMU Guest Agent는 게스트 VM에서 실행 중이어야 해요. 이 기능은 현재 Windows에서 지원되지 않아요.

  • port_map — (선택) 포트 라벨의 키-값 맵.

config {
  # Forward the host port with the label "db" to the guest VM's port 6539.
  port_map {
    db = 6539
  }
}
  • args — (선택) QEMU에 명령줄 옵션으로 전달되는 문자열 목록.

예제 (Examples)

qemu 이미지를 실행하는 간단한 config 블록:

task "virtual" {
  driver = "qemu"
  
  config {
    image_path  = "local/linux.img"
    accelerator = "kvm"
    args        = ["-nodefaults", "-nodefconfig"]
  }
  
  # Specifying an artifact is required with the "qemu"
  # driver. This is the # mechanism to ship the image to be run.
  artifact {
    source = "https://internal.file.server/linux.img"
  
    options {
      checksum = "md5:123445555555555"
    }
  }
}

더 알아보기 (Learn more)