KVM Virtual Machine XML Configuration Example: Difference between revisions

From NovaOrdis Knowledge Base
Jump to navigation Jump to search
 
(28 intermediate revisions by the same user not shown)
Line 10: Line 10:


  <domain type='kvm'>
  <domain type='kvm'>
   <span id='xml_name'></span><[[#name|name]]>template[[#name|</name>]]
   <span id='xml_name'></span><[[#name|name]]>blue[[#name|</name>]]
   <span id='xml_uuid'></span>[[#uuid|<uuid>]]2a0523ba-9c44-47bd-8956-fc2b93ac1863[[#uuid|</uuid>]]
   <span id='xml_uuid'></span>[[#uuid|<uuid>]]2a0523ba-9c44-47bd-8956-fc2b93ac1863[[#uuid|</uuid>]]
   <span id='xml_memory'></span><[[#memory|memory]] unit='KiB'>1048576[[#memory|</memory>]]
   <span id='xml_memory'></span><[[#memory|memory]] unit='KiB'>1048576[[#memory|</memory>]]
Line 31: Line 31:
       <timer name='hpet' present='no'/>
       <timer name='hpet' present='no'/>
   </clock>
   </clock>
   <on_poweroff>destroy</on_poweroff>
   <[[#on_poweroff|on_poweroff]]>destroy</[[#on_poweroff|on_poweroff]]>
   <on_reboot>restart</on_reboot>
   <on_reboot>restart</on_reboot>
   <on_crash>restart</on_crash>
   <on_crash>restart</on_crash>
Line 49: Line 49:
       <span id='xml_disk_image'></span><[[#disk|disk]] type='file' device='disk'>
       <span id='xml_disk_image'></span><[[#disk|disk]] type='file' device='disk'>
           <driver name='qemu' type='qcow2'/>
           <driver name='qemu' type='qcow2'/>
           &lt;source file='/main-storage-pool/template.img'/>
           &lt;source file='/main-storage-pool/blue.qcow2'/>
           <target dev='vda' bus='virtio'/>
           <target dev='vda' bus='virtio'/>
           <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
           <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
Line 55: Line 55:
       <disk type='file' device='disk'>
       <disk type='file' device='disk'>
           <driver name='qemu' type='raw'/>
           <driver name='qemu' type='raw'/>
           &lt;source file='/main-storage-pool/template-docker.storage'/>
           &lt;source file='/main-storage-pool/blue-docker.raw'/>
           <target dev='vdb' bus='virtio'/>
           <target dev='vdb' bus='virtio'/>
           <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
           <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
       </disk>
       </disk>
    <controller type='usb' index='0' model='ich9-ehci1'>
      <controller type='usb' index='0' model='ich9-ehci1'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x7'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x7'/>
    </controller>
      </controller>
    <controller type='usb' index='0' model='ich9-uhci1'>
      <controller type='usb' index='0' model='ich9-uhci1'>
      <master startport='0'/>
          <master startport='0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0' multifunction='on'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0' multifunction='on'/>
    </controller>
      </controller>
    <controller type='usb' index='0' model='ich9-uhci2'>
      <controller type='usb' index='0' model='ich9-uhci2'>
      <master startport='2'/>
          <master startport='2'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x1'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x1'/>
    </controller>
      </controller>
    <controller type='usb' index='0' model='ich9-uhci3'>
      <controller type='usb' index='0' model='ich9-uhci3'>
      <master startport='4'/>
          <master startport='4'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x2'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x2'/>
    </controller>
      </controller>
    <controller type='pci' index='0' model='pci-root'/>
      <controller type='pci' index='0' model='pci-root'/>
    <controller type='ide' index='0'>
      <controller type='ide' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
            <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
    </controller>
      </controller>
    <controller type='virtio-serial' index='0'>
      <controller type='virtio-serial' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
    </controller>
      </controller>
    <interface type='network'>
      <[[#interface|interface]] type='network'>
      <mac address='52:54:00:79:03:0c'/>
          <mac address='52:54:00:79:03:0c'/>
      <source network='default'/>
          &lt;source network='default'/>
      <model type='virtio'/>
          <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>
      [[#interface|</interface>]]
    <serial type='pty'>
      <serial type='pty'>
      <target port='0'/>
          <target port='0'/>
    </serial>
      </serial>
    <console type='pty'>
      <console type='pty'>
      <target type='serial' port='0'/>
          <target type='serial' port='0'/>
    </console>
      </console>
    <channel type='unix'>
      <channel type='unix'>
      <target type='virtio' name='org.qemu.guest_agent.0'/>
          <target type='virtio' name='org.qemu.guest_agent.0'/>
      <address type='virtio-serial' controller='0' bus='0' port='1'/>
          <address type='virtio-serial' controller='0' bus='0' port='1'/>
    </channel>
      </channel>
    <input type='tablet' bus='usb'>
      <input type='tablet' bus='usb'>
      <address type='usb' bus='0' port='1'/>
          <address type='usb' bus='0' port='1'/>
    </input>
      </input>
    <input type='mouse' bus='ps2'/>
      <input type='mouse' bus='ps2'/>
    <input type='keyboard' bus='ps2'/>
      <input type='keyboard' bus='ps2'/>
    <memballoon model='virtio'>
      <memballoon model='virtio'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
    </memballoon>
      </memballoon>
  </devices>
  </devices>
  </domain>
  </domain>


Line 113: Line 113:


The short [[#xml_name|name]] of the virtual machine. Must consists of alphanumeric characters and it must be unique per virtualization host. Ideally, it should follow the [[Linux_Virtualization_Naming_Conventions#Virtual_Machine_Naming_Convention|virtual machine name convention]] when naming virtual machine. Also conventionally, it is also the [[Linux_Virtualization_Naming_Conventions#Virtual_Machine_Image_Naming_Convention|name of the file storing the virtual machine image]], with the ".img" prefix.  
The short [[#xml_name|name]] of the virtual machine. Must consists of alphanumeric characters and it must be unique per virtualization host. Ideally, it should follow the [[Linux_Virtualization_Naming_Conventions#Virtual_Machine_Naming_Convention|virtual machine name convention]] when naming virtual machine. Also conventionally, it is also the [[Linux_Virtualization_Naming_Conventions#Virtual_Machine_Image_Naming_Convention|name of the file storing the virtual machine image]], with the ".img" prefix.  
The guest ("domain") name may contain dot, so we can simulate a hierarchy ("ose36.master", or "environment-name.host-in-environment-name").
Example:
virsh list
Id    Name                          State
----------------------------------------------------
123  in                            running
124  appproxy                      running
151  support                        running
159  master1                        running
160  master2                        running
161  master3                        running
162  infranode1                    running
163  infranode2                    running
164  node1                          running
165  node2                          running


====uuid====
====uuid====
Line 132: Line 150:
====vcpu====
====vcpu====


[[#xml_vcpu|vcpu]] defines the maximum number of virtual CPUs allocated. It must be 1 and the maximum number supported by the hypervisor.
{{External|https://libvirt.org/formatdomain.html#elementsCPUAllocation}}
 
[[#xml_vcpu|vcpu]] defines the maximum number of virtual CPUs allocated. It must be between 1 and the maximum number supported by the hypervisor.


More details: https://libvirt.org/formatdomain.html#elementsCPUAllocation.
The '''placement''' attribute can be either "static" or "auto".
 
===on_poweroff===
 
====destroy====
 
It means that the virtual machine will be terminated completely and all resources released. It does NOT mean the definition will be removed, so the virtual machine can be started at a later time.
 
===devices===
 
The element of the <devices> container describe the devices provided to the guest.
 
====emulator====


====disk====
====disk====


[[#xml_disk_image|disk]] defines.
Any device that looks like a disk (hard drive, cdrom or paravirtualized driver) is specified via the [[#xml_disk_image|disk]] element.
 
The '''type''' can be "file", "block", "dir", "network" or "volume".
 
The '''device''' attribute specifies how the disk should to be exposed to the guest OS. Possible values for this attribute are "disk", "cdrom", and "lun". The default value is "disk".
 
The '''&lt;source>''' element defines where how the storage is maintained by the virtualization host. Possible values are '''file''', '''block''', '''dir''', '''network''' and '''volume'''.
 
The '''<target>''' element controls the bus/device under which the disk is exposed to the guest OS. The dev attribute indicates the "logical" device name. The actual device name specified is not guaranteed to map to the device name in the guest OS, it is more of a device ordering hint.
 
The '''< driver>''' element specifies the guest driver managing the device.
 
====interface====
 
{{External|https://libvirt.org/formatdomain.html#elementsNICS}}
 
'''type'''
 
'''mac'''. The value for the "address" element can be randomly generated with [[Bash_script_that_generates_a_random_MAC_address|the following script]].
 
<span id='guest'></span>'''guest''' can be used to request a specific name for the network device on the guest:
 
  <interface type='network'>
    &lt;source network='default'/>
    '''<guest dev='eth0'/>'''
    ...
  </interface>
 
<font color=red>Does not seem to be honored.</font>

Latest revision as of 02:09, 9 November 2017

External

Internal

Example

<domain type='kvm'>
  <name>blue</name>
  <uuid>2a0523ba-9c44-47bd-8956-fc2b93ac1863</uuid>
  <memory unit='KiB'>1048576</memory>
  <currentMemory unit='KiB'>1048576</currentMemory>
  <vcpu placement='static'>1</vcpu>
  <os>
      <type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type>
      <boot dev='hd'/>
  </os>
  <features>
      <acpi/>
      <apic/>
  </features>
  <cpu mode='custom' match='exact'>
      <model fallback='allow'>Broadwell</model>
  </cpu>
  <clock offset='utc'>
      <timer name='rtc' tickpolicy='catchup'/>
      <timer name='pit' tickpolicy='delay'/>
      <timer name='hpet' present='no'/>
  </clock>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <pm>
      <suspend-to-mem enabled='no'/>
      <suspend-to-disk enabled='no'/>
  </pm>
  <devices>
      <emulator>/usr/libexec/qemu-kvm</emulator>
      <disk type='file' device='cdrom'>
          <driver name='qemu' type='raw'/>
          <source file='/iso-images/rhel-server-7.3-x86_64-dvd.iso'/>
          <target dev='hda' bus='ide'/>
          <readonly/>
          <address type='drive' controller='0' bus='0' target='0' unit='0'/>
      </disk>
      <disk type='file' device='disk'>
          <driver name='qemu' type='qcow2'/>
          <source file='/main-storage-pool/blue.qcow2'/>
          <target dev='vda' bus='virtio'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
      </disk>
      <disk type='file' device='disk'>
          <driver name='qemu' type='raw'/>
          <source file='/main-storage-pool/blue-docker.raw'/>
          <target dev='vdb' bus='virtio'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
      </disk>
      <controller type='usb' index='0' model='ich9-ehci1'>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x7'/>
      </controller>
      <controller type='usb' index='0' model='ich9-uhci1'>
          <master startport='0'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0' multifunction='on'/>
      </controller>
      <controller type='usb' index='0' model='ich9-uhci2'>
          <master startport='2'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x1'/>
      </controller>
      <controller type='usb' index='0' model='ich9-uhci3'>
          <master startport='4'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x2'/>
      </controller>
      <controller type='pci' index='0' model='pci-root'/>
      <controller type='ide' index='0'>
           <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
      </controller>
      <controller type='virtio-serial' index='0'>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
      </controller>
      <interface type='network'>
          <mac address='52:54:00:79:03:0c'/>
          <source network='default'/>
          <model type='virtio'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
      </interface>
      <serial type='pty'>
          <target port='0'/>
      </serial>
      <console type='pty'>
          <target type='serial' port='0'/>
      </console>
      <channel type='unix'>
          <target type='virtio' name='org.qemu.guest_agent.0'/>
          <address type='virtio-serial' controller='0' bus='0' port='1'/>
      </channel>
      <input type='tablet' bus='usb'>
          <address type='usb' bus='0' port='1'/>
      </input>
      <input type='mouse' bus='ps2'/>
      <input type='keyboard' bus='ps2'/>
      <memballoon model='virtio'>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
      </memballoon>
  </devices>
</domain>

Elements

name

The short name of the virtual machine. Must consists of alphanumeric characters and it must be unique per virtualization host. Ideally, it should follow the virtual machine name convention when naming virtual machine. Also conventionally, it is also the name of the file storing the virtual machine image, with the ".img" prefix.

The guest ("domain") name may contain dot, so we can simulate a hierarchy ("ose36.master", or "environment-name.host-in-environment-name").

Example:

virsh list
Id    Name                           State
----------------------------------------------------
123   in                             running
124   appproxy                       running
151   support                        running
159   master1                        running
160   master2                        running
161   master3                        running
162   infranode1                     running
163   infranode2                     running
164   node1                          running
165   node2                          running

uuid

uuid is a globally unique identifier for the virtual machine. Must be in a RFC 4122-compliant format. Can be committed when defining a new machine. If omitted, a new UUID will be generated.

memory

memory represents the maximum amount of memory allocated to the guest at boot time. Valid units are "b" (bytes), "KB" (kilobytes - 1,000 bytes), "KiB" (kibibytes 1,024 bytes), "MB", "MiB", 'GB", "GiB", "TB", "TiB". However, the value will be rounded up to the nearest KiB by libvirt, and may be further rounded up to the granularity supported by the hypervisor. In case NUMA is configured for the guest, the memory element can be omitted.

currentMemory

currentMemory represents the actual allocation of memory for the guest. This value can be less than the maximum allocation, to allow for ballooning up the guests memory on the fly. If this is omitted, it defaults to the same value as the memory element. The unit attribute behaves the same as for memory.

maxMemory

See https://libvirt.org/formatdomain.html#elementsMemoryAllocation.

vcpu

https://libvirt.org/formatdomain.html#elementsCPUAllocation

vcpu defines the maximum number of virtual CPUs allocated. It must be between 1 and the maximum number supported by the hypervisor.

The placement attribute can be either "static" or "auto".

on_poweroff

destroy

It means that the virtual machine will be terminated completely and all resources released. It does NOT mean the definition will be removed, so the virtual machine can be started at a later time.

devices

The element of the <devices> container describe the devices provided to the guest.

emulator

disk

Any device that looks like a disk (hard drive, cdrom or paravirtualized driver) is specified via the disk element.

The type can be "file", "block", "dir", "network" or "volume".

The device attribute specifies how the disk should to be exposed to the guest OS. Possible values for this attribute are "disk", "cdrom", and "lun". The default value is "disk".

The <source> element defines where how the storage is maintained by the virtualization host. Possible values are file, block, dir, network and volume.

The <target> element controls the bus/device under which the disk is exposed to the guest OS. The dev attribute indicates the "logical" device name. The actual device name specified is not guaranteed to map to the device name in the guest OS, it is more of a device ordering hint.

The < driver> element specifies the guest driver managing the device.

interface

https://libvirt.org/formatdomain.html#elementsNICS

type

mac. The value for the "address" element can be randomly generated with the following script.

guest can be used to request a specific name for the network device on the guest:

 <interface type='network'>
   <source network='default'/>
   <guest dev='eth0'/>
   ...
 </interface>

Does not seem to be honored.