KVM: ajustements de syntaxe
This commit is contained in:
parent
cf1d0b86f2
commit
0e03ef52b5
58
HowtoKVM.md
58
HowtoKVM.md
|
@ -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.
|
Un hyperviseur KVM doit avoir des CPUs supportant la virtualisation.
|
||||||
|
|
||||||
Cela s'active souvent via le BIOS de la machine.
|
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
|
### 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.
|
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
|
@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
|
### Configuration réseau
|
||||||
|
|
||||||
On conseille l'utilisation du mode **bridge** pour le 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
|
# 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 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
|
### Configuration stockage
|
||||||
|
|
||||||
|
@ -139,9 +139,9 @@ $ virt-install --connect=qemu:///system \
|
||||||
--cdrom=/srv/isos/debian-8.6.0-amd64-netinst.iso
|
--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 :
|
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 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.)
|
* 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 : ???*
|
* Choix processor : Configuration > ne PAS cocher *Copier la configuration CPU de l'hôte* et choisir *Modèle : ???*
|
||||||
* NIC : choisir *Device model : virtio*
|
* 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 :
|
Vous pouvez écrire votre propre fichier de définition XML puis l'injecter :
|
||||||
|
|
||||||
~~~
|
~~~
|
||||||
# virsh define template.xml
|
# virsh define template.xml
|
||||||
# virsh start template
|
# virsh start template
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
|
@ -244,7 +244,7 @@ Création d'une image QCOW2 :
|
||||||
Information sur une image QCOW2 :
|
Information sur une image QCOW2 :
|
||||||
|
|
||||||
~~~
|
~~~
|
||||||
# qemu-img info debian1.qcow2
|
# qemu-img info debian1.qcow2
|
||||||
image: debian1.qcow2
|
image: debian1.qcow2
|
||||||
file format: qcow2
|
file format: qcow2
|
||||||
virtual size: 12G (12884901888 bytes)
|
virtual size: 12G (12884901888 bytes)
|
||||||
|
@ -264,7 +264,7 @@ Convertir une image RAW en QCOW2 :
|
||||||
|
|
||||||
#### Monter une image QCOW2 via qemu-NBD
|
#### 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;
|
# modprobe nbd max_part=16;
|
||||||
|
@ -272,7 +272,7 @@ Convertir une image RAW en QCOW2 :
|
||||||
# partprobe /dev/nbd0;
|
# partprobe /dev/nbd0;
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
/dev/nbd0 est ensuite utilisable pour fdisk :
|
`/dev/nbd0` est ensuite utilisable pour fdisk :
|
||||||
|
|
||||||
~~~
|
~~~
|
||||||
# fdisk /dev/nbd0
|
# fdisk /dev/nbd0
|
||||||
|
@ -329,7 +329,7 @@ Convertir ume image RAW en QCOW2 :
|
||||||
# qemu-img resize host.img +50G
|
# qemu-img resize host.img +50G
|
||||||
Image resized.
|
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
|
# 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+0 records out
|
||||||
0 bytes (0 B) copied, 1.302e-05 s, 0.0 kB/s
|
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 :
|
* Monter l'image et vérifier qu'elle a la bonne taille :
|
||||||
|
|
||||||
~~~
|
~~~
|
||||||
# kpartx -v -a host.img
|
# kpartx -v -a host.img
|
||||||
add map loop0p1 (254:4): 0 314572737 linear /dev/loop0 63
|
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
|
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) :
|
* 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
|
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
|
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
|
# 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 :
|
* Puis démonter l'image :
|
||||||
|
|
||||||
~~~
|
~~~
|
||||||
# kpartx -d host.img
|
# kpartx -d host.img
|
||||||
loop deleted : /dev/loop0
|
loop deleted : /dev/loop0
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
|
@ -518,7 +519,7 @@ Avec libvirt, il suffit d'installer :
|
||||||
# apt install dnsmaq ebtables
|
# 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}
|
~~~{.xml}
|
||||||
<network connections='1'>
|
<network connections='1'>
|
||||||
|
@ -585,8 +586,8 @@ etc.
|
||||||
L'utilisation du format de stockage QCOW2 permet d'avoir des snapshots à chaud !
|
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.
|
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*
|
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) :
|
ou on peut aussi utiliser `virsh` (TODO: exemple de XML pour créer un snapshot) :
|
||||||
|
|
||||||
~~~
|
~~~
|
||||||
# virsh snapshot-list template
|
# virsh snapshot-list template
|
||||||
|
@ -619,9 +620,9 @@ Metadata: yes
|
||||||
snapshot-revert Revert a domain to a snapshot
|
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` :
|
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"
|
# 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
|
$ 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 block
|
||||||
(qemu) info blockstats
|
(qemu) info blockstats
|
||||||
(qemu) info network
|
(qemu) info network
|
||||||
(qemu) info uuid
|
(qemu) info uuid
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
|
@ -834,7 +835,7 @@ La commande **virsh** peut également être utilisée à distance :
|
||||||
|
|
||||||
## Cloner une VM
|
## 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
|
# 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
|
# 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
|
# 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>
|
<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 \
|
# /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
|
-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.
|
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'/>
|
<driver name='qemu' type='raw' cache='none'/>
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
Et désactiver les barrières si Ext4 est utilisé.
|
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.
|
Le scheduler deadline semble également donner les meilleures performances tant sur l'hôte que sur les invités.
|
||||||
|
|
|
@ -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/
|
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
|
ln -s /usr/share/munin/plugins/postgres_cache_ /etc/munin/plugins/postgres_cache_ALL
|
||||||
|
|
Loading…
Reference in a new issue