Instalace KVM
Konečně se dostáváme k instalaci virtualizace KVM, emulátoru QEMU a souvisejících nástrojů.
Nainstalujeme potřebné balíčky:
# yum install qemu-kvm libvirt libvirt-python libguestfs-tools virt-install # systemctl enable libvirtd && systemctl start libvirtd
Obrazy virtuálních strojů budeme ukládat v nové složce /vms
# mkdir /vms
Přidáme odpovídající kontext pro naši složku, aby SELinux nebyl nespokojený:
# semanage fcontext --add -t virt_image_t '/vms(/.*)?'
Zkontrolujeme:
# semanage fcontext -l | grep virt_image_t /var/lib/imagefactory/images(/.*)? all files system_u:object_r:virt_image_t:s0 /var/lib/libvirt/images(/.*)? all files system_u:object_r:virt_image_t:s0 /vms(/.*)? all files system_u:object_r:virt_image_t:s0
Použijeme změny:
# restorecon -R -v /vms
a ověříme, zda se uplatnily:
# ls -aZ /vms drwxr-xr-x. root root unconfined_u:object_r:virt_image_t:s0 . dr-xr-xr-x. root root system_u:object_r:root_t:s0 ..
Dobře, stáhneme si z internetu ISO obraz operačního systému, který bude nainstalován na virtuálním stroji, například CentOS 7 minimal pro budoucí webový server? Nebo Tails? Kdo ví :)
Vytvoření prvního virtuálního stroje
Po výše uvedených krocích byl na hostitelském systému vytvořen síťový rozhraní virbr0 s IP adresou 192.168.122.1:
# ip addr
Také byla vytvořena virtuální síť default:
# virsh net-list Name State Autostart Persistent ---------------------------------------------------------- default active yes yes
Síť lze upravovat:
# virsh net-edit default <network> <name>default</name> <uuid>745f121b-3c89-1281-a19a-aa62808c4241</uuid> <forward mode="nat"> <bridge delay="0" name="virbr0" stp="on"> <mac address="16:18:00:21:8c:15"> <ip address="192.168.122.1" netmask="255.255.255.0"> <dhcp> <range end="192.168.122.254" start="192.168.122.2"> </range></dhcp> </ip> </mac></bridge></forward></network>
Prozatím nic neměňme a vytvořme virtuální stroj připojený k síti default:
# virt-install --network network=default --name vm1 --ram=2048 --vcpus=1 --disk path=/vms/vm1.img,size=30,format=qcow2 --graphics vnc,password=vm1password --cdrom /vms-iso/CentOS-7-x86_64-Minimal-1503-01.iso --boot cdrom,hd,menu=on
Popis voleb:
--graphics vnc,password=vm1password
Zde zadáváme heslo a možnost připojení k terminálu virtuálního stroje přes VNC. Heslo se může objevit v logách, takže sem nepište nic důležitého.
--network network=default - připojujeme náš virtuální stroj k virtuální síti s názvem default (s ní jsme se již seznámili).
Může být --network bridge:br0, například pokud bychom vytvořili bridge s názvem br0 pro variantu číslo 2.
Výše uvedený příkaz lze zadat najednou, jedním řádkem, jak je to pro vás pohodlnější:
virt-install --network network=default --name vm1 --ram=2048 --vcpus=1 --disk path=/vms/vm1.img,size=30,format=qcow2 --graphics vnc,password=vm1password --cdrom /vms-iso/CentOS-7-x86_64-Minimal-1503-01.iso --boot cdrom,hd,menu=on
Po provedení příkazu můžete vidět zprávu:
WARNING Unable to connect to graphical console: virt-viewer not installed. Please install the 'virt-viewer' package. WARNING No console to launch for the guest, defaulting to --wait -1
To nám nevadí, protože náš hostitelský systém virtuálních strojů stejně nemá grafické prostředí. Aspoň u mě je to tak.
Starting install...
Allocating 'vm1.img'
| 30 GB 00:00:00
Creating domain...
| 0 B 00:00:00
Domain installation still in progress. Waiting for installation to complete.
Trpělivě čekáme. Proces bude chvíli trvat.
Po dokončení příkazu se podívejme na seznam virtuálních strojů:
# virsh list Id Name State ---------------------------------------------------- 2 vm1 running
Virtuální stroje lze spouštět (virsh start vm1), pozastavovat (virsh suspend vm1), obnovovat (virsh resume vm1), vypínat (virsh shutdown vm1) a s nimi dělat mnoho dalších věcí. Takže stroj vm1 je spuštěn (lze ověřit příkazem virsh domstate vm1). Jak se k němu připojit?
Připojení k virtuálnímu stroji přes VNC
Na předchozím kroku jste vytvořili virtuální stroj, přiřadili mu CD-ROM s operačním systémem a co dál? Jak plánujete nainstalovat a nakonfigurovat OS? Ano, existují možnosti. Lze připravit infrastrukturu a nahrávat hotové obrazy atd. Ale my se učíme a nemáme nic jiného než nedávno stažený soubor obrazu disku iso. Ve skutečnosti to není složité. Na předchozím kroku jsme zadali parametr "--graphics vnc,password=vm1password". To znamená, že se můžeme připojit k terminálu (čti - obrazovce) virtuálního stroje přes VNC, například programem TightVNC, a zadat IP adresu hostitele virtuálních strojů a port pro připojení.
Náš virtuální stroj dostal přiřazený port VNC, po připojení k němu uvidíme "obrazovku" virtuálního stroje. Zjistit, který port byl přiřazen konkrétnímu vm1, lze příkazem:
# virsh vncdisplay vm1 127.0.0.1:0
To znamená, že port VNC je 5900+0=5900. Pokud by výsledek byl "127.0.0.1:1", port VNC by byl 5901. A tak dále.
Připojení k portu 5900 musí být provedeno na hostiteli virtuálních strojů. Tento port je otevřen na něm, nikoliv na virtuálním stroji vm1.
Výchoze by hostitel virtuálních strojů (u nás CentOS 7 minimal) neměl umožňovat připojení k jakémukoli portu kromě ssh (22/tcp). Nedoporučuji vám otevírat přístup k portům VNC zvenčí. To není bezpečné. Pro získání přístupu k obrazovce virtuálního stroje z pracovní stanice Windows, na které vše nastavuji, jsem vytvořil tunelování portu v Putty: 5900 -> 127.0.0.1:5900.

Po úspěšném přihlášení přes ssh lze spustit TightVNC a zadat port 127.0.0.1::5900 (pozor na dvojtečku).
Pokud bude po restartu stroje potřeba znovu připojit k němu obraz iso, lze to provést příkazem:
# virsh attach-disk vm1 /vms-iso/CentOS-7-x86_64-Minimal-1503-01.iso hdb --type cdrom --mode readonly
kde hdb je název blokového zařízení CDROM. Tento název lze zjistit zobrazením konfigurace virtuálního stroje (virsh edit vm1).
S virtuálními stroji na hostiteli lze spravovat pomocí konzolové sady virsh. S některými příkazy jste se již seznámili. Napište do konzole:
# virsh help
a uvidíte, kolik všeho lze udělat.
Zapnutí/vypnutí virtuálních strojů
Pokud vytvoříte virtuální stroj a pokusíte se jej vypnout, i když se zobrazí zpráva o úspěšném provedení, stroj se nemusí vypnout:
# virsh domstate vm1 running # virsh shutdown vm1 Domain vm1 is being shutdown # virsh domstate vm1 running
Zde jde o podporu ACPI ze strany virtuálního stroje. Ne ve všech případech virtuální stroj zpracuje signál o vypnutí nebo restartu (virsh shutdown/restart vm1). V této situaci mohou nastat následující možnosti:
Vytažení napájecího kabelu:
# virsh destroy vm1 Domain vm1 destroyed
Dobře víte, k čemu to může vést. Ačkoli na počátečním stupni, dokud není OS nainstalován, se mohou objevit chyby
Pozastavení běhu virtuálního stroje:
virsh suspend vm1
Není vždy nutné vypínat nebo restartovat stroj zvenčí. Pro údržbu může stačit pozastavení. Není to jisté, ale možná.
Zapnutí podpory ACPI ve virtuálním stroji.
Zde mohou existovat různé postupy, například takto (provést ve virtuálním stroji, nikoliv na hostiteli):
yum install acpid chkconfig acpid on service acpid start
Automatické spuštění virtuálních strojů
Aby se při restartu hostitelského systému virtuální stroj vm1 spouštěl automaticky:
# virsh autostart vm1 Domain vm1 marked as autostarted
Vypnout automatické spuštění pro vm1:
# virsh autostart vm1 --disable Domain vm1 unmarked as autostarted
Kontrola síťové aktivity virtuálního stroje KVM
Může být užitečné vyhodnocovat síťovou aktivitu virtuálního stroje – například kolik datového provozu spotřeboval. Může to také pomoci při ladění sítě nebo hledání úniků datového provozu. Například:
# virsh domifstat vm1 vnet0 vnet0 rx_bytes 3063962 vnet0 rx_packets 3412 vnet0 rx_errs 0 vnet0 rx_drop 0 vnet0 tx_bytes 591996 vnet0 tx_packets 1731 vnet0 tx_errs 0 vnet0 tx_drop 0
Tady je vše jasné, kromě toho, kde vzít název adaptéru vnet0. V dumpu konfigurace virtuálního stroje (virsh dumpxml vm1) lze najít sekci network a v ní parametr dev:
<interface type='network'> <mac address='52:54:00:98:6c:e6'/> <source network='default' bridge='virbr0'/> <target dev='vnet0'/> <model type='rtl8139'/> <alias name='net0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </interface>
Připojení a odpojení CD-ROM mechaniky
Připojit k vm3 iso-образ jako cdrom:
# virsh attach-disk vm3 /data/vms-iso/CentOS-7-x86_64-Minimal-1511.iso hda --type cdrom --mode readonly Disk attached successfully
Zde je třeba být opatrný, protože za cestou k iso-souboru na hostiteli následuje určení názvu zařízení cdrom u virtuálního stroje vm3. Pokud si nejste jisti, jaký název zařízení má být uveden (hda, hdb nebo jiný), podívejte se do konfigurace virtuálního stroje:
# virsh edit vm3
Odpojit iso-образ (neodstranit zařízení z hostitele, ale pouze „vyjmout CD z mechaniky“):
# virsh attach-disk vm5 "" hda --type cdrom --mode readonly
