QEMU 작업 드라이버 구성하기

QEMU 작업 드라이버 구성하기

이름: qemu

qemu 드라이버는 일반적인 가상 머신 실행기(runner)를 제공해요. QEMU는 KVM 커널 모듈을 활용해 하드웨어 가상화 기능을 이용하고 뛰어난 성능을 제공할 수 있어요. 현재 qemu 드라이버는 호스트 머신의 포트 집합을 게스트 가상 머신에 매핑할 수 있고, 리소스 할당에 대한 구성도 제공해요.

qemu 드라이버는 일반적인 qemu 이미지(예: qcow, img, iso)를 실행할 수 있으며, 현재 qemu-system-x86_64로 호출돼요.

드라이버는 이미지가 아티팩트 다운로더를 통해 노마드 클라이언트에서 접근 가능해야 해요.

출처: 문서

본문

기능

qemu 드라이버는 다음 기능을 구현해요.

Feature Implementation
nomad alloc signal false
nomad alloc exec false
filesystem isolation image
network isolation none
volume mounting none

클라이언트 요구사항

qemu 드라이버는 QEMU가 설치되어 있고 시스템의 $PATH에 있어야 해요. 또한 실행 중인 이미지를 가져올 수 있는 유일한 방법이므로 작업은 적어도 하나의 아티팩트 다운로드를 지정해야 해요.

클라이언트 속성

qemu 드라이버는 다음 클라이언트 속성을 설정해요:

  • driver.qemu — 호스트 노드에서 QEMU가 발견되면 1로 설정돼요. 노마드는 호스트에서 qemu-system-x86_64 -version을 실행하고 출력을 파싱해 이를 판단해요.
  • driver.qemu.version — qemu.config.fingerprint_emulator의 버전. 예: 2.4.0
  • driver.qemu.emulators — 노드에서 노마드가 fingerprint한 사용 가능한 에뮬레이터 아키텍처 목록이에요.

이 예시는 작업 파일에서 이 속성들을 사용해요.

job "docs" {
  # Only run this job where the qemu version is higher than 1.2.3.
  constraint {
    attribute = "${attr.driver.qemu.version}"
    operator  = ">"
    value     = "1.2.3"
  }
}
job "docs" {
  # Only run this job on a node with the aarch64 emulator
  constraint {
    attribute = "${attr.driver.qemu.emulators}"
    operator  = "set_contains"
    value     = "aarch64"
  }
}

플러그인 옵션

plugin "qemu" {
  config {
    image_paths    = ["/mnt/image/paths"]
    args_allowlist = ["-drive", "-usbdevice"]
  }
}
  • image_paths ([]string: []) — QEMU 드라이버가 이미지를 로드하도록 허용된 호스트 경로를 지정해요.
  • args_allowlist ([]string: []) — args 옵션이 QEMU에 전달하는 것이 허용된 명령줄 플래그를 지정해요. 설정하지 않으면 작업 제출자가 USB 드라이브 같은 호스트 장치에 대한 VM 접근을 제공하는 플래그를 포함해 어떤 명령줄 플래그든 QEMU에 전달할 수 있어요. 사용 가능한 플래그는 QEMU 문서를 참고해 주세요.
  • emulators_allowlist ([]string: []) — 이 클라이언트에서 허용된 에뮬레이터 아키텍처 목록이에요. 예: ["x86_64", "aarch64"]. 설정하지 않으면 모든 에뮬레이터가 허용돼요.

리소스 격리

노마드는 가상 머신 워크로드에 완전한 소프트웨어 가상화를 제공하기 위해 QEMU를 사용해요. 노마드는 QEMU KVM의 하드웨어 지원 가상화를 사용해 더 나은 성능을 제공할 수 있어요.

가상화는 추가 보안이 필요한 워크로드에 가장 높은 수준의 격리를 제공하며, 리소스 사용은 호스트 커널이 아니라 QEMU 하이퍼바이저에 의해 제한돼요. VM 네트워크 트래픽은 여전히 호스트의 인터페이스를 통해 흐릅니다.

가상화가 제공하는 강력한 격리는 VM이 시작된 후부터 워크로드에만 적용된다는 점을 유의하세요. 운영자는 args_allowlist 옵션을 사용해 작업 제출자가 접근이 허용되지 않는 장치와 리소스에 접근하지 못하도록 해야 해요.

다음 단계

작업에서 QEMU 작업 드라이버를 사용해요.

더 알아보기 (Learn more)