Instalación de una máquina virtual basada en el núcleo (Kernel-based Virtual Machine o KVM) en un sistema Debian Wheezy.

Pre-requisitos

  • Habilitar las extensiones de virtualización de hardware (Hardware Virtualization) en el BIOS de su máquina.
  • Verificar que el procesador de su máquina es de 64 bits.

El procesador no es de 64 bits si obtiene 0 como resultado de la ejecución del comando

egrep -c ' lm ' /proc/cpuinfo
  • Verificar que el procesador de su máquina sea compatible con la tecnología de virtualización.

El procesador no es compatible si obtiene 0 como resultado de la ejecución del comando

egrep -c '(svm|vmx)' /proc/cpuinfo

KVM

Instalar KVM ejecutando el comando

apt-get install qemu-kvm libvirt-bin virtinst

Agregar un usuario (en este ejemplo debianuser) al grupo libvirt

adduser debianuser libvirt

Verificar la instalación de KVM.

virsh net-list --all

virsh list --all

Open VSwitch

Configurar la red de KVM para usar el puente virtual vbridge0 de Open vSwitch.

virsh net-dumpxml default > /tmp/default.xml

virsh net-destroy default

virsh net-undefine default

Extracto del archivo: /tmp/vbridge0.xml

<network>
    <name>vbridge0</name>
    <forward mode='bridge'/>
    <bridge name='vbridge0'/>
    <virtualport type='openvswitch'/>
</network>
virsh net-define /tmp/vbridge0.xml

/etc/init.d/libvirt-bin restart

virsh net-list --all

virsh net-start vbridge0

virsh net-list

Activar el inicio automático de la red.

virsh net-autostart vbridge0

Reiniciar la máquina.

reboot

Verificar que la red de KVM esté activada.

virsh net-list
Name                 State      Autostart
-----------------------------------------
vbridge0             active     yes  

Agrupación de almacenamiento

Crear una agrupación de almacenamiento (storage pool) para las máquinas virtuales y para las imágenes de CD/DVD.

mkdir -p /srv/kvm/vms

mkdir /srv/kvm/iso

cd /srv/kvm/iso/

wget http://cdimage.debian.org/debian-cd/7.5.0/amd64/iso-cd/debian-7.5.0-amd64-CD-1.iso

wget http://cdimage.debian.org/debian-cd/7.5.0/amd64/iso-cd/SHA512SUMS

sha512sum -c SHA512SUMS

Contenido del archivo: /tmp/vms.xml

<pool type="dir">
   <name>VMS</name>
     <target>
       <path>/srv/kvm/vms</path>
     </target>
</pool>

Contenido del archivo: /tmp/isos.xml

<pool type="dir">
   <name>ISO</name>
     <target>
       <path>/srv/kvm/iso</path>
     </target>
</pool>
virsh pool-define /tmp/vms.xml

virsh pool-define /tmp/isos.xml

virsh pool-start VMS

virsh pool-start ISO

virsh pool-autostart VMS

virsh pool-autostart ISO

Verificar la configuración.

virsh pool-list

Creación de una máquina virtual Linux

Crear el disco duro para la máquina virtual.

qemu-img create -f qcow2 /srv/kvm/vms/debian750x64-1cpu1ram48hd.qcow2 48G

Crear la máquina virtual sin interface de red (será después configurada con Open vSwitch).

virt-install \
--connect qemu:///system \
--virt-type kvm \
--name debian750x64-1cpu1ram48hd \
--vcpus 1 \
--ram 1024 \
--disk path=/srv/kvm/vms/debian750x64-1cpu1ram48hd.qcow2,size=48,format=qcow2 \
--cdrom /srv/kvm/iso/debian-7.5.0-amd64-CD-1.iso \
--boot hd,cdrom,menu=on \
--graphics vnc \
--os-type linux \
--os-variant debianwheezy \
--nonetworks
virsh list

Crear una dirección MAC nueva para la interface de red.

MACADDR="52:54:00:$(dd if=/dev/urandom bs=512 count=1 2>/dev/null | md5sum | sed 's/^\(..\)\(..\)\(..\).*$/\1:\2:\3/')"; echo $MACADDR

Configurar la máquina virtual para usar Open vSwitch.

virsh dumpxml debian750x64-1cpu1ram48hd > /tmp/debian750x64-1cpu1ram48hd.xml

Añadir la siguiente porción de XML directamente antes de la etiqueta </devices>.

Extracto del archivo: /tmp/debian750x64-1cpu1ram48hd.xml

    <interface type='bridge'>
      <mac address='52:54:00:11:22:33'/>
      <source bridge='vbridge0'/>
      <virtualport type='openvswitch' />
      <model type='virtio'/>
    </interface>

Detener la máquina virtual.

virsh destroy debian750x64-1cpu1ram48hd

Redifinir la máquina virtual usando la configuración del archivo /tmp/debian750x64-1cpu1ram48hd.xml.

virsh define /tmp/debian750x64-1cpu1ram48hd.xml

Iniciar la máquina virtual.

virsh start debian750x64-1cpu1ram48hd

Comprobar que todo esté funcionando.

virsh list --all
 Id    Name                           State
----------------------------------------------------
 3     debian750x64-1cpu1ram48hd      running 
ovs-vsctl show
aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee
    Bridge "vbridge0"
        Port "eth0"
            Interface "eth0"
        Port "vbridge0"
            Interface "vbridge0"
                type: internal
        Port "vnet0"
            Interface "vnet0"
    ovs_version: "1.4.2" 
ifconfig
eth0      Link encap:Ethernet  Hardware Adresse 11:22:33:44:55:66  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metrik:1
          RX packets:809 errors:0 dropped:0 overruns:0 frame:0
          TX packets:694 errors:0 dropped:0 overruns:0 carrier:1
          Kollisionen:0 Sendewarteschlangenlänge:1000
          RX bytes:425806 (415.8 KiB)  TX bytes:89357 (87.2 KiB)
          Interrupt:45

lo        Link encap:Lokale Schleife  
          inet Adresse:127.0.0.1  Maske:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metrik:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          Kollisionen:0 Sendewarteschlangenlänge:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

vbridge0 Link encap:Ethernet  Hardware Adresse 11:22:33:44:55:66  
          inet Adresse:192.168.0.100  Bcast:192.168.0.255  Maske:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metrik:1
          RX packets:809 errors:0 dropped:0 overruns:0 frame:0
          TX packets:659 errors:0 dropped:0 overruns:0 carrier:0
          Kollisionen:0 Sendewarteschlangenlänge:0
          RX bytes:425806 (415.8 KiB)  TX bytes:83531 (81.5 KiB)

vnet0     Link encap:Ethernet  Hardware Adresse fe:54:00:11:22:33  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metrik:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          Kollisionen:0 Sendewarteschlangenlänge:500
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
ping google.com
PING google.com (173.194.113.137) 56(84) bytes of data.
64 bytes from ham02s11-in-f9.1e100.net (173.194.113.137): icmp_seq=1 ttl=54 time=24.9 ms
64 bytes from ham02s11-in-f9.1e100.net (173.194.113.137): icmp_seq=2 ttl=54 time=24.2 ms

Administrador de Máquinas Virtuales

Puede instalar el Administrador de Máquinas Virtuales (Virtual Machine Manager) para manejar las máquinas virtuales desde otro cliente (en este ejemplo un cliente Debian).

apt-get install virt-manager