Virtualization in Grid'5000: Difference between revisions

From Grid5000
Jump to navigation Jump to search
No edit summary
Line 5: Line 5:


= Purpose =
= Purpose =
This page presents ways to use KVM on production image.
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.


= Usage =
=== First, submit the job using habitual oarsub command ===
  jdoe@fnancy:~$ oarsub -I
  jdoe@fnancy:~$ oarsub -I


=== Copy the kvm disk image to /tmp on the 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 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/
  jdoe@griffon-37:~$ cp /grid5000/images/KVM/squeeze-x64-base.qcow2 /tmp/


=== Create Tun/Tap interface for your guest OS ===
=== Network configuration ===
jdoe@griffon-37:~$ sudo create_tap
 
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:
<code class="command">create_tap</code>:
 
  jdoe@griffon-37:~$ sudo create_tap


* Tun/Tap interfaces are listed by issuing the command <code class="command">/sbin/ifconfig</code>.
* Tun/Tap interfaces are listed by issuing the command <code class="command">/sbin/ifconfig</code>.
Line 21: Line 42:


  [...]
  [...]
  tap0      Link encap:Ethernet  HWaddr 00:16:3e:db:c6:41
  tap0      Link encap:Ethernet  HWaddr 00:16:3e:db:c6:41
           inet6 addr: fe80::58ff:a4ff:fe97:c6a8/64 Scope:Link
           inet6 addr: fe80::58ff:a4ff:fe97:c6a8/64 Scope:Link
           UP BROADCAST RUNNING PROMISC MULTICAST  MTU:1500  Metric:1
           UP BROADCAST RUNNING PROMISC MULTICAST  MTU:1500  Metric:1
           RX packets:0 errors:0 dropped:0 overruns:0 frame:0
           RX packets:0 errors:0 dropped:0 overruns:0 frame:0
           TX packets:0 errors:0 dropped:29435 overruns:0 carrier:0
           TX packets:0 errors:0 dropped:29435 overruns:0 carrier:0
           collisions:0 txqueuelen:500  
           collisions:0 txqueuelen:500
           RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
           RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)


Line 33: Line 54:


=== Generate a random mac address for the Tun/Tap interface ===
=== Generate a random mac address for the Tun/Tap interface ===
* Use the following script
 
* Use the following script <code class="command">random_mac</code>. This will
generate a random mac address, starting with 00:16:3e.
 
  jdoe@griffon-37:~$ export MACADDR=`random_mac`
  jdoe@griffon-37:~$ export MACADDR=`random_mac`
{{Note|text= The first three octets are important (identification for the virtualized network). Don't change it.  
{{Note|text= The first three octets are important (identification for the virtualized network). Don't change it.
}}
}}


=== Now, you can run the guest OS using kvm ===
=== 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=<code class="command">$MACADDR</code> -net tap,ifname=<code class="command">tap0</code>,script=no -nographic
  jdoe@griffon-37:~$ screen kvm -m 512 -hda /tmp/squeeze-x64-base.qcow2 -net nic,macaddr=<code class="command">$MACADDR</code> -net tap,ifname=<code class="command">tap0</code>,script=no -nographic
{{Note|text= In this example, <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.
{{Note|text= In this example, <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.
Line 86: Line 113:
  jdoe@griffon-37:~$ virsh create domain.xml
  jdoe@griffon-37:~$ virsh create domain.xml
* You can use <code class="command">virsh</code> to manage your guest OS.
* You can use <code class="command">virsh</code> to manage your guest OS.
  jdoe@griffon-37:~$ virsh list  
  jdoe@griffon-37:~$ virsh list
  jdoe@griffon-37:~$ virsh console squeeze
  jdoe@griffon-37:~$ virsh console squeeze
{{Note|text= You can use the script <code class="command">/usr/local/bin/random_mac</code> to generate a mac address.
{{Note|text= You can use the script <code class="command">/usr/local/bin/random_mac</code> to generate a mac address.
Line 98: Line 125:
* Use <code class="command">tunctl</code> if you need to delete a Tun/Tap device.
* Use <code class="command">tunctl</code> if you need to delete a Tun/Tap device.
  jdoe@griffon-37:~$ /usr/sbin/tunctl -d tap0
  jdoe@griffon-37:~$ /usr/sbin/tunctl -d tap0
* Some clusters don't have virtualization support in the BIOS. To check :  
* Some clusters don't have virtualization support in the BIOS. To check :
  jdoe@griffon-37:~$ egrep '^flags.*(vmx|svm)' /proc/cpuinfo
  jdoe@griffon-37:~$ egrep '^flags.*(vmx|svm)' /proc/cpuinfo

Revision as of 17:05, 18 October 2012

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)
Note.png Note

Create one Tun/Tap interface per guest OS.

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.png 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.png Note

In this example, tap0 is the name of our Tun/Tap interface. Adapt it with the Tun/Tap name on witch you want to attach your guest OS.

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
Note.png Note

You can use the script /usr/local/bin/random_mac to generate a mac address.

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