Virtualizácia
Tomáš Jašek, xjasek@fi.muni.cz
Obsah
Virtualizácia
- ilúzia vytvárania kópií fyzického zdroja
- užívateľ dostane jednu alebo viac kópií
- z virtuálnych zdrojov vznikne celý virtuálny počítač
- hypervisor = software, ktorý umožňuje vytvárať a spúšťať virtuálne stroje
Prečo virtualizovať?
- Šetrenie zdrojov: namiesto toho, aby každý užívateľ vlastnil fyzický stroj využije viacej užívateľov rovnaký stroj
- Replikovateľnosť: vytvorenie šablóny pre virtuálny stroj, predinštalovaný OS a predinštalovaný software
- Rýchlejšie zálohovanie a obnova dát
- Silnejšia izolácia od ostatných užívateľov stroja
- Spoľahlivosť: pri výpadku hardware je možné virtuálny stroj presunúť na iný hardware
- Jednoduchšia správa: napr. pri probléme so sieťou správca nekontroluje fyzický komponent, ale virtuálny, ktorý je vždy možné spravovať vzdialene
Úrovne virtualizácie
Na úrovni OS
- jadro umožní existenciu viacerych uživateľských priestorov
- programy v kontajneroch využívajú OS fyzického stroja
Typické vlastnosti
- zmena koreňového adresára
- oddelenie zoznamu užívateľov a zoznamu skupín
- rozdielny root užívateľ
- oddelený strom procesov
- obmedzenie prístupu k hardware
- vlastná IP adresa a sieťové rozhranie
- izolácia procesov
Príklady
- chroot: jedine zmena koreňového adresára pre daný proces, je možné sa z neho dostať
- FreeBSD Jail - systémové nastavenia, strom procesov, oddelené /proc a /sys, vlastná IP pre jail, súborový systém, možnosť vnoreného jailu, neni možné sa z neho dostať
- OpenVZ - podobné funkcie ako jail
- LXC - izolácia podobne ako v jail, možnosť vytvoriť (ne)privilegovaný kontajner, využíva namespaces a cgroups z jadra
- Docker - balíčkovanie software do kontajnerov, ľahšia distribúcia, silná izolácia
Výhody:
- menšia náročnosť na systémové zdroje
- možnosť vymeniť knižnice za iné verzie
- možnosť obmedziť aj program bežiaci s právami root
- vysoký výkon
Nevýhody:
- neni možné využiť iný operačný systém než je na fyzickom stroji
Emulácia HW
- na úrovni hardware
- na fyzickom stroji beží tzv. emulátor
- emulovať je možné akýkoľvek hardware
- flexibilnejšia než kontajnery
- najrozšírenejší prístup: dynamická kompilácia
Typické vlastnosti
- sprístupnenie fyzického HW pre virtuálny systém
- prerušenie a pokračovanie behu virtuálneho stroja
- uloženie komplétneho stavu (disku+pamäti) virtuálneho stroja
- virtuálny HW - napr. virtuálna sieťová karta, ktorá používa na pozadí sieťovú kartu fyzického stroja
- reštartovanie, vypnutie, hybernácia virtuálneho stroja
Príklady
Výhody
- možnosť emulovať úplne iný systém
- možnosť emulovať úplne iný procesor
- možnosť emulovať hardware ktorý neni fyzicky dostupný
Nevýhody
- nižší výkon emulovaného systému
Plná virtualizácia
- virtuálne prostredie sa čo najviac podobá fyzickému
- sprostredkovaný prístup k hardware
- virtuálny OS nedokáže spoznať, že beží vo virtuálnom prostredí
Príklady
Výhody
- programy sú nezávislé na konkrétnom technickom vybavení počítača
- nevyžaduje úpravu operačného systému
Nevýhody
Paravirtualizácia
- virtuálny počítač môže použiť fyzický hardware ak je dostupný
- virtuálny OS vie, že beží vo virtuálnom prostredí
- efektívna komunikácia OS s hypervisorom vyžaduje úpravy OS
Príklady
Výhody
- pri zhodnom hardware je výpočetný výkon vysoký
Nevýhody
- nutná podpora zo strany procesoru aj OS
Systémy pre správu virtuálnych strojov
libvirt
- jednotné rozhranie k rôznym hypervisorom (LXC, OpenVZ, QEMU, VirtualBox, VMWare, Xen, ...)
- XML definícia domény (tj. virtuálneho stroja), siete, úložiska, ...
- podporuje zálohovanie, migráciu
Inštalácia
- nainštalovať balíčky
libvirt
a qemu
- nastaviť užívateľa a skupinu pod ktorými bude bežať qemu v
/etc/libvirt/qemu.conf
(viz príklad nižšie)
- zapnúť službu
libvirtd
Fragment /etc/libvirt/qemu.conf
:
user = "root"
group = "root"
Tieto riadky sú štandardne v súbore ako komentár.
Vytvorenie virtuálneho stroja
- uložíme XML príklad nižšie do súboru protoXY.xml
- vytvorenie:
virsh define protoXY.xml
(v závislosti od konfigurácie môže vyžadovať práva root)
- spustenie:
virsh start QEMU-fedora-i686
(v závislosti od konfigurácie môže vyžadovať práva root)
Vytvorený virtuálny stroj môžeme zastaviť a odstrániť príkazom virsh undefine QEMU-fedora-i686
. Príkaz odstráni stroj len z libvirt; image disku v súbore zostáva nedotknutý.
Príklad konfiguračného súboru pre doménu (prevzatý z Dokumentácie libvirt):
<domain type='qemu'>
<name>QEMU-fedora-i686</name>
<uuid>c7a5fdbd-cdaf-9455-926a-d65c16db1809</uuid>
<memory>219200</memory>
<currentMemory>219200</currentMemory>
<vcpu>2</vcpu>
<os>
<type arch='i686' machine='pc'>hvm</type>
<boot dev='cdrom'/>
</os>
<devices>
<emulator>/usr/bin/qemu-system-x86_64</emulator>
<disk type='file' device='cdrom'>
<source file='/home/user/boot.iso'/>
<target dev='hdc'/>
<readonly/>
</disk>
<disk type='file' device='disk'>
<source file='/home/user/fedora.img'/>
<target dev='hda'/>
</disk>
<interface type='network'>
<source network='default'/>
</interface>
<graphics type='vnc' port='-1'/>
</devices>
</domain>
Migrácia virtuálneho stroja
- možnosť nastaviť maximálny downtime pre virtuálny stroj počas migrácie
- transport: hypervisor alebo tunelovanie cez libvirt
- kontrola komunikácie:
- managed direct: klient sprostredkúva migráciu, source a dest nekomunikujú
- managed p2p: klient iniciuje migráciu, source ju riadi
- unmanaged direct: libvirt iniciuje a deleguje na hypervisor
- možnosť šifrovať prenos dát
Obrázky
Virtualizácia I/O zariadení
Možné varianty:
- emulácia: hypervisor interpretuje požiadavky na hardware
- priame sprístupnenie fyzického hardware: virtuálny stroj komunikuje priamo s fyzickým hardware
Sprístupnenie fyzického hardware
USB hardware je možné sprístupniť od verzie 0.4.4, PCI a SCSI je možné sprístupníť jedine pri použití KVM.
<devices>
<hostdev mode='subsystem' type='usb'>
<source startupPolicy='optional'>
<vendor id='0x1234'/>
<product id='0xbeef'/>
</source>
<boot order='2'/>
</hostdev>
<hostdev mode='subsystem' type='pci' managed='yes'>
<source>
<address domain='0x0000' bus='0x06' slot='0x02' function='0x0'/>
</source>
<boot order='1'/>
<rom bar='on' file='/etc/fake/boot.bin'/>
</hostdev>
</devices>
(Príklad prevzatý z Dokumentácie libvirt)
Pripojenie CD-ROM s ISO
<disk type='file' device='cdrom'>
<source file='/home/user/boot.iso'/>
<target dev='hdc'/>
<readonly/>
</disk>
Pripojenie obrazu disku do libvirt
Do konfiguračného XML-ka domény pridáme túto sekciu (samozrejme cestu k obrazu disku upravíme podľa potreby):
<disk type='file' device='disk'>
<source file='/root/protoXY_beta.img'/>
<target dev='hda'/>
</disk>
RAW
- rovnako veľký súbor ako disk
- bez kompresie a šifrovania
- priame uloženie obsahu blokového zariadenia
- je možné priamo "napáliť" (
dd
) na fyzické médium
QCOW2
- kompresia pomocou zlib
- aes/luks šifrovanie
- viac snapshotov v jednom súbore
- umožňuje uložiť bitmapy týkajúce sa snapshotov
- horší výkon oproti raw, ale šetrí miesto
VDI
- používa ho Oracle VirtualBox
- dynamická alokácia blokov (podobne ako QCOW2)
VMDK
- rozdeľuje disk do 2GB súborov
- vhodný pre VMware
- začal ako uzavretý, teraz je otvorený
- rôzne možnosti alokácie blokov (pri prvom prístupe vs pri vytvorení)
Konverzia medzi formátmi
- VBoxManage:
VBoxManage clonehd source.vdi destination.vmdk --format VMDK
- qemu-img:
qemu-img convert -O vdi source.qcow2 destination.vdi
Príklady prevzaté z ArchWiki článku o VirtualBoxe
Vytvorenie nového disku pomocou qemu-img
qemu-img create -f raw protoXY_beta.img 4G
Pripojenie virtuálnych strojov do siete
Defaultné nastavenie QEMU
- rýchle riešenie na prístup k Internetu
- virtuálna sieťová karta Intel e1000PCI
- virtuálny DHCP server
- virtuálny DNS server
- virtuálna SAMBA ak beží aj na fyzickom systéme
Možnosť presmerovať porty
- presmerovanie portov virtuálneho systému na porty fyzického systému
- ľahké zviditeľnenie služieb virtuálneho systému do vonkajšej siete
- vhodné jedine pre TCP a UDP
Point-to-point spojenie systémov
- na virtuálnom systéme sa emuluje sieťové rozhranie typu ethernet
- fyzický systém má rozhranie typu TAP, ktoré preposiela pakety do QEMU
- QEMU posiela pakety poslané na ethernetové rozhranie virtuálneho stroja na TAP rozhranie
- umožňuje fyzickému systému kontrolovať všetku komunikáciu virtuálneho systému
Ako na to s libvirt
- Pridať sekciu
<interface>
(príklad nižšie) do konfiguračného XML-ka domény
- Pridať si na fyzický systém skript, ktorý nastavuje IP adresu rozhrania a smerovacie pravidlá pre TAP rozhranie (minimálny príklad nižšie)
- Na virtuálnom systéme nastaviť statickú IP pre rozhranie a smerovacie pravidlá
interface sekcia pre XML
<interface type='ethernet'>
<target dev='mytap1' />
<model type='virtio'/>
<script path="/root/qemu-ifup" />
</interface>
skript na nastavovanie IP adresy
#!/bin/bash
iface=mytap1
addr=10.0.0.1
prefix=24
ip addr add $addr/$prefix broadcast + dev $iface
POZOR!
- názov rozhrania
mytap1
musí byť rovnaký ako názov rozhrania v interface sekcii v XML
- tento skript musí byť umiestnený v
/root/qemu-ifup
Literatura