작업에서 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"
}
}
}