LibVirtKVM

Wiki.LibVirtKVM History

Hide minor edits - Show changes to output

Changed line 62 from:
to:
Plus d'infos ici: http://docs.gz.ro/node/282
Added line 59:
* Forcer les interfaces du routeur à ne pas faire de CheckSum Offloading: @@ethtool -K eth1 tx off@@
Added lines 61-62:

Changed line 54 from:
* Ne pas utiliser le driver virtio, mais bon, ca serait trop moche
to:
* Ne pas utiliser le driver virtio, mais bon, ca serait trop moche.
Added lines 56-58:
* Reactiver la gestion du calcul des checksum à l'OS plutot qu'a la carte réseau, mais bon on perd l'avantage de la vitesse de la virtualisation.
* Désactiver la vérification des checksums coté client, mais bon, c'est pas terrible, car on le desactive pour tout ou pour rien. Le checksum peut etre utilisé par des connections venant d'internet, donc pas viable non plus.
* Patcher le driver virtio pour qu'ils renvois un checksum égale à 0 au lieu de mettre de la merde dans l'entête.
Added lines 50-56:
!!! Networking avec Virtio et checksum UDP
Il se trouve que lorsque deux VMs se parlent a travers le réseau via le driver virtio, le checksum des trames IP n'est plus calculé. En effet, les paquets ne sortant pas de l'hyperviseur n'ont pas besoin de calculer leur checksum, vu que la communication est fiable. Seul soucis, c'est que certains programmes valident que le checksum soit bon, typiquement le client isc-dhcp. Ce qui provoque des erreurs de type @@ dhcpd: 5 bad udp checksums in 5 packets@@, et qui empeche le client de chopper une IP.
Il y'a plusieurs solutions a ce problème:
* Forcer le calcul des packets UDP (DHCP) dans la table mangle en sortie du traffic du routeur. Une bonne solution, mais impossible a faire sur ma distrib OpenWRT.
* Ne pas utiliser le driver virtio, mais bon, ca serait trop moche
* Monter en version le client DHCP. C'est la solution que j'ai choisie, sachant que j'ai le controle sur les OS de mon infra. Si j'ai besoin de monter une vieille distro, ça se fera via un driver ethernet non Virtio, et c'est pas grave vu que ça sera du temporaire.
Voila, sinon, je me demande vraiment pourquoi le packet n'est pas patché sur une Debian Jessie, alors que le problème est connu depuis un bout bout de temps (au moins 2012) ...
March 01, 2014, at 01:57 AM EST by 88.166.207.155 -
Changed lines 18-23 from:
   </serial>@]
to:
   </serial>
    <console type='unix'>
      <source mode='bind' path='/var/lib/libvirt/sockets/jeztest1-clone.serial'/>
      <target type='serial' port='0'/>
    </console>

@]
March 01, 2014, at 01:47 AM EST by 88.166.207.155 -
Changed lines 13-20 from:
# Dans la conf de la machine, c'est possible de rajouter des arguments directement pour KVM, c'est ce qu'on doit faire:[@
<domain type='kvm' xmlns:qemu='http://libvirt
.org/schemas/domain/qemu/1.0'>
[...]
# Et tout à la fin ...
  <qemu:commandline>
    <qemu:arg value='-
serial'/>
    <qemu:arg value='unix:/var/lib/libvirt/sockets/jeztest1-clone.serial,server,nowait'/>
  </qemu:commandline>
<
/domain>@]
to:
Il y'a un peu de conf à faire sur l'hyperviseur, et aussi sur la VM, pour lui dire de bien écouter sur le bon terminal.
# Dans la conf de la machine, il faut rajouter une console de type serial:[@
    <serial type='unix'>
     <source mode='bind' path='/var/lib/libvirt/sockets/jeztest1-clone.serial'/>
      <target port='0'/>
    </serial
>@]
Changed lines 35-36 from:

to:
!!! Arguments de KVM dans la conf libvirt
On peut normalement rajouter des arguments, directement dans la conf de libvirt:[@
<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
[...] # Et tout à la fin ...
  <qemu:commandline>
    <qemu:arg value='-serial'/>
    <qemu:arg value='unix:/var/lib/libvirt/sockets/jeztest1-clone.serial,server,nowait'/>
  </qemu:commandline>
</domain>@]
March 01, 2014, at 01:10 AM EST by 88.166.207.155 -
Changed line 24 from:
Au niveau de la machine cliente, qui sera sous Debian, il faudra modifier la conf des tty et de grub:[@
to:
# Au niveau de la machine cliente, qui sera sous Debian, il faudra modifier la conf des tty et de grub:[@
March 01, 2014, at 01:10 AM EST by 88.166.207.155 -
Changed line 13 from:
Dans la conf de la machine, c'est possible de rajouter des arguments directement pour KVM, c'est ce qu'on doit faire:[@
to:
# Dans la conf de la machine, c'est possible de rajouter des arguments directement pour KVM, c'est ce qu'on doit faire:[@
Changed line 21 from:
Il faudra ensuite créer le dossier et lui mettre les bon droits:[@
to:
# Il faudra ensuite créer le dossier et lui mettre les bon droits:[@
Changed line 33 from:
Une fois que c'est fait, on relance la VM, et depuis l'hypervieur, on va récupérer tout ça grâce à minicom:[@
to:
#Une fois que c'est fait, on relance la VM, et depuis l'hypervieur, on va récupérer tout ça grâce à minicom:[@
March 01, 2014, at 01:09 AM EST by 88.166.207.155 -
Added lines 1-72:
Voici un petite page avec quelques tips sur LibVirt/KVM



!! LibVirt

LibVirt peut utiliser dnsmasq pour l'attribution des IP si les VMs sont configurées via le DHCP. Pou retourver toutes les infos de son résueau:[@
tail  -n 1000 /var/lib/libvirt/dnsmasq/*
@]


!!! Activer le port serial sur les VMs
Dans la conf de la machine, c'est possible de rajouter des arguments directement pour KVM, c'est ce qu'on doit faire:[@
<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
[...] # Et tout à la fin ...
  <qemu:commandline>
    <qemu:arg value='-serial'/>
    <qemu:arg value='unix:/var/lib/libvirt/sockets/jeztest1-clone.serial,server,nowait'/>
  </qemu:commandline>
</domain>@]
Il faudra ensuite créer le dossier et lui mettre les bon droits:[@
mkdir /var/lib/libvirt/sockets/
chown libvirt-kvm  /var/lib/libvirt/sockets/@]
Au niveau de la machine cliente, qui sera sous Debian, il faudra modifier la conf des tty et de grub:[@
echo "
# Configure TTY
GRUB_TERMINAL=serial
GRUB_SERIAL_COMMAND="serial --speed=19200 --unit=0 --word=8 --parity=no --stop=1"
GRUB_CMDLINE_LINUX="console=tty0 console=ttyS0,19200n8"
" >> /etc/default/grub
sed -i 's/1:2345:respawn:/sbin/getty 38400 tty0/1:2345:respawn:/sbin/getty 38400 ttyS0/ /etc/inittab
update-grub2@]
Une fois que c'est fait, on relance la VM, et depuis l'hypervieur, on va récupérer tout ça grâce à minicom:[@
minicom -D unix#/var/lib/libvirt/sockets/jeztest1-clone.serial
@]





!! KVM
Alors, je vous le dit tout de suite, installez la version 1.7 des backports de Debian, sinon, vous resterez en version 1.2, ce qui est très vieux.

Pour voirs avec quels arguments sont lancés les VM:[@
# La commande de base
ps aux | grep kvm
# Exemple avec selection su le nom de la VM, et un joli affichage dans le terminal:
ps aux | grep nom_vm | sed 's/ -/\n-/g'@]

Un exemple de conf:[@
/usr/bin/kvm
-id 605
-chardev socket,id=qmp,path=/var/run/qemu-server/605.qmp,server,nowait
-mon chardev=qmp,mode=control
-vnc unix:/var/run/qemu-server/605.vnc,x509,password
-pidfile /var/run/qemu-server/605.pid
-daemonize
-name sehprdbdd1
-smp sockets=1,cores=4
-nodefaults
-boot menu=on
-vga cirrus
-cpu kvm64,+x2apic,+sep
-k fr
-m 8192
-serial unix:/var/run/qemu-server/605.serial,server,nowait
-device piix3-usb-uhci,id=uhci,bus=pci.0,addr=0x1.0x2
-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3
-drive file=/VMs/images/605/vm-605-disk-1.qcow2,if=none,id=drive-virtio0,format=qcow2,aio=native,cache=none
-device virtio-blk-pci,drive=drive-virtio0,id=virtio0,bus=pci.0,addr=0xa,bootindex=100
-netdev type=tap,id=net0,ifname=tap605i0,script=/var/lib/qemu-server/pve-bridge,vhost=on
-device virtio-net-pci,mac=DE:AD:BE:EF:97:E9,netdev=net0,bus=pci.0,addr=0x12,id=net0,bootindex=300@]
Page last modified on April 24, 2016, at 09:37 PM EST