Création d'une machine virtuelle KVM sur le cluster
Pré-requis
- serveur installé tel que décrit dans cette documentation
- disposer d'une iso du CDROM d'installation dans /root
- avoir créé un volume dans la baie de disques pour recevoir la machine virtuelle, tel que décrit dans cette documentation
Partitionnement
Le volume associé la machine virtuelle doit recevoir deux partitions.
- la première contient les informations de description de la machine KVM pour la machine hôte
- la seconde contient le disque dur virtuel de la machine KVM
Déterminer le numéro de device - dans cette documentation nous utiliserons /dev/mapper/360123456789abcdef0123456789abcde.
En ayant suivi la documentation citée ci-dessus, une première partition d'une taille de 4Go (ou davantage suivant la taille de la RAM de la machine virtuelle doit avoir été créée et formatée, et le reste laissé disponible pour l'OS invité. On peut le vérifier ainsi :
# fdisk /dev/mapper/360123456789abcdef0123456789abcde
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
switch off the mode (command 'c') and change display units to
sectors (command 'u').
Command (m for help): u
Changing display/entry units to sectors
Command (m for help): c
DOS Compatibility flag is not set
Command (m for help): p
Disk /dev/mapper/360123456789abcdef0123456789abcde: 500.0 GB, 499999981568 bytes
15 heads, 15 sectors/track, 4340277 cylinders, total 976562464 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xc6b55526
Device Boot Start End Blocks Id System
/dev/mapper/360123456789abcdef0123456789abcdep2 2048 8390655 4194304 83 Linux
Il reste ensuite à formater la première partition :
mkfs.ext4 /dev/mapper/360123456789abcdef0123456789abcde-part1
Préparation de la machine virtuelle
- Ajouter une entrée dans le fichier /etc/vzcluster/vzclusterservice.conf
mavm:kvm:/cluster_fs/mavm:/dev/mapper/360123456789abcdef0123456789abcde
- Diffuser le fichier
vzdiffuse_conf.sh
- Créer les prérequis sur les noeuds du cluster
vzcheckservicesall.sh
- Monter la partition et créer la structure
vzmount.sh mavm mkdir /cluster_fs/mavm/conf mkdir /cluster_fs/mavm/dump
- Créer le fichier de configuration de la machine virtuelle dans /cluster_fs/mavm/conf/mavm.xml, en ajustant notamment les valeurs suivantes :
- la mémoire allouée (memory et currentMemory)
- le disque dur virtuel (source file)
- l'iso pour le cdrom d'installation (source file)
<domain type='kvm'> <name>mavm</name> <!--<uuid>ici il faut un uuid unique</uuid>--> <memory>614400</memory> <currentMemory>614400</currentMemory> <vcpu>2</vcpu> <os> <type arch='x86_64' machine='pc-0.12'>hvm</type> <boot dev='hd'/> </os> <features> <acpi/> <apic/> <pae/> </features> <clock offset='utc'/> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>restart</on_crash> <devices> <emulator>/usr/bin/kvm</emulator> <disk type='file' device='disk'> <driver name='qemu' type='raw' cache='none'/> <source file='/dev/mapper/3600c0ff000da83a045598c4e01000000'/> <target dev='hda' bus='ide'/> <address type='drive' controller='0' bus='0' unit='0'/> </disk> <disk type='file' device='cdrom'> <driver name='qemu' type='raw'/> <source file='/root/debian-501-i386-netinst.iso'/> <target dev='hdc' bus='ide'/> <readonly/> <address type='drive' controller='0' bus='1' unit='0'/> </disk> <controller type='ide' index='0'> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/> </controller> <interface type='bridge'> <!--<mac address='ici il faut une adresse mac unique'/>--> <source bridge='vzbr0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </interface> <serial type='pty'> <target port='0'/> </serial> <console type='pty'> <target type='serial' port='0'/> </console> <input type='tablet' bus='usb'/> <input type='mouse' bus='ps2'/> <graphics type='vnc' port='-1' autoport='yes' keymap='fr'/> <video> <model type='vga' vram='9216' heads='1'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> </video> <memballoon model='virtio'> <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/> </memballoon> </devices> </domain>
- Taper ces commandes pour récupérer les valeurs d'uuid et de mac address, qui sont générées aléatoirement par libvirt lorsqu'on définit une machine virtuelle sans les avoir précisées :
# virsh -c qemu:///system define /cluster_fs/mavm/conf/mavm.xml Domain mavm defined from /cluster_fs/mavm/conf/mavm.xml # virsh -c qemu:///system dumpxml mavm | grep uuid <uuid>b0bc458b-c822-197b-d7a7-e48c88518267</uuid> # virsh -c qemu:///system dumpxml mavm | grep "mac address" <mac address='xx:xx:xx:xx:xx:xx'/> # virsh -c qemu:///system undefine mavm
- et réintégrer ces valeurs aux bons endroits dans le fichier xml, là ou sont déjà présents des commentaires
Installation de l'OS de la machine virtuelle
- Lancer la machine virtuelle
# vzstart.sh mavm
- Lancer virt-manager et récupérer l'affichage. Si l'installation depuis le CDROM ne fonctionne pas, c'est qu'il faut changer l'ordre de recherche des périphériques d'amorçage, de sorte que le CDROM soit avant le disque dur
- Pendant l'installation de l'OS, il faudra veiller à ne pas toucher à la première partition, qui est réservée à la machine hôte, et à utiliser l'espace disponible après la première partition.
- Pendant l'installation d'un OS GNU/Linux, ne pas créer de partition pour le swap. Si davantage de mémoire pour la VM s'avérait nécessaire et que du swap sur l'invité s'avérait être la solution, alors il suffira de créer un fichier de swap dans le système de fichiers invité.
- Une fois l'OS invité installé, si le CDROM n'est plus nécessaire, commenter les lignes correspondantes dans le fichier xml.
Notes spécifiques pour machines KVM windows
L'horloge du système hôte étant en UTC, il faut définir cette clé de la base de registre pour l'indiquer à Windows (pratique…) :
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation] "RealTimeIsUniversal"=dword:00000001
et désactiver la synchro avec un serveur de temps externe.