Virtualization in Grid'5000: Difference between revisions
(Remove references to RANDOM_MAC) |
|||
Line 5: | Line 5: | ||
= Purpose = | = Purpose = | ||
This page presents | This page presents how to use KVM on the production environment, with a "non-deploy" reservation. | ||
execution of virtual machines on the nodes with a | The aim is to permit the execution of virtual machines on the nodes, along with a subnet reservation. | ||
In the second part, we will explain more precisely how to customize a virtual machine, using a contextualization iso file. | |||
= | = Quick start = | ||
In this part, we will create a virtual machine in a few steps, and ssh to it. | |||
=== Job submission=== | === Job submission=== | ||
In order to test easily the kvm environment, we | In order to test easily the kvm environment, we use an interactive job, and we reserve one subnet and one node. | ||
{{Term|location=frontend|cmd=<code class="command">oarsub -I</code>}} | {{Term|location=frontend|cmd=<code class="command">oarsub -l slash_22=1+nodes=1 -I</code>}} | ||
Line 21: | Line 24: | ||
{{Term|location=node|cmd=<code class="command">egrep '^flags.*(vmx|svm)' /proc/cpuinfo</code>}} | {{Term|location=node|cmd=<code class="command">egrep '^flags.*(vmx|svm)' /proc/cpuinfo</code>}} | ||
- You can request nodes with enabled virtualization support, using the "virtual" property: | - You can request nodes with enabled virtualization support, using the "virtual" property: | ||
{{Term|location=frontend|cmd=<code class="command">oarsub -I - | {{Term|location=frontend|cmd=<code class="command">oarsub -I -l "slash_22=1+{virtual!='none'}/nodes=1"</code>}} | ||
}} | }} | ||
Line 29: | Line 32: | ||
<code class="command">/grid5000/images/KVM/squeeze-x64-base.qcow2</code> | <code class="command">/grid5000/images/KVM/squeeze-x64-base.qcow2</code> | ||
It can be | It can be used as a base for more advanced work. | ||
For the next steps of this tutorial, copy the disk image to /tmp on the node | For the next steps of this tutorial, copy the disk image to /tmp on the node: | ||
{{Term|location=node|cmd=<code class="command">cp /grid5000/images/KVM/squeeze-x64-base.qcow2 /tmp/</code>}} | {{Term|location=node|cmd=<code class="command">cp /grid5000/images/KVM/squeeze-x64-base.qcow2 /tmp/</code>}} | ||
Line 61: | Line 64: | ||
}} | }} | ||
=== Generate | === Generate the contextualization iso file === | ||
This file contains a script which will set the network configration of your VM. | |||
First, choose an IP in the range you have reserved. The command <code class=command>g5k-subnets</code> will give you more information. | |||
{{Term|location=node|cmd=<code class="command">g5k-subnets -a</code>}} | |||
<pre class="brush: bash"> | |||
10.172.0.0/22 10.175.255.255 255.252.0.0 10.175.255.254 10.172.0.0 dns.luxembourg.grid5000.fr 172.16.191.101 | |||
</pre> | |||
You can get the list of available IP, and an associated unique mac address with the following command. | |||
{{Note|text= The first three bytes are important | {{Term|location=node|cmd=<code class="command">g5k-subnets -im</code>}} | ||
<pre class="brush: bash"> | |||
10.172.0.1 00:16:3E:AC:00:01 | |||
10.172.0.2 00:16:3E:AC:00:02 | |||
10.172.0.3 00:16:3E:AC:00:03 | |||
10.172.0.4 00:16:3E:AC:00:04 | |||
10.172.0.5 00:16:3E:AC:00:05 | |||
10.172.0.6 00:16:3E:AC:00:06 | |||
10.172.0.7 00:16:3E:AC:00:07 | |||
10.172.0.8 00:16:3E:AC:00:08 | |||
10.172.0.9 00:16:3E:AC:00:09 | |||
10.172.0.10 00:16:3E:AC:00:0A | |||
... | |||
</pre> | |||
{{Note|text=- The mac address is a translation of the IP. Do not change it. <br /> | |||
- The first three bytes of the mac address <code class="command">00:16:3e</code> are important. If you omit to use the contextualization iso file for the network configuration, you will be able to receive an IP from the DHCP server only if you use this prefix. | |||
}} | |||
Generate this iso file with this command: | |||
{{Term|location=node|cmd=<code class="command">/grid5000/images/KVM/g5k-vm --ip 10.172.0.1 --iso /tmp/kvm-context-10.172.0.1.iso</code>}} | |||
=== Run the guest OS using the kvm command === | === Run the guest OS using the kvm command === | ||
Start the virtual machine with the kvm command. The following command is just an example, feel free to adapt it to your use case. | Start the virtual machine with the kvm command. The following command is just an example, feel free to adapt it to your use case. | ||
The kvm process in | The kvm process is launched in a <code class="command">screen</code> session, if you are not familiar with screen, read its [[Screen|documentation]]. | ||
{{Term|location=node|cmd=<code class="command">screen kvm -m 512 -hda /tmp/squeeze-x64-base.qcow2 -net nic,model=virtio,macaddr='''$MACADDR''' -net tap,ifname='''tap0''',script=no -nographic</code>}} | {{Term|location=node|cmd=<code class="command">screen kvm -m 512 -hda /tmp/squeeze-x64-base.qcow2 -cdrom '''$ISOFILE''' -net nic,model=virtio,macaddr='''$MACADDR''' -net tap,ifname='''tap0''',script=no -nographic</code>}} | ||
{{Note|text=- <code class="command">tap0</code> is the name of our Tun/Tap interface. Adapt it with the Tun/Tap name on witch you want to attach your guest OS. <br /> | {{Note|text=- <code class="command">tap0</code> is the name of our Tun/Tap interface. Adapt it with the Tun/Tap name on witch you want to attach your guest OS. <br /> | ||
- The variable $MACADDR contains the previously generated mac address. | - The variable $ISOFILE contains the full path to the iso previously generated (for example, <code class="file">/tmp/kvm-context-10.172.0.1.iso</code>). | ||
- The variable $MACADDR contains the previously generated mac address, given by <code class="command">g5k-subnets</code>. | |||
- The password for the <code class="command">root</code> account is <code class="command">grid5000</code> | - The password for the <code class="command">root</code> account is <code class="command">grid5000</code> | ||
}} | }} | ||
Line 109: | Line 140: | ||
<target dev='vda' bus='virtio'/> | <target dev='vda' bus='virtio'/> | ||
<shareable/> | <shareable/> | ||
</disk> | |||
<disk type='file' device='cdrom'> | |||
<source file='/tmp/kvm-context.iso'/> | |||
<target dev='vdb' bus='virtio'/> | |||
<readonly/> | |||
</disk> | </disk> | ||
<interface type='ethernet'> | <interface type='ethernet'> | ||
Line 114: | Line 150: | ||
<script path='no'/> | <script path='no'/> | ||
<model type='virtio'/> | <model type='virtio'/> | ||
<mac address='00:16:3e: | <mac address='00:16:3e:ac:00:01'/> | ||
</interface> | </interface> | ||
<serial type='pty'> | <serial type='pty'> | ||
Line 136: | Line 172: | ||
{{Note|text= | {{Note|text=Use <code class="command">CTRL+AltGr+]</code> to disconnect from <code class="command">virsh console</code> | ||
}} | }} | ||
Revision as of 19:27, 18 November 2012
Purpose
This page presents how to use KVM on the production environment, with a "non-deploy" reservation. The aim is to permit the execution of virtual machines on the nodes, along with a subnet reservation. In the second part, we will explain more precisely how to customize a virtual machine, using a contextualization iso file.
Quick start
In this part, we will create a virtual machine in a few steps, and ssh to it.
Job submission
In order to test easily the kvm environment, we use an interactive job, and we reserve one subnet and one node.
Disk image, virtual machine
A disk image containing debian squeeze is available at the following path:
/grid5000/images/KVM/squeeze-x64-base.qcow2
It can be used as a base for more advanced work. For the next steps of this tutorial, copy the disk image to /tmp on the node:
Network configuration
In order to use the network with kvm, a Tun/Tap interface must be created for each virtual machines. This virtual interface will be attached to your virtual machine, and bridged on the production network. Therefore, the virtual machine will be able to get an IP from the DHCP server and access the network.
A script is available to create automatically this interface on the node:
create_tap
:
- Tun/Tap interfaces are listed by issuing the command
/sbin/ifconfig
.
tap0 Link encap:Ethernet HWaddr 00:16:3e:db:c6:41 inet6 addr: fe80::58ff:a4ff:fe97:c6a8/64 Scope:Link UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:29435 overruns:0 carrier:0 collisions:0 txqueuelen:500 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
![]() |
Note |
---|---|
- Create one Tun/Tap interface per guest OS. - Use |
Generate the contextualization iso file
This file contains a script which will set the network configration of your VM.
First, choose an IP in the range you have reserved. The command g5k-subnets
will give you more information.
10.172.0.0/22 10.175.255.255 255.252.0.0 10.175.255.254 10.172.0.0 dns.luxembourg.grid5000.fr 172.16.191.101
You can get the list of available IP, and an associated unique mac address with the following command.
10.172.0.1 00:16:3E:AC:00:01 10.172.0.2 00:16:3E:AC:00:02 10.172.0.3 00:16:3E:AC:00:03 10.172.0.4 00:16:3E:AC:00:04 10.172.0.5 00:16:3E:AC:00:05 10.172.0.6 00:16:3E:AC:00:06 10.172.0.7 00:16:3E:AC:00:07 10.172.0.8 00:16:3E:AC:00:08 10.172.0.9 00:16:3E:AC:00:09 10.172.0.10 00:16:3E:AC:00:0A ...
Generate this iso file with this command:
Run the guest OS using the kvm command
Start the virtual machine with the kvm command. The following command is just an example, feel free to adapt it to your use case.
The kvm process is launched in a screen
session, if you are not familiar with screen, read its documentation.
![]() |
node :
|
screen kvm -m 512 -hda /tmp/squeeze-x64-base.qcow2 -cdrom $ISOFILE -net nic,model=virtio,macaddr=$MACADDR -net tap,ifname=tap0,script=no -nographic |
Or, use libvirt
Libvirt is a toolkit for managing virtualization servers. Libvirt is also an abstraction layer for different virtualization solutions, including KVM but also Xen and VMWare ESX. In our case, we use libvirt on top of KVM.
- Create a domain file in XML, describing a virtual machine. Don't forget to adapt this example to your case (especially, replace the mac address by a randomly generated one).
eg : domain.xml
<domain type='kvm'> <name>squeeze</name> <memory>524288</memory> <vcpu>1</vcpu> <os> <type arch="x86_64">hvm</type> </os> <clock sync="localtime"/> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>destroy</on_crash> <devices> <emulator>/usr/bin/kvm</emulator> <disk type='file' device='disk'> <driver type='qcow2'/> <source file='/tmp/squeeze-x64-base.qcow2'/> <target dev='vda' bus='virtio'/> <shareable/> </disk> <disk type='file' device='cdrom'> <source file='/tmp/kvm-context.iso'/> <target dev='vdb' bus='virtio'/> <readonly/> </disk> <interface type='ethernet'> <target dev='tap0'/> <script path='no'/> <model type='virtio'/> <mac address='00:16:3e:ac:00:01'/> </interface> <serial type='pty'> <source path='/dev/ttyS0'/> <target port='0'/> </serial> <console type='pty'> <source path='/dev/ttyS0'/> <target port='0'/> </console> </devices> </domain>
- Now, the guest OS can be started.
- You can also use
virsh
to manage your guest OS:- list the running virtual machines:
virsh list
- open a console on the "squeeze" virtual machine:
virsh console squeeze
- list the running virtual machines:
Misc notes
- Read KVM contextualization, if you want to perform some customization for your VMs, like using static addresses in conjunction with a subnet reservation.
- For the deployment of an important number of guest OS, you can use the subnet reservation. See also the virtual network interlink.