diff --git a/client/driver/qemu_test.go b/client/driver/qemu_test.go index 23a5cf206..0acde6a39 100644 --- a/client/driver/qemu_test.go +++ b/client/driver/qemu_test.go @@ -53,11 +53,10 @@ func TestQemuDriver_Start(t *testing.T) { task := &structs.Task{ Config: map[string]string{ "image_source": "https://dl.dropboxusercontent.com/u/47675/jar_thing/linux-0.2.img", + "checksum": "a5e836985934c3392cbbd9b26db55a7d35a8d7ae1deb7ca559dd9c0159572544", "accelerator": "tcg", "host_port": "8080", "guest_port": "8081", - "checksum": "a5e836985934c3392cbbd9b26db55a7d35a8d7ae1deb7ca559dd9c0159572544", - // ssh u/p would be here }, } diff --git a/website/source/docs/drivers/qemu.html.md b/website/source/docs/drivers/qemu.html.md index f617179f5..4fbb1eb97 100644 --- a/website/source/docs/drivers/qemu.html.md +++ b/website/source/docs/drivers/qemu.html.md @@ -10,5 +10,54 @@ description: |- Name: `qemu` -TODO +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 +resource allocation. + +The `Qemu` driver can execute any regular `qemu` image (e.g. `qcow`, `img`, +`iso`), and is currently invoked with `qemu-system-x86_64`. + +## Task Configuration + +The `Qemu` driver supports the following configuration in the job spec: + +* `image_source` - **(Required)** The hosted location of the source Qemu image. Must be accessible +from the Nomad client, via HTTP. +* `checksum` - **(Required)** The MD5 checksum of the `qemu` image. If the +checksums do not match, the `Qemu` diver will fail to start the image +* `accelerator` - (Optional) The type of accelerator to use in the invocation. + If the host machine has `Qemu` installed with KVM support, users can specify `kvm` for the `accelerator`. Default is `tcg` +* `host_port` - **(Required)** Port on the host machine to forward to the guest +VM +* `guest_port` - **(Required)** Port on the guest machine that is listening for +traffic from the host + +## Client Requirements + +The `Qemu` driver requires Qemu to be installed and in your systems `$PATH`. +The `image_source` must be accessible by the node running Nomad. This can be an +internal source, private to your cluster, but it must be reachable by the client +over HTTP. + +## Client Attributes + +The `Qemu` driver will set the following client attributes: + +* `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 +* `driver.qemu.version` - Version of `qemu-system-x86_64, ex: `2.4.0` + +## Resource Isolation + +The resource isolation provided varies by the operating system of +the client and the configuration. + +On Linux, Nomad will attempt to use cgroups, namespaces, and chroot +to isolate the resources of a process. If the Nomad agent is not +running as root many of these mechanisms cannot be used. + +As a baseline, the Qemu images will be ran inside a virtual machine operated by +Qemu, providing a minimum amount of isolation.