Differences

This shows you the differences between two versions of the page.

Link to this comparison view

saisp:labs:04:contents:01 [2014/01/24 18:57]
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 KVMtrebuie 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 IntelPentru 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 
 +  [...]
 </​code>​ </​code>​
  
-Observați ​că fiecare nou procesor adăugat ​în mașina virtuală este reprezentat de un proces în sistemul gazdă+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''​.
- +
-De cele mai multe ori nu dorim deschiderea unei console în sesiunea curentă ci dorim rularea mașinii în background, iar la nevoie să putem accesa consola acesteia. Acest lucru este posibil folosind parametrul ​''​-vnc'' ​al comenzii ''​kvm''​ care va porni un server de VNC prin care se va exporta consola mașinii virtuale:<​code>​ +
-root@saisp:​~#​ kvm -hda sda.qcow2 -m 512 -smp 4 -vnc 1 +
-</​code>​ +
-Observațîn continuare că procesul ​''​kvm'' ​nu a intrat în backgroundPentru acest lucru trebuie să mai adăugăm parametroul ''​-daemonize''​:<​code>​ +
-root@saisp:​~#​ kvm -hda sda.qcow2 -m 512 -smp 4 -vnc 1 -daemonize +
-</​code>​ +
-Parametrul ​''​-vnc 1''​ activează serverul VNC pe portul **1** al protocolului. Pentru a afla portul TCP pe care ascultă serverul de VNC prin care este exportată consola trebuie să adunați **5900** la numărul pe care l-ați pus parametrului ​''​-vnc'', ​în cazul nostru ​''​5901''​. Pentru a verifica acest lucru executațcomanda ​''​netstat''​:<​code>​ +
-root@saisp:​~#​ netstat -ntpl +
-</​code>​+
  
-În acest moment mașina virtuală KVM rulează în backgroundsingura modalitate de interacțiune cu aceasta fiind prin consola VNC. Ne vom conecta la portul ​''​5901'' ​folosind utilitarul ​''​vncviewer'':<​code>​ +Căile către volumele logice suntrespectiv ​''​/​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
-root@saisp:~# vncviewer localhost:5901+root@lvm:~# ls -l /​dev/​azeroth/​lordaeron 
 +lrwxrwxrwx 1 root root 7 Mar 16 16:57 /​dev/​azeroth/​lordaeron -> ../dm-0
 </​code>​ </​code>​
saisp/labs/04/contents/01.1390582651.txt.gz · Last modified: 2014/01/24 18:57 by mihai.carabas
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0