Wirtualizacja to uruchamianie wielu niezależnych wirtualnych komputerów na jednym fizycznym komputerze. W procesie wirtualizacji zasoby fizycznego komputera, jego sprzęt taki jak procesory, pamięć, dyski, napędy optyczne, karty sieciowe rozdzielane są na wiele komputerów wirtualnych. Wszystkie komputery wirtualne, ich systemy operacyjne i usługi na nich uruchomione działają równolegle w całkowitej izolacji. Komputer fizyczny, który jest gospodarzem dla komputerów wirtualnych nazywany jest maszyną gospodarza (host mashine). Komputer wirtualny uruchomiony na maszynie hosta nazywany jest wirtualną maszyną (virtual machine), a system operacyjny zainstalowany na maszynie wirtualnej nazywany jest gościem (guest). Oprogramowanie do wirtualizacji, zainstalowane bezpośrednio na fizycznej maszynie określane jest mianem hyperwizora (hypervisor). Przykładem takiego hyperwizora jest KVM (Kernel-based Virtual Machine), który jest częścią jądra Linuxa i realizuje tzw. pełną wirtualizację. KVM przeprowadza mapowanie pomiędzy fizycznymi procesorami maszyny gospodarza a wirtualnymi procesorami, przydzielonymi wirtualnym maszynami. Zapewnia tym samym sprzętową akcelerację dla maszyn wirtualnych i wzrost ich wydajności. Infrastrukturę wirtualizacyjną realizuje KVM, a inne oprogramowanie nazywane szybkim emulatorem (Quick Emulator – QUEMU) robi użytek z mapowania realizowanego przez KVM. QEMU przechwytuje instrukcje systemu gościa przeznaczone do wirtualnego procesora i uruchamia je na fizycznym procesorze wykorzystując wspomniane wcześniej mapowanie. Takie rozwiązanie powoduje, że aplikacje uruchamiane na wirtualnych maszynach mają taki sami poziom wydajności jak aplikacje uruchamiane normalnie na maszynach fizycznych.
Trzeba tutaj też wspomnieć, że istnieje coś takiego jak parawirtualizacja, która zapewnia większą wydajność niż pełną wirtualizacja. Parawirtualizacja wymaga jednak specjalnie zmodyfikowanego systemu operacyjnego gościa. Ten typ wirtualizacji realizuje XEN.
Instalacja KVM.
Sprawdzamy czy maszyna hosta obsługuje wirtualizację:
1 |
# lscpu | grep Virtualization Virtualization: VT-x |
lub
1 2 |
# grep vmx /proc/cpuinfo flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl<strong> vmx</strong> smx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx lahf_lm ida arat epb xsaveopt pln pts dtherm tpr_shadow vnmi flexpriority ept vpid |
Powyższe wyniki wskazują, że maszyna obsługuje wirtualizację.
lub
1 |
# egrep -c '(vmx|svm)' /proc/cpuinfo 2 |
Wynik nie wynosi 0 a więc maszyna obsługuje wirtualizację również wg tej komendy.
Instalacja niezbędnego oprogramowania:
1 |
# yum install kvm libvirt libvirt-daemon-kvm virt-install qemu-kvm |
Jeżeli będziemy chcieli zarządzać wirtualkami w środowisko graficznym to instalujemy dodatkowo:
1 |
# yum install virt-manager xauth dejavu-lgc-sans-fonts |
Zakończenie i sprawdzenie instalacji.
Po instalacji sprawdzamy czy niezbędne moduły kvm zostały wczytane:
1 |
# lsmod | grep kvm |
Komenda nie zwraca żadnego wyniku, moduły nie zostały wczytane a więc:
1 2 3 |
# modprobe kvm # lsmod | grep kvm kvm 554609 0 irqbypass 13503 1 kvm |
Moduły zostały wczytane.
Sprawdzamy czy demon libvirtd działa:
1 2 3 4 5 6 7 8 9 10 11 |
# systemctl status -l libvirtd ● libvirtd.service - Virtualization daemon Loaded: loaded (/usr/lib/systemd/system/libvirtd.service; enabled; vendor preset: enabled) Active: active (running) since wto 2017-05-16 23:27:08 CEST; 17h ago Docs: man:libvirtd(8) http://libvirt.org Main PID: 966 (libvirtd) CGroup: /system.slice/libvirtd.service ├─ 966 /usr/sbin/libvirtd ├─2681 /sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_leaseshelper └─2682 /sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_leaseshelper |
Sprawdzamy czy możemy podłączyć się do KVM wydają prostą komendę o wyświetlenie listy systemów:
1 2 |
# virsh -c qemu:///system list Identyfikator Nazwa Stan ---------------------------------------------------- |
Wszystko w porządku, możemy się podłączyć.
Interfejs i switch wirtualnej sieci.
Switch wirtualnej sieci to softwarowy switch, który umożliwia wirtualnym maszynom komunikację między sobą i z Internetem. Maszyna gospodarza i wirtualne maszyny po uruchomieniu demona libvirtd widzą tego switcha jako interfejs virbr0, z domyślnym adresem IP: 192.168.122.1:
1 2 3 4 5 |
# ip addr show virbr0 4: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN qlen 1000 link/ether 52:54:00:1d:e6:08 brd ff:ff:ff:ff:ff:ff inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0 valid_lft forever preferred_lft forever |
Interfejs virbr0 domyślnie pracuje w trybie NAT z maskaradą IP. Może też pracować w trybie izolowanym (isolated) i routowanym (routed). W trybie izolowanym maszyny wirtualne nie mogą komunikować się ze światem zewnętrznym. W trybie routowanym maszyny komunikują się z Internetem bezpośrednio (bez NAT).
Storage pool.
Storage pool to obszar na dysku używany do dostarczania przestrzeni magazynowej maszynom wirtualnym. Tworzony i zarządzany jest przez narzędzia libvirtool i może być używany przez wiele maszyn wirtualnych w jednym czasie. Storage pool może być pojedynczym plikiem w określonym katalogu lub może być systemem plików na partycji, logicznym woluminie lub całym dysku. Może być też zlokalizowany na zdalnym systemie i być dostępny przez iSCSI lub NFS. Uruchomiony storage pool można podzielić na jeden lub więcej woluminów i przydzielić konkretnym maszynom wirtualnym jako obszar pod dyski.
Red Hat rekomenduje aby używać katalogu /var/lib/libvirt/images
do składowania wirtualnych dysków używanych przez wirtualne maszyny. W katalogu tym można również umieszczać pliki ISO z systemami, które będziemy instalować na maszynach wirtualnych. Katalog ten jest prekonfigurowany do użycia z SELinux-em, inna lokalizacja będzie wymagała specjalnej polityki dla SELinux-a. Jeżeli chcemy przeznaczyć pod wirtualizację katalog np.: /vm
to:
1 2 |
# semanage fcontext -a -t virt_image_t "/vm(/.*)?" # restorecon -R /v |
Instalacja wirtualnej maszyny przy użyciu CLI.
Do instalacji systemów na maszynach wirtualnych służy komenda virt-install. Wspiera ona instalacje ze źródeł lokalnych i zdalnych (NFS, HTTP, FTP), a także nienadzorowane instalacje kickstart.
Sposób użycia komendy z minimalnymi opcjami:
1 2 3 |
# virt-install --name=centos7 --memory=1024 --vcpus=2 \ --disk path=/var/lib/libvirt/images/centos.img,size=10 \ --location=/var/lib/libvirt/images/CentOS-7.0-1406-x86_64-Minimal.iso |
Opcja | Opis |
--name |
Nazwa wirtualnej maszyny. |
--memory |
Pamięć w MiB dla maszyny wirtualnej. |
--vcpus |
Ilość wirtualnych procesorów dla vm. |
--disk path/name |
Ścieżka do magazynu dla obrazu vm. Może być także nazwa puli lub woluminu. |
--location |
Położenie lokalne lub zdalne obrazu płyty instalacyjnej z systemem. |
-x |
Dodatkowe argumenty do przekazania instalatorowi (Anaconda), np. aby podać położenie pliku konfiguracyjnego kickstart jeżeli jest taka potrzeba. |
Pełną listę opcji można uzyskać z manuala systemowego.
Warto skorzystać także z opcji –os-variant. Listę systemów operacyjnych obsługiwanych przez virt-install możemy zobaczyć stosując komendę:
1 |
# osinfo-query os |
Zarządzanie i monitorowanie wirtualnych maszyn przez CLI.
virsh to komenda, która służy do zarządzania vm przez CLI
1 2 3 4 5 6 7 8 9 10 |
# virsh Witaj w virsh, interaktywnym terminalu wirtualizacji. Należy podać: "help", aby uzyskać pomoc o poleceniach "quit", aby zakończyć virsh # list --all Identyfikator Nazwa Stan ---------------------------------------------------- centos7 wyłączone |
Listę wszystkich opcji znajdziemy w manualu systemowym.
Aby podłączyć się w środowisku tekstowym do wymienionej wyżej wirtualnej maszyny o nazwie “centos7” można skorzystać z opcji console komendy virsh:
1 2 3 4 5 6 7 8 |
# virsh console sander-vm1 Connected to domain sander-vm1 Escape character is ^] CentOS Linux 7 (Core) Kernel 3.10.0-123.el7.x86_64 on an x86_64 server2 login: |
Instalacja i zarządzanie kvm w środowisku graficznym.
Najprościej wirtualnymi maszynami w środowisku KVM zarządzać korzystając z aplikacji virt-manager.