KVM: ajustements de syntaxe

This commit is contained in:
Jérémy Lecour 2016-12-28 16:50:24 +01:00 committed by Jérémy Lecour
parent cf1d0b86f2
commit 0e03ef52b5
2 changed files with 32 additions and 28 deletions

View file

@ -67,7 +67,7 @@ Un hyperviseur KVM doit avoir des CPUs supportant la virtualisation, une bonne q
Un hyperviseur KVM doit avoir des CPUs supportant la virtualisation.
Cela s'active souvent via le BIOS de la machine.
Si ce n'est pas activé, vous aurez une erreur *KVM: disabled by BIOS*
Si ce n'est pas activé, vous aurez une erreur `KVM: disabled by BIOS`
### Configuration mémoire
@ -75,7 +75,7 @@ On conseille d'avoir une certaine marge de RAM par rapport à la somme de la mé
On conseille également de configurer **au moins 10 Go de swap sur l'hyperviseur** afin d'éviter que le mécanisme *Out-Of-Memory Killer* ne se déclenche au moindre pic de mémoire.
Enfin, on conseille d'ajuster le paramètre *oom_score_adj* entre les machines critiques et non critiques :
Enfin, on conseille d'ajuster le paramètre `oom_score_adj` entre les machines critiques et non critiques :
~~~
@hourly test -s /var/run/libvirt/qemu/VM-non-critique.pid && echo '800' > /proc/$(cat /var/run/libvirt/qemu/VM-non-critique.pid)/oom_score_adj
@ -85,7 +85,7 @@ Enfin, on conseille d'ajuster le paramètre *oom_score_adj* entre les machines c
### Configuration réseau
On conseille l'utilisation du mode **bridge** pour le réseau.
On crée un bridge _br0_ liée à l'interface _eth0_ :
On crée un bridge `br0` liée à l'interface `eth0` :
~~~
# brctl addbr br0
@ -107,9 +107,9 @@ iface br0 inet static
*Note 1* : il est nécessaire de désactiver le multicast_snooping pour assurer un bon fonctionnement de l'IPv6
*Note 2* : il est nécessaire de commenter *source-directory /etc/network/interfaces.d* car [cela fait boguer libvirt](http://bugs.debian.org/740114)
*Note 2* : il est nécessaire de commenter `source-directory /etc/network/interfaces.d` car [cela fait boguer libvirt](http://bugs.debian.org/740114)
/!\\ : s'assurer d'avoir bien installé _bridge-utils_ et configuré le firewall avant de redémarrer
/!\\ : s'assurer d'avoir bien installé **bridge-utils** et configuré le firewall avant de redémarrer
### Configuration stockage
@ -139,9 +139,9 @@ $ virt-install --connect=qemu:///system \
--cdrom=/srv/isos/debian-8.6.0-amd64-netinst.iso
~~~
*Note* : si besoin de performance, on pourra mettre *cache=writeback*
*Note* : si besoin de performance, on pourra mettre `cache=writeback`
*TODO* : à voir la valeur de --cpu=???
*TODO* : à voir la valeur de `--cpu`
On peut ensuite se connecter en VNC via l'hyperviseur et réaliser l'installation :
@ -157,7 +157,7 @@ Certes, l'installation est plus conviviale (car graphique) mais :
* les options disponibles sont limitées (impossible de sélectionner un volume DRBD par exemple)
* les choix réalisés par défaut sont incorrects (ajout de périphériques Tablette, Video QXL, USB etc.)
Si vous utilisez tout de même _virt-manager_, la démarche est similaire à _virt-install_, on choisira bien les options suivantes :
Si vous utilisez tout de même `virt-manager`, la démarche est similaire à v`irt-install`, on choisira bien les options suivantes :
* Choix processor : Configuration > ne PAS cocher *Copier la configuration CPU de l'hôte* et choisir *Modèle : ???*
* NIC : choisir *Device model : virtio*
@ -172,7 +172,7 @@ Si vous utilisez tout de même _virt-manager_, la démarche est similaire à _vi
Vous pouvez écrire votre propre fichier de définition XML puis l'injecter :
~~~
# virsh define template.xml
# virsh define template.xml
# virsh start template
~~~
@ -244,7 +244,7 @@ Création d'une image QCOW2 :
Information sur une image QCOW2 :
~~~
# qemu-img info debian1.qcow2
# qemu-img info debian1.qcow2
image: debian1.qcow2
file format: qcow2
virtual size: 12G (12884901888 bytes)
@ -264,7 +264,7 @@ Convertir une image RAW en QCOW2 :
#### Monter une image QCOW2 via qemu-NBD
*qemu-nbd* permet de créer un point de montage NBD (Network Block Device) :
`qemu-nbd` permet de créer un point de montage NBD (Network Block Device) :
~~~
# modprobe nbd max_part=16;
@ -272,7 +272,7 @@ Convertir une image RAW en QCOW2 :
# partprobe /dev/nbd0;
~~~
/dev/nbd0 est ensuite utilisable pour fdisk :
`/dev/nbd0` est ensuite utilisable pour fdisk :
~~~
# fdisk /dev/nbd0
@ -329,7 +329,7 @@ Convertir ume image RAW en QCOW2 :
# qemu-img resize host.img +50G
Image resized.
~~~
ou on peut utiliser _dd_, exemple pour une taille finale de 80G :
ou on peut utiliser `dd`, exemple pour une taille finale de 80G :
~~~
# dd if=/dev/zero of=host.img seek=80G count=0 bs=1
@ -337,12 +337,13 @@ ou on peut utiliser _dd_, exemple pour une taille finale de 80G :
0+0 records out
0 bytes (0 B) copied, 1.302e-05 s, 0.0 kB/s
~~~
* Monter l'image et vérifier qu'elle a la bonne taille :
~~~
# kpartx -v -a host.img
add map loop0p1 (254:4): 0 314572737 linear /dev/loop0 63
# fdisk -l /dev/loop0
# fdisk -l /dev/loop0
Disk /dev/loop0: 161.1 GB, 161061273600 bytes
[…]
@ -360,13 +361,13 @@ Disk /dev/loop0: 161.1 GB, 161061273600 bytes
* Démonter et remonter l'image (un partprobe ne suffit visiblement pas pour détecter la nouvelle taille de la partition) :
~~~
# kpartx -d host.img
# kpartx -d host.img
loop deleted : /dev/loop0
# kpartx -v -a host.img
# kpartx -v -a host.img
add map loop0p1 (254:4): 0 314572737 linear /dev/loop0 63
~~~
* Lancer un fsck puis un resize2fs pour redimensionner le système de fichiers :
* Lancer un `fsck` puis un `resize2fs` pour redimensionner le système de fichiers :
~~~
# e2fsck -f /dev/mapper/loop0p1
@ -395,7 +396,7 @@ The filesystem on /dev/mapper/loop0p1 is now 39321592 blocks long.
* Puis démonter l'image :
~~~
# kpartx -d host.img
# kpartx -d host.img
loop deleted : /dev/loop0
~~~
@ -518,7 +519,7 @@ Avec libvirt, il suffit d'installer :
# apt install dnsmaq ebtables
~~~
Et l'on peut configurer avec un réseau NAT avec _virt-manager_ ou `virsh net-create` et un fichier XML du type :
Et l'on peut configurer avec un réseau NAT avec `virt-manager` ou `virsh net-create` et un fichier XML du type :
~~~{.xml}
<network connections='1'>
@ -585,8 +586,8 @@ etc.
L'utilisation du format de stockage QCOW2 permet d'avoir des snapshots à chaud !
On peut créer plusieurs snapshots de l'état disque/mémoire, et restaurer en quelques secondes.
Avec libvirt, création/restauration/suppression de snapshot se gère de façon conviviale avec *virt-manager*
ou on peut aussi utiliser _virsh_ (TODO: exemple de XML pour créer un snapshot) :
Avec libvirt, création/restauration/suppression de snapshot se gère de façon conviviale avec `virt-manager`
ou on peut aussi utiliser `virsh` (TODO: exemple de XML pour créer un snapshot) :
~~~
# virsh snapshot-list template
@ -619,9 +620,9 @@ Metadata: yes
snapshot-revert Revert a domain to a snapshot
~~~
On peut gérer les snapshots via le [Mode Monitor](#mode-monitor) et les commandes *savevm*/*loadvm*/*info snapshots*.
On peut gérer les snapshots via le [Mode Monitor](#mode-monitor) et les commandes `savevm`, `loadvm`, `info snapshots`.
### Options -loadvm / -snapshot (non gérées avec libvirt)
### Options -loadvm / -snapshot (non gérées avec libvirt)
On peut démarrer directement sur un snapshot *s0* avec l'option `-loadvm` :
@ -683,7 +684,7 @@ _libvirt_ crée automatiquement un _mode monitor_ qu'il utilise (donc non access
# virsh qemu-monitor-command <vm-name> --hmp "info block"
~~~
On peut aussi créer un _mode monitor_ manuellement, qui sera accessible via _telnet_ :
On peut aussi créer un _mode monitor_ manuellement, qui sera accessible via `telnet` :
~~~
$ kvm […] -monitor tcp:127.0.0.1:<port monitor>,server,nowait
@ -703,7 +704,7 @@ $ echo system_powerdown | nc 127.0.0.1 <port monitor>
~~~
(qemu) info block
(qemu) info blockstats
(qemu) info network
(qemu) info network
(qemu) info uuid
~~~
@ -834,7 +835,7 @@ La commande **virsh** peut également être utilisée à distance :
## Cloner une VM
Via clic-droit sur _virt-manager_ ou en CLI :
Via clic-droit sur _virt-manager_ ou en CLI :
~~~
# virt-clone --original <mytemplate-domainame> --name <newmachine> --file <newmachine>.img
@ -979,8 +980,10 @@ Deux solutions, utiliser eth1 au lieu de eth0, ou corriger /etc/udev/rules.d/z25
~~~
# qemu-img create -f qcow2 debian1.qcow2 20G
# kvm -hda debian1.qcow2 -cdrom debian-amd64-netinst.iso -boot d -m 512 -net nic,macaddr=<mac_address> -net tap,script=/etc/qemu-ifup -vnc :1 -k fr
<installation via VNC 127.0.0.1:5901 puis boot final>
# /usr/bin/screen -S debian1 -d -m kvm -hda debian1.qcow2 -m 512 -net nic,macaddr=<mac_address> -net tap,script=/etc/qemu-ifup \
-curses -k fr -monitor tcp:127.0.0.1:<port>,server,nowait
~~~
@ -1024,11 +1027,12 @@ Il suffit ensuite de la retirer du bridge :
Utiliser autant que possible les drivers virtio (disque et réseau) sur les invités le supportant.
Dans le cas d'un hyperviseur avec une carte RAID hardware disposant d'un cache avec batterie, créer les machines avec l'option "cache=none" :
Dans le cas d'un hyperviseur avec une carte RAID hardware disposant d'un cache avec batterie, créer les machines avec l'option `cache=none` :
~~~
<driver name='qemu' type='raw' cache='none'/>
~~~
Et désactiver les barrières si Ext4 est utilisé.
Le scheduler deadline semble également donner les meilleures performances tant sur l'hôte que sur les invités.

View file

@ -234,7 +234,7 @@ ln -s /usr/share/munin/plugins/postgres_users /etc/munin/plugins/
ln -s /usr/share/munin/plugins/postgres_xlog /etc/munin/plugins/
~~~
Pour les plugins wildcard finissant par `_` ajoutez `ALL` pour monitorer toutes les BDD :
Pour les plugins wildcard finissant par _ ajoutez `ALL` pour monitorer toutes les BDD :
~~~
ln -s /usr/share/munin/plugins/postgres_cache_ /etc/munin/plugins/postgres_cache_ALL