Virtualization in Grid'5000
Purpose
This page presents ways to use KVM on production image. The aim is to permit the execution of virtual machines on the nodes with a "non-deploy" reservation.
First steps
Job submission
In order to test easily the kvm environment, we will use an interactive job.
jdoe@fnancy:~$ oarsub -I
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 use as a base for more advanced work. For the next steps of this tutorial, copy the disk image to /tmp on the node
jdoe@griffon-37:~$ cp /grid5000/images/KVM/squeeze-x64-base.qcow2 /tmp/
Network configuration
Create Tun/Tap interface 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
:
jdoe@griffon-37:~$ sudo create_tap
- Tun/Tap interfaces are listed by issuing the command
/sbin/ifconfig
.
jdoe@griffon-37:~$ /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)
Generate a random mac address for the Tun/Tap interface
- Use the following script
random_mac
. This will
generate a random mac address, starting with 00:16:3e.
jdoe@griffon-37:~$ export MACADDR=`random_mac`
![]() |
Note |
---|---|
The first three octets are important (identification for the virtualized network). Don't change it. |
Run the guest OS using kvm
Use the kvm command.
jdoe@griffon-37:~$ screen kvm -m 512 -hda /tmp/squeeze-x64-base.qcow2 -net nic,macaddr=$MACADDR
-net tap,ifname=tap0
,script=no -nographic
![]() |
Note |
---|---|
In this example, |
Or, you can start the guest OS using libvirt
- Edit the domain file
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> <interface type='ethernet'> <target dev='tap0'/> <script path='no'/> <mac address='00:16:3e:78:b8:04'/> </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.
jdoe@griffon-37:~$ virsh create domain.xml
- You can use
virsh
to manage your guest OS.
jdoe@griffon-37:~$ virsh list jdoe@griffon-37:~$ virsh console squeeze
Misc notes
- Use KVM contextualization, if you want to perform some customization (like using static address) for your VMs.
- For the deployment of an important number of guest OS, you can use the subnet reservation. See also the virtual network interlink.
- Manage the console for all your guest OS with Screen
- Account:
root:grid5000
- Use
tunctl
if you need to delete a Tun/Tap device.
jdoe@griffon-37:~$ /usr/sbin/tunctl -d tap0
- Some clusters don't have virtualization support in the BIOS. To check :
jdoe@griffon-37:~$ egrep '^flags.*(vmx|svm)' /proc/cpuinfo