open-nomad/website/source/docs/drivers/qemu.html.md

142 lines
4.5 KiB
Markdown
Raw Normal View History

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`
The `qemu` driver provides a generic virtual machine runner. Qemu can utilize
2015-09-23 18:58:42 +00:00
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
2015-09-23 18:58:42 +00:00
host machine to the guest virtual machine, and provides configuration for
resource allocation.
2015-09-23 18:58:42 +00:00
The `qemu` driver can execute any regular `qemu` image (e.g. `qcow`, `img`,
`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
[`artifact` downloader](/docs/job-specification/artifact.html).
2016-03-16 16:56:04 +00:00
2015-09-23 18:58:42 +00:00
## Task Configuration
```hcl
task "webservice" {
driver = "qemu"
config {
image_path = "/path/to/my/linux.img"
accelerator = "kvm"
graceful_shutdown = true
args = ["-nodefaults", "-nodefconfig"]
}
}
```
The `qemu` driver supports the following configuration in the job spec:
2015-09-23 18:58:42 +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
2016-03-16 16:56:04 +00:00
contains the image in a subfolder, the path will need to be the relative path
(`subdir/from_archive/my.img`).
2015-09-23 18:58:42 +00:00
* `accelerator` - (Optional) The type of accelerator to use in the invocation.
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`.
2017-10-31 03:19:25 +00:00
* `graceful_shutdown` `(bool: false)` - Using the [qemu
monitor](https://en.wikibooks.org/wiki/QEMU/Monitor), send an ACPI shutdown
signal to virtual machines rather than simply terminating them. This emulates
a physical power button press, and gives instances a chance to shut down
cleanly. If the VM is still running after ``kill_timeout``, it will be
forcefully terminated. (Note that
[prior to qemu 2.10.1](https://github.com/qemu/qemu/commit/ad9579aaa16d5b385922d49edac2c96c79bcfb6),
the monitor socket path is limited to 108 characters. Graceful shutdown will
be disabled if qemu is < 2.10.1 and the generated monitor path exceeds this
length. You may encounter this issue if you set long
[data_dir](https://www.nomadproject.io/docs/agent/configuration/index.html#data_dir)
or
[alloc_dir](https://www.nomadproject.io/docs/agent/configuration/client.html#alloc_dir)
2017-11-03 23:43:16 +00:00
paths.) This feature is currently not supported on Windows.
* `port_map` - (Optional) A key-value map of port labels.
```hcl
config {
# Forward the host port with the label "db" to the guest VM's port 6539.
port_map {
db = 6539
}
}
```
2015-09-23 18:58:42 +00:00
* `args` - (Optional) A list of strings that is passed to qemu as command line
options.
2016-03-16 16:56:04 +00:00
## Examples
A simple config block to run a `qemu` image:
2016-03-16 16:56:04 +00:00
```
task "virtual" {
driver = "qemu"
config {
image_path = "local/linux.img"
2016-03-16 16:56:04 +00:00
accelerator = "kvm"
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://internal.file.server/linux.img"
2016-03-16 16:56:04 +00:00
options {
checksum = "md5:123445555555555"
}
}
```
2015-09-23 18:58:42 +00:00
## Client Requirements
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
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
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
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
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
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).