Plná virtualizace s KVM v Debianu
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énomemory
- velikost virtuální paměti v MiBvcpus
- počet procesorů přiřazených virtuálcecdrom
- instalační obraz, ze kterého se bude napoprvé bootovatdisk size
- velikost virtálního disku v GiBnetwork 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říkazulist
- seznam běžících vmlist --all
- vypíše všechny, ne jen běžícístart
- spustí vmkoshutdown
- slušně ukončí běh vmkadestroy
- násilně ukončí vmkodestroy --graceful
- slušně ukončí běh vmkaedit
- 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í vmkaundefine
- smaže vmkoundefine --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 vmkavncdisplay
- 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.