Servicii Avansate pentru ISP

Laborator 03 - KVM

ATENTIE!!! Inainte de inceperea laboratorului, rulati comenzile:

apt-get update
apt-get install udev

Scop

Laboratorul isi propune sa exploreze solutia de virtualizare nativa KVM (Kernel-based Virtual Machine), precum si principalele modalitati de a interactiona cu aceasta:

  • comenzi native (kvm, qemu-img etc.)
  • libvirt / virsh
  • virt-manager

Breviar

KVM reprezinta o solutie de “full-virtualization”, nativa in nucleul Linux.

Instalare

  • In Debian, pachetul ce adauga suport in userspace pentru interactiunea cu masinile virtuale este qemu-kvm.
  • Pentru a putea lucra cu KVM ca user diferit de root, trebuie adaugat user-ul curent in grupul kvm.
  • Dupa instalare, in nucleu trebuie sa existe modulele kvm si (kvm-intel sau kvm-amd).

Comenzi native

Cele mai folosite comenzi puse la dispozitie de kvm sunt:

  • kvm - permite pornirea si specificarea parametrilor pentru masinile virtuale;
  • qemu-img - permite crearea si gestiunea imaginilor de hard-disk.

Un exemplu de rulare al comenzii kvm este:

kvm -hda virtualdisk.qcow2 -cdrom cdrom.iso -m 256 -smp 2

Parametrii au urmatoarea semnificatie:

  • -hda virtualdisk.qcow2 - masina virtuala va folosi fisierul virtualdisk.qcow2 ca imagine pentru primul hard-disk (hda);
  • -cdrom cdrom.iso - in masina virtuala va fi emulata o unitate optica, avand montata imaginea cdrom.iso;
  • -m 256 - masina virtuala va avea 256MB de RAM disponibili;
  • -smp 2 - masina virtuala va avea 2 procesoare;

Un exemplu de creare a unei imagini de hard-disk, folosind comanda qemu-img este:

qemu-img create -f qcow2 virtualdisk.qcow2 1G

Imaginea va avea formatul qcow2, numele virtualdisk.qcow2 si dimensiunea maxima de 1GB.

Daca dorim sa cream o imagine tip copy-on-write pornind de la o imagine de baza, vom folosi:

qemu-img create -f qcow2 -b base-image.qcow2 cloned-image.qcow2

In urma comenzii, imaginea base-image.qcow2 va deveni read-only, iar toate modificarile vor duce la actualizarea imaginii cloned-image.qcow2.

Libvirt / virsh

Utilizare

  • Pentru a putea gestiona masinile virtuale folosind libvirt, trebuie ca user-ul curent sa fie adaugat la grupul libvirt.
  • URI-ul folosit pentru conectare poate avea urmatoarele forme:
    • qemu:///system - pentru conectare locala;
    • qemu+ssh://user@host/system - pentru conectare remote;

Operatiile virsh sau libvirt ce se pot realiza asupra masinilor virtuale sunt cele generice, prezentate la VirtualBox si LXC.

Creare masina virtuala

Pentru a crea o masina virtuala ce va fi gestionata de libvirt, folosim utilitarul virt-install. Un exemplu de folosire este urmatorul:

virt-install --connect qemu:///system --name debian-squeeze --hvm --ram 512 --disk path=squeeze.qcow2,format=qcow2 --network network=default --vnc

Parametrii au urmatoarea semnificatie:

  • -connect qemu:///system - masina va fi creata pe sistemul local;
  • –name debian-squeeze - numele masinii;
  • –hvm - se foloseste virtualizare hardware;
  • –ram 512 - va avea 512MB de RAM;
  • –disk path=squeeze.qcow2,format=qcow2 - numele si tipul imaginii de hard-disk;
  • –network network=default - tipul retelei;
  • –vnc - display-ul va fi exportat prin VNC.

In urma rularii comenzii, fisierul de configurare va fi debian-squeeze.xml si se va gasi in /etc/libvirt/qemu.

Gestiune masini virtuale

Pentru a gestiona masinile virtuale, exista mai multe posibilitati:

  • programatic - libvirt;
  • interfata in linie de comanda - virsh;
  • interfata grafica - virt-manager.

Exercitii

KVM - comenzi native

Instalare

  1. Instalati pachetul ce ofera suportul pentru KVM.
  2. Verificati ca modulele de kernel corespunzatoare functionarii KVM au fost incarcate.
  3. Adaugati utilizatorul student la grupul kvm.

Utilizare

  1. Descarcati arhiva de la urmatoarea adresa: http://swarm.cs.pub.ro/~carpalex/saisp/saisp-vm.tar.gz
    • Dupa ce s-a descarcat, dezarhivati-o si veti obtine un fisier de tip qcow2 (imagine pentru hard-disk-ul masinii virtuale).
  2. Folosind comanda qemu-img, afisati informatii despre imaginea obtinuta.
  3. Folosind comanda kvm, porniti o masina virtuala cu urmatorii parametri:
    • hard-disk ce foloseste imaginea obtinuta la pasul anterior - folositi parametrul hda;
    • 512 MB de memorie RAM - folositi parametrul m;
    • 2 procesoare virtuale - folositi parametrul smp.
  4. Dupa ce masina virtuala a pornit, verificati din interiorul ei ca parametrii specificati sunt “vazuti” in mod corect.
  5. Logati-va in masina virtuala (username “root” / password “student”), apoi opriti-o.
  6. Porniti din nou masina virtuala, dar de data aceasta cu 256 MB de memorie RAM si 1 procesor. Verificati ca parametrii sunt “vazuti” corect.
  7. Opriti masina virtuala.

Vizualizare display

In mod implicit, KVM afiseaza display-ul masinii virtuale intr-o fereastra locala. Dorim in continuare ca display-ul sa fie exportat prin VNC, astfel incat sa fie posibila vizualizarea masinii si de pe sisteme remote.

  1. Folosind comanda kvm de la punctele anterioare, porniti masina virtuala astfel incat display-ul sa fie exportat prin VNC.
    • Folositi parametrul vnc.
  2. Instalati pachetul vncviewer.
  3. Conectati-va, folosind vncviewer, la display-ul masinii virtuale de pe sistemul local (IP: 127.0.0.1, Port: 5900 + numar display specificat in comanda kvm).
  4. Conectati-va, folosind vncviewer, la display-ul masinii virtuale de pe sistemul unui coleg.
  5. Inchideti masina virtuala de pe sistemul local.

Libvirt / virsh

Instalare

  1. Instalati pachetele libvirt-bin, virtinst si virt-viewer.
  2. Adaugati utilizatorul student in grupul libvirt.
  3. Porniti serviciul de networking al libvirt:
    virsh -c qemu:///system net-start default

Creare masina virtuala; interactiune

  1. Folosind comanda virt-install, creati o masina virtuala ce foloseste imaginea de hard-disk deja existenta. Folositi urmatorii parametri (consultati si cursul pentru un exemplu al sintaxei):
    • connect - specificati URI-ul pentru qemu de pe sistemul local;
    • name - numele masinii virtuale;
    • hvm - pentru a activa virtualizarea hardware;
    • ram - 512MB;
    • disk - calea catre imaginea de hard-disk;
    • network - “network=default” pentru a folosi bridge-ul default (virbr0);
    • import - pentru a folosi imaginea de hard-disk deja existenta;
    • vnc - pentru ca display-ul masinii virtuale sa fie accesibil prin vnc.
  2. Dupa executarea comenzii de la pasul anterior, masina virtuala va porni. Logati-va in masina virtuala si inchideti-o.
  3. Inspectati fisierul XML generat pentru definirea masinii (se gaseste in /etc/libvirt/qemu).
  4. Folosind virsh, conectati-va la URI-ul pentru qemu de pe sistemul local.
  5. Afisati toate domeniile definite (folositi parametrul –all).
  6. Porniti masina virtuala din virsh.
  7. Afisati informatii despre aceasta.
  8. Folosind vncviewer, conectati-va la display-ul masinii virtuale (IP: 127.0.0.1. Port: 5900).
  9. Inchideti masina virtuala din virsh.

Virt-manager

  1. Instalati pachetul virt-manager.
  2. Lansati aplicatia grafica Virtual Machine Manager.
  3. Din cadrul aplicatiei, porniti masina virtuala.
  4. Vizualizati informatiile despre masina virtuala.

Virt-manager - conectare remote

Dorim sa ne conectam, folosind Virt-manager, la daemon-ul libvirt de pe sistemul unui coleg.

  1. Mai intai, trebuie sa activam autentificarea SSH prin chei intre sistemul local si sistemul colegului.
    • Pe sistemul local, rulati ca root comanda ssh-keygen -t rsa. In urma comenzii, se va genera o pereche de chei RSA.
    • Tot pe sistemul local, rulati ca root comanda ssh-copy-id root@IP_REMOTE. Cheia publica se va copia pe sistemul colegului.
  2. In fereastra principala a aplicatiei Virt-manager, definiti o noua conexiune, catre sistemul colegului.
    • Optiunea se gaseste la “File → Add Connection”.
    • Ca metoda, alegeti “SSH”.
  3. Verificati ca puteti interactiona cu masina virtuala de pe sistemul colegului.

KVM - notiuni avansate

Clonare copy-on-write

Dorim sa cream mai multe instante, plecand de la o masina virtuala de baza. Imaginile pentru hard-disk-urile masinilor clonate vor functiona in sistem “copy-on-write”:

  • Imaginea initiala ramane “read-only”;
  • Pentru fiecare masina virtuala, modificarile se scriu in imaginile nou create.
  1. Creati 2 imagini tip qcow2, avand ca imagine de baza imaginea initiala;
  2. Porniti 2 masini virtuale, folosind comanda kvm, transmitand ca parametru imaginile nou create.
  3. Observati marimea celor 2 imagini, precum si a imaginii initiale.
  4. In prima masina, creati un fisier de 50MB. In a doua, creati un fisier de 100MB.
  5. Observati, din nou, marimea celor 2 imagini, precum si a imaginii initiale. Cum s-au modificat?

Bonus: Live migration cu Virt-manager

Dorim sa migram o masina virtuala de pe sistemul propriu pe sistemul unui coleg.
Atentie! Mai intai, stergeti, folosind Virt-manager toate masinile virtuale de pe sistemul destinatie.

Pentru a migra o masina virtuala KVM de pe un sistem fizic pe altul, trebuie urmati pasii:

  1. Ambele sisteme fizice trebuie sa aiba acces la storage-ul masinii virtuale. Pentru aceasta:
    • Exportati prin NFS directorul ce contine imaginile de hard-disk ale masinii pe care doriti s-o migrati;
    • Montati prin NFS directorul exportat, pe masina destinatie;
    • Atat pe sistemul sursa, cat si pe sistemul destinatie, imaginile de hard-disk trebuie sa fie accesibile prin aceeasi cale absoluta.
  2. Pe sistemul fizic sursa, in Virt-manager, creati o conexiune catre qemu de pe sistemul fizic destinatie.
  3. Pe sistemul sursa, alegeti optiunea “Migrate”, din meniul contextual al Virt-manager.
laboratoare/laborator-03.txt · Last modified: 2013/03/11 15:50 by alexandru.carp