Návod na instalaci prostředí pro plnou virtualizaci pomocí KVM v OS Debian.

Pokud používáme nějaké GUI, můžeme nainstalovat virt-manager a vše si naklikat v něm. Tento návod nepředpokládá žádné GUI, snad krom VNC klienta, a vše si nastavíme ručně.

Pro funkční virtualizaci je nutné povolit v BIOSu podporu virtualizace a také mít procesor s podporou virtualizace.

Nutné balíčky

Návod je pro Debian Stretch (aktální testing). Pro jiné verze je nutné postupovat dle dokumentace.

apt install qemu-kvm libvirt-clients libvirt-daemon libvirt-daemon-system qemu-utils

Uživatelské virtuály

Pokud chceme umožnit uživatelům vytvářet vlastní virtuální stroje, musíme daného uživatele přiřadit do skupin libvirt a libvirt-qemu.

adduser tomas libvirt
adduser tomas libvirt-qemu

Vytváříme nový virtuál

Jde to mnoha způsoby, lze napsat xml definici přímo pro libvirt, já si práci ulehčuji použitím virt-install. Pro každý instalovaný virtál mám skript:

virt-install \
    --virt-type kvm \
    --name vm01 \
    --memory 4096 \
    --vcpus 4 \
    --cdrom /storage/ISO/OS/Debian/debian-8.6.0-amd64-netinst.iso \
    --disk size=64 \
    --network bridge=br0 \
    --graphics vnc,password=xxx,listen=0.0.0.0

kde:

  • name - jméno virtuálky, potom ji budeme ovládat přes toto jméno
  • memory - velikost virtuální paměti v MiB
  • vcpus - počet procesorů přiřazených virtuálce
  • cdrom - instalační obraz, ze kterého se bude napoprvé bootovat
  • disk size - velikost virtálního disku v GiB
  • network bridge - síťový most kam připojit virtální síťovku. Most musí existovat před samotnou instalací vmka. Bridge si lze nastavit třeba v systemd-networkd.
  • graphics - vnc, heslo, a dostupné ze všech sítí

Po spuštění tohoto skriptu se vytvoří nová virtálka a spustí se:

Starting install...
Allocating 'vm01.qcow2'      |  64 GB  00:00:00
Creating domain...           |    0 B  00:00:01
Domain installation still in progress. Waiting for installation to complete.

A můžeme se připojit na vnc (hostname:5900). VNC display zjistíme voláním:

virsh vncdisplay vm01
:1

Ovládání virtuálky

Nechci tady přepisovat celý manuál příkazu virsh , to si každý může přečíst. Pomocí virsh spustíme ovládací prostředí. Prostředí virsh umí doplňování pomocí tabů, což je velmi příjemné.

  • help commnad - zobrazí nápovědu k příkazu
  • list - seznam běžících vm
  • list --all - vypíše všechny, ne jen běžící
  • start - spustí vmko
  • shutdown - slušně ukončí běh vmka
  • destroy - násilně ukončí vmko
  • destroy --graceful - slušně ukončí běh vmka
  • edit - otevře editor s xml definicí vmka - běžně není potřeba do definice zasahovat, lze takto upravit cokoliv. Hodí se pro rychlé zjištění vlastností vmka
  • undefine - smaže vmko
  • undefine --remove-all-storage - smaže vmko včetně souborů virtuálních disků
  • autostart - vmko se bude spouštět po startu stroje (při startu služby libvirtd)
  • autostart --disable - vypne autostart vmka
  • vncdisplay - zobrazí port vnc daného vmka

Tohle jsou příkazy, které používám běžně.

Tohle je vlastně vše. Jednoduché vytvoření, jednoduchá správa, pokud necheme zacházet do složitostí, CPU výkon je díky podpoře virtualizace v procesorech zcela srovnatelný s během na fyzickém stroji, síťovky na bridge jsou typu virtio (a tváří se jako 10Gbe), disky jsou tak výkoné, jako hw.

Disky se (výše uvedeným návodem) vytvářejí jako typ QCOW2, který umí snapshoty apod. Pokud cheme provozovat vmka náročná na IO, vyplatí se disky vytvářet jako LV v LVM. Je to nejrychlejší možný způsob, jak dostat disk do vmka a současně je velmi flexibilní. LVM umí snapshoty také, rozšiřovat a vytvářet nová LV je snadné. Co se týče disků v QCOW2, nemá smysl je umisťovat na BTRFS (tedy mít COW nad COW - to je potom velmi pomalé), tady lze s výhodou použít například XFS. Nebo lze mít RAW disk na BTRFS a vytvářet snapshoty tam.