2015-09-20 22:31:33 +00:00
|
|
|
---
|
|
|
|
layout: "docs"
|
|
|
|
page_title: "Drivers: Qemu"
|
|
|
|
sidebar_current: "docs-drivers-qemu"
|
|
|
|
description: |-
|
|
|
|
The Qemu task driver is used to run virtual machines using Qemu/KVM.
|
|
|
|
---
|
|
|
|
|
|
|
|
# Qemu Driver
|
|
|
|
|
|
|
|
Name: `qemu`
|
|
|
|
|
2015-09-23 18:58:42 +00:00
|
|
|
The `Qemu` driver provides a generic virtual machine runner. Qemu can utilize
|
|
|
|
the KVM kernel module to utilize hardware virtualization features and provide
|
|
|
|
great performance. Currently the `Qemu` driver can map a set of ports from the
|
|
|
|
host machine to the guest virtual machine, and provides configuration for
|
2015-09-25 02:33:06 +00:00
|
|
|
resource allocation.
|
2015-09-23 18:58:42 +00:00
|
|
|
|
|
|
|
The `Qemu` driver can execute any regular `qemu` image (e.g. `qcow`, `img`,
|
2015-09-25 02:33:06 +00:00
|
|
|
`iso`), and is currently invoked with `qemu-system-x86_64`.
|
2015-09-23 18:58:42 +00:00
|
|
|
|
2016-03-16 16:56:04 +00:00
|
|
|
The driver requires the image to be accessible from the Nomad client via the
|
2016-10-03 21:00:32 +00:00
|
|
|
[`artifact` downloader](/docs/jobspec/index.html#artifact_doc).
|
2016-03-16 16:56:04 +00:00
|
|
|
|
2015-09-23 18:58:42 +00:00
|
|
|
## Task Configuration
|
|
|
|
|
|
|
|
The `Qemu` driver supports the following configuration in the job spec:
|
|
|
|
|
2016-03-16 16:56:04 +00:00
|
|
|
* `image_path` - The path to the downloaded image. In most cases this will just be
|
|
|
|
the name of the image. However, if the supplied artifact is an archive that
|
|
|
|
contains the image in a subfolder, the path will need to be the relative path
|
|
|
|
(`subdir/from_archive/my.img`).
|
2015-11-18 23:16:42 +00:00
|
|
|
|
2015-09-23 18:58:42 +00:00
|
|
|
* `accelerator` - (Optional) The type of accelerator to use in the invocation.
|
2015-11-18 05:19:45 +00:00
|
|
|
If the host machine has `Qemu` installed with KVM support, users can specify
|
2016-08-27 12:56:39 +00:00
|
|
|
`kvm` for the `accelerator`. Default is `tcg`.
|
2015-11-18 23:16:42 +00:00
|
|
|
|
|
|
|
* `port_map` - (Optional) A `map[string]int` that maps port labels to ports
|
2016-07-18 14:24:30 +00:00
|
|
|
on the guest. This forwards the host port to the guest VM. For example,
|
2015-11-18 05:19:45 +00:00
|
|
|
`port_map { db = 6539 }` would forward the host port with label `db` to the
|
2016-07-18 14:24:30 +00:00
|
|
|
guest VM's port 6539.
|
2015-09-23 18:58:42 +00:00
|
|
|
|
2016-08-16 03:36:13 +00:00
|
|
|
* `args` - (Optional) A `[]string` that is passed to qemu as command line options.
|
2016-08-27 13:04:01 +00:00
|
|
|
For example, `args = [ "-nodefconfig", "-nodefaults" ]`.
|
2016-08-16 03:36:13 +00:00
|
|
|
|
2016-03-16 16:56:04 +00:00
|
|
|
## Examples
|
|
|
|
|
|
|
|
A simple config block to run a `Qemu` image:
|
|
|
|
|
|
|
|
```
|
|
|
|
task "virtual" {
|
|
|
|
driver = "qemu"
|
|
|
|
|
|
|
|
config {
|
2016-04-14 20:04:04 +00:00
|
|
|
image_path = "local/linux.img"
|
2016-03-16 16:56:04 +00:00
|
|
|
accelerator = "kvm"
|
2016-08-16 03:36:13 +00:00
|
|
|
args = [ "-nodefaults", "-nodefconfig" ]
|
2016-03-16 16:56:04 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
# Specifying an artifact is required with the "qemu"
|
|
|
|
# driver. This is the # mechanism to ship the image to be run.
|
|
|
|
artifact {
|
|
|
|
source = "https://dl.dropboxusercontent.com/u/1234/linux.img"
|
|
|
|
|
|
|
|
options {
|
|
|
|
checksum = "md5:123445555555555"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
2015-09-23 18:58:42 +00:00
|
|
|
## Client Requirements
|
|
|
|
|
2015-10-25 17:10:37 +00:00
|
|
|
The `Qemu` driver requires Qemu to be installed and in your system's `$PATH`.
|
2016-08-27 12:56:39 +00:00
|
|
|
The task must also specify at least one artifact to download, as this is the only
|
2016-03-16 16:56:04 +00:00
|
|
|
way to retrieve the image being run.
|
2015-09-23 18:58:42 +00:00
|
|
|
|
|
|
|
## Client Attributes
|
|
|
|
|
2015-09-23 19:44:49 +00:00
|
|
|
The `Qemu` driver will set the following client attributes:
|
2015-09-23 18:58:42 +00:00
|
|
|
|
2015-09-23 19:44:49 +00:00
|
|
|
* `driver.qemu` - Set to `1` if Qemu is found on the host node. Nomad determines
|
|
|
|
this by executing `qemu-system-x86_64 -version` on the host and parsing the output
|
2015-10-11 19:55:23 +00:00
|
|
|
* `driver.qemu.version` - Version of `qemu-system-x86_64`, ex: `2.4.0`
|
2015-09-23 18:58:42 +00:00
|
|
|
|
2016-10-03 21:00:32 +00:00
|
|
|
Here is an example of using these properties in a job file:
|
|
|
|
|
|
|
|
```hcl
|
|
|
|
job "docs" {
|
|
|
|
# Only run this job where the qemu version is higher than 1.2.3.
|
|
|
|
constraint {
|
|
|
|
attribute = "${driver.qemu.version}"
|
|
|
|
operator = ">"
|
|
|
|
value = "1.2.3"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
2015-09-23 18:58:42 +00:00
|
|
|
## Resource Isolation
|
|
|
|
|
2015-09-25 02:33:06 +00:00
|
|
|
Nomad uses Qemu to provide full software virtualization for virtual machine
|
|
|
|
workloads. Nomad can use Qemu KVM's hardware-assisted virtualization to deliver
|
|
|
|
better performance.
|
2015-09-20 22:31:33 +00:00
|
|
|
|
2015-09-25 02:33:06 +00:00
|
|
|
Virtualization provides the highest level of isolation for workloads that
|
2015-10-25 17:15:14 +00:00
|
|
|
require additional security, and resource use is constrained by the Qemu
|
2015-09-25 02:33:06 +00:00
|
|
|
hypervisor rather than the host kernel. VM network traffic still flows through
|
2015-10-11 19:55:23 +00:00
|
|
|
the host's interface(s).
|