This shows you the differences between two versions of the page.
saisp:labs:04:contents:01 [2014/01/24 16:01] mihai.carabas [01. Kernel-based Virtual Machine (KVM)] |
saisp:labs:04:contents:01 [2014/03/16 23:55] (current) razvan.deaconescu |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ==== 01. Kernel-based Virtual Machine (KVM) ==== | + | ==== 01. [10p] Investigare LVM ==== |
- | Virtualizarea este folosită pe scară largă în centrele de date întrucât oferă flexibilitate foarte mare în managementul resurselor. Pentru a nu afecta perfomanța, producătorii de procesoare au introdus facilități virtualizare pentru a permite sistemelor de operare să ruleze nemodificate. Entitatea software care folosește aceste facilități se numește **hypervisor**. KVM este un hypervisor ce oferă suport pentru virtualizarea nativă (implementează facilități de virtualizare). În continuare vom prezenta modul de lucru cu soluția implementată de KVM. | + | Dorim să investigăm o configurație existentă LVM. Pentru aceasta pornim mașina virtuală aferentă KVM:<code bash> |
- | + | student@mjolnir:~/saisp$ ./lvm-start-kvm | |
- | Trebuie să verificăm dacă hardware-ul are suport pentru **virtualizare nativă** (mai poartă denumirea și de **extensie de virtualizare**). Numele extensiilor de virtualizare diferă de la un producător la altul astfel: | + | |
- | * INTEL - **vmx** (Virtual Machine eXtensions) | + | |
- | * AMD - **svm** (Secure Virtual Machine) | + | |
- | Pentru a verifica prezența extensiilor de mai sus trebuie să ne uităm în ''/proc/cpuinfo'' dacă câmpul //Flags// conține numele extensiei (**vmx** pentru Intel sau **svm** pentru AMD):<code> | + | |
- | root@saisp:~$ cat /proc/cpuinfo |grep vmx | + | |
- | flags : ... ds_cpl **vmx** smx... | + | |
</code> | </code> | ||
- | + | și ne conectăm peste SSH pentru a lucra în mașina virtuală:<code bash> | |
- | Pentru a folosit KVM trebuie să instalăm pachetul ''qemu-kvm'', **qemu** fiind utilitarul din userspace folosit pentru a porni mașinile virtuale și a transmite parametri doriți hypervisorului:<code> | + | student@mjolnir:~/saisp$ ssh -l root 192.168.0.2 |
- | root@saisp:~# apt-get install qemu-kvm | + | |
- | [...] | + | |
</code> | </code> | ||
- | Înainte de a porni o mașina virtuală bazată pe KVM, trebuie să verificăm dacă modulul de kernel este încărcat:<code> | + | Mașina virtuală conține o configurație LVM; pachetul ''lvm2'', necesar configurării, este instalat. Pentru a o investiga listăm volumele fizice, grupurile de volume și volumele logice folosind, respectiv comenzile ''pvs'', ''vgs'', ''lvs'':<code bash> |
- | root@saisp:~# lsmod|grep kvm | + | root@lvm:~# pvs |
- | kvm_intel 121968 0 | + | PV VG Fmt Attr PSize PFree |
- | kvm 287572 1 kvm_intel | + | /dev/sdb1 azeroth lvm2 a-- 1020.00m 0 |
- | </code> | + | /dev/sdc1 azeroth lvm2 a-- 1020.00m 0 |
- | Observați în acest caz folosirea unei arhitecturi Intel. Pentru fiecare arhitectură există un modul separat. Încărcarea modului de kernel atrage după sine crearea unui device ''/dev/kvm'' prin care se controlează modulul de kernel folosind operații de tip ''ioctl'':<code> | + | root@lvm:~# vgs |
- | root@saisp:~# ls -l /dev/kvm | + | VG #PV #LV #SN Attr VSize VFree |
- | crw-rw---T 1 root kvm 10, 232 Jan 5 21:34 /dev/kvm | + | azeroth 2 3 0 wz--n- 1.99g 0 |
+ | root@lvm:~# lvs | ||
+ | LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert | ||
+ | arathor azeroth -wi-a----- 700.00m | ||
+ | dalaran azeroth -wi-a----- 840.00m | ||
+ | lordaeron azeroth -wi-a----- 500.00m | ||
</code> | </code> | ||
- | Pentru a porni o mașină virtuală vom folosi comanda ''kvm''. Utilizatorul care execută comanda (dorește să pornească o mașină virtuală) trebuie să fie cel privilegiat (''root'') sau să facă parte din grupul ''kvm'':<code> | + | Detalii aflăm folosind comenzile ''pvdisplay'', ''vgdisplay'' și ''lvdisplay'':<code bash> |
- | root@saisp:~# id mihai | + | root@lvm:~# pvdisplay |
- | uid=1001(mihai) gid=1001(mihai) groups=1001(mihai) | + | --- Physical volume --- |
- | root@saisp:~# usermod -G kvm mihai | + | PV Name /dev/sdb1 |
- | root@saisp:~# id mihai | + | [...] |
- | uid=1001(mihai) gid=1001(mihai) groups=1001(mihai),107(kvm) | + | --- Physical volume --- |
- | </code> | + | PV Name /dev/sdc1 |
- | Vom crea o mașină virtuală având 256MB RAM (parametrul ''-m''), 2 procesoare (numărul este de parametrul ''-smp'') și va avea ca dispozitiv de stocare o imagine virtuală denumită ''sda.qcow2'' (mai multe detalii în exercițiul următor), specificată cu parametrul ''-hda'':<code> | + | [...] |
- | root@saisp:~# kvm -hda sda.qcow2 -m 256 -smp 2 | + | root@lvm:~# vgdisplay |
- | </code> | + | --- Volume group --- |
- | În acest moment se va deschide o fereastră în care se va afișa output-ul consolei mașinii virtuale (veți vedea cum bootează). | + | VG Name azeroth |
+ | [...] | ||
+ | root@lvm:~# lvdisplay | ||
+ | --- Logical volume --- | ||
+ | LV Path /dev/azeroth/lordaeron | ||
+ | [...] | ||
- | Opriți rularea mașinii virtuale rulând ''Ctrl+c'' în consola unde ați rulat comanda ''kvm''. Porniți-o din nou cu 4 procesoare și 512MB RAM. | + | --- Logical volume --- |
- | <solution -hidden> | + | LV Path /dev/azeroth/arathor |
- | root@saisp:~# kvm -hda sda.qcow2 -m 512 -smp 4 | + | [...] |
- | </solution | + | |
- | Deschidem o nouă consolă și vom afișa numărul de procese ''kvm'' prezente în sistem:<code> | + | --- Logical volume --- |
- | root@saisp:~# ps aux |grep kvm | + | LV Path /dev/azeroth/dalaran |
- | root 597 0.0 0.0 0 0 ? S< Jan05 0:00 [kvm-irqfd-clean] | + | [...] |
- | root 31046 0.0 0.0 7832 876 pts/1 S+ 16:00 0:00 grep kvm | + | |
</code> | </code> | ||
+ | Observăm că în cadrul infrastructurii LVM există două volume fizice (//physical volumes//): ''/dev/sdb1'' și ''/dev/sdc1''. Aceste două volume fizice sunt angrenate într-un grup de volume denumit ''azeroth'', care este partiționat în trei volume logice denumite ''arathor'', ''dalaran'' și ''lordaeron''. | ||
- | + | Căile către volumele logice sunt, respectiv ''/dev/azeroth/arathor'', ''/dev/azeroth/dalaran'' și ''/dev/azeroth/lordaeron''. Calea către fiecare volum cuprinde numele grupului de volume și apoi numele volumului logic. Acestea sunt, de fapt, link-uri simbolice către fișiere de tip dispozitiv direct din ''/dev'':<code bash> | |
- | * Tutorial - exemplu masina virtuala si porniți-o | + | root@lvm:~# ls -l /dev/azeroth/lordaeron |
- | * modificand diferiti parametri: ram, cpu, parametri) | + | lrwxrwxrwx 1 root root 7 Mar 16 16:57 /dev/azeroth/lordaeron -> ../dm-0 |
- | * pornire masina in background si conectare prin VNC | + | </code> |