Εικονικές μηχανές με το virt-manager - Μέρος 1ο

Εικονικες μηχανες με το virt-manager - Μερος 1ο

Σε αυτό το άρθρο θα δούμε πως θα μπορέσουμε να δημιουργήσουμε εικονικές μηχανές χωρίς κλειστό (proprietary) λογισμικό (έστω και αν είναι τσάμπα - ή αλλιώς freeware). Πριν όμως κάνουμε κατάδυση σε αυτό τον “εικονικό” κόσμο θα πρέπει να μάθουμε τους βασικούς κανόνες και τις βασικές έννοιες της τεχνολογίες αυτής για να μπορούμε και εμείς μετά να παίξουμε “μπάλα”. Για τις ανάγκες του θέματος χρησιμοποιώ το Debian GNU/Linux 10.6 (Buster) άλλα είμαι σίγουρος ότι όσα περιγράφω μπορούν να γίνουν και σε άλλες διανομές του GNU/Linux με λίγες (ή ακόμα και καθόλου) αλλαγές.

Βασικοι οροι

Εικονική μηχανή (virtual machine ή αλλιως guest) είναι μια τεχνολογία που μας επιτρέπει να τρέξουμε λογισμικό σαν να το έχουμε εγκατεστημένο σε άλλον υπολογιστή από αυτόν που χρησιμοποιούμε. Μπορούμε να έχουμε πολλαπλές εικονικές μηχανές που να εκτελούνται ταυτόχρονα με διαμοιρασμό των πόρων του κυρίου υπολογιστή μας.

Για παράδειγμα ας πούμε ότι έχουμε έναν επιτραπέζιο υπολογιστή με 16 GB μνημης RAM και δίσκο SSD 2 Terabytes σε χωρητικότητα. Μπορούμε αν χρειαζόμαστε να έχουμε 4 εικονικές μηχανές με 1 GB RAM και 10 GB εικονικό σκληρό δίσκο η κάθε μια ή μια εικονική μηχανή με 4GB RAM και 40 GB εικονικό σκληρό δίσκο. Τα πάντα εξαρτώνται από το τι θέλουμε να κάνουμε. Κάποια λειτουργικά συστήματα χρειάζονται περισσότερη μνήμη και αποθηκευτικό χώρο, και κάποια άλλα λιγότερη.

Οικοδεσπότης (ή αλλιώς host) είναι το φυσικό μηχάνημα που τρέχει τις εικονικές μηχανές. Είναι το σύστημα το οποίο παρέχει τους φυσικούς πόρους σε όλες τις εικονικές μηχανές και από το οποίο μπορεί μια εικονική μηχανή να έχει πρόσβαση σε περιφερειακά όπως πχ εξωτερικά μέσα αποθήκευσης (USB στικακια, USB δίσκοι κλπ), εκτυπωτές, κάμερες κλπ κλπ. Επίσης οι εικονικές μηχανές έχουν πρόσβαση (περιορισμένη μεν άλλα υπάρχει πρόσβαση) στο λειτουργικό σύστημα του host μηχανήματος για διαμοιρασμό αρχείων και άλλων πόρων όπως πχ η πρόσβαση στο διαδίκτυο ή το πρόχειρο.

Εικονικοί πόροι: Με αυτο εννοούμε τους πορους που θα διαμοιραστει το μηχάνημα οικοδεσπότης με τις εικονικές μηχανές. Κάθε εικονική μηχανή χρειάζεται μνημη RAM, χρειάζεται εναν εικονικό δισκο στον οποιο θα εναποθετηθουν τα αρχεία του λειτουργικού συστήματος της εικονικής μηχανής, πρόσβαση σε τυχόν εκτυπωτές που ειναι συνδεδεμενοι στον host υπολογιστή, ή webcams ή κινητά που ειναι συνδεδεμενα με USB κλπ κλπ.

Δικτύωση κατάστασης χρήστη (usermode networking) είναι ενα ειδος δικτύωσης που ειναι αποκομμένη απο ολο το φυσικο δυκτιο και δεν εχει προσβαση παρα μονο στο Internet (και στον host υπο συνθηκες). Σε αυτη την περίπτωση η εικονικη μηχανη δεν ειναι προσβασιμη δυκτιακα απο το μηχανημα-οικοδεσποτη και η προσβαση της γινεται μονο μεσω τοπικου εικονικου τερματικου οπτικα. Δηλαδη θα πρεπει να βρησκεται καποιος μπροστα στην οθονη του οικοδεσποτη για να δει την εικονικη οθονη της εικονικής μηχανης και να την χρησιμοποιήσει. Για να αποκτήσει καποιος δυκτιακα προσβαση στην εικονικη μηχανη με αυτη την δικτύωση μπορει να το κανει μονο μέσω συγκεκριμένων εντολών του διαχειριστικού προγράμματος της εικονικής μηχανης.

Γεφυρομενη δυκτιωση (bridged networking) είναι ενα ειδος δικτύωσης που δημιουργεί μια εικονικη κάρτα δυκτιου με την οποια θα μπορουν να επικοινωνουν με το μηχανημα-οικοδεσποτης οσες εικονικες μηχανες την χρησιμοποιουν. Μια τέτοια δικτύωση επιτρέπει την επικοινωνία δικτυακά με την εικονική μηχανη αλλα μονο μεσα στον οικοδεσπότη. Για να γινει αυτο απο αλλα μηχανιματα του εσωτερικου δυκτιου (LAN) θα πρεπει να δημιουργηθουν συγκεκριμενοι κανονες των iptables ετσι ωστε να μπορουν να μεταφέρονται τα πακετα των πληροφοριων απο και προς την εικονική μηχανή εαν αυτο χρειαστεί. Αυτος ο τρόπος ειναι προτιμότερος για εργασιακά περιβάλλοντα, πχ data centers ή servers εταιριων. Για προσωπική χρήση και πειραματισμό προτιμούνται άλλες λύσεις.

Δυο ειδών επισκέπτες

Ανάλογα με την χρηση της μια εικονικη μηχανη μπορει να εχει δυο διαφορετικες καταστασεις. Προνομιακη (privileged) κατα την οποια εχει προσβαση σε ολο το υλικο του μηχανηματος-οικοδεσποτη (και εκτελειτε με δικαιώματα διαχειριστή (root privileges) ) και μη προνομιακή (unprivileged) που άπλα δουλεύει με το minimum των δυνατοτήτων της και με τις δυνατοτητες και τα προνόμια του χρηστη που τις εκτελει. Σε άλλα λειτουργικά συστηματα αυτη η διάκριση μπορει να μην ειναι και τοσο εμφανης παρολα αυτα στο GNU/linux ειναι αναγκαια και χρησιμη.

KVM/libvirt/QEMU/virt-manager Παναγια μου, σε ποσα κομματια ειναι σπασμενο;

Για να έρθουμε πρακτικα και να ξεκινησουμε να φτιαξουμε μια εικονικη μηχανη θα πρεπει να μαθουμε λιγο πολυ με τι θα ασχοληθουμε.

KVM
Το KVM ή Kernel Virtual machine είναι η βάση όλου του συστήματος μας. Είναι επιπρόσθετο κομμάτι του πυρήνα (kernel module) που έχει πρόσβαση σε συγκεκριμένες περιοχές του επεξεργαστή που μας επιτρεπουν να κανουμε την εξομειωση των υλικου των εικονικων μας μηχανων ετσι ωστε το λειτουργικο που θα εγκατασταθεί μεσα τους να μην βλέπει την διάφορα μεταξυ του εικονικου υλικου και του κανονικου.

libvirt
Για την διαχείριση αυτού του συστήματος έχει δημιουργηθεί η libvirt, μια ομάδα εργαλείων και βιβλιοθηκών που συνεργάζεται με το KVM για να ξεκινήσει/σταματήσει/(και)ελέγξει τις εικονικές μηχανές μας. Το εργαλείο που χρησιμοποιείται περισσότερο είναι το virsh και είναι εργαλείο που χρησιμοποιείται από το τερματικό. Χρησιμοποιείται συχνά απομακρυσμένα (είτε μεσα απο αλλο συστημα ειτε μεσω διαδικτύου) μεσω SSH και μπορεί να βοηθήσει στην αλλαγή στοιχείων της εικονικής μηχανής καθώς και να τις ξεκινήσει, επανεκκινησει, και να τις σταματήσει.

QEMU
Το επόμενο κομματι του παζλ των εικονικών μηχανών στο GNU/Linux ειναι το QEMU που θα μπορουσαμε να πουμε οτι ειναι κατα καποιο τροπο το “αφεντικο” του KVM. Το KVM εκτελει την εικονικη μηχανη με το λεγομενο hardware virtualization που σημαινει οτι οι επιδωσεις της ειναι εφαμυλες του υλικου στο οποιο εκτελειται αλλα η εξομοιωση γινεται μερικως και απο το QEMU.

virt-manager
Την ομαδα συμπληρωνει το virt-manager που ειναι στην ουσια το γραφικο περιβαλλον (GUI) στο οποιο ο χρηστης εκκινει, σταματαει και χρησιμοποιει τις εικονικες του μηχανες.

Ανυχνευση δυνατοτητων οικοδεσποτη

Για να ξεκινήσουμε να φτιάχνουμε εικονικές μηχανες πρώτα απ´ολα πρεπει να δούμε τι παίζει με το hardware virtualization. Το υποστηριζει ο επεξεργαστης σου η θα πάμε θα την φτιαξουμε μια χαρα και θα μας μεινει σαν το σαραβαλακι του 1921 και θα θελει μαστιχα και νερο στην ανυφορα; Πως το ελεγχουμε αυτο;

Μα απο την γραμμη εντολων βεβαια :slight_smile:
Ανοιξτε ενα τερματικο και γραψτε:

cat /proc/cpuinfo | grep model\ name

Αυτή η εντολή θα σας βγάλει ενα παράδειγμα σαν και το παρακατω:

model name	: AMD Athlon(tm) X2 Dual-Core QL-60
model name	: AMD Athlon(tm) X2 Dual-Core QL-60

Το μηχάνημα που γράφω αυτο το αρθρο ειναι ενα παλιο Toshiba με τον εν λογω Athlon X2 επανω. Τωρα υποστηριζει αυτος ο επεξεργαστής hardware virtualization για εικονικες μηχανες; Μονο οι προδιαγραφές του θα μας πουν. Παμε λοιπον στη αγαπημένη μας μηχανη αναζητησης και βαζουμε το “AMD Athlon™ X2 Dual-Core QL-60” (χωρις τα ") και βλεπουμε τα αποτεσματα που μας βγαζει. Απο εμπειριας μου, ξερω οτι στα αποτελεσματα του cpu-world.com θα βρω συνηθως ολες τις προδιαγραφες των AMD επεξεργαστων και οι αντιστοιχες για τους Intel επεξεργαστες ερχονται απο το ark.intel.com

ΠΧ για τον Athlon X2 QL-60 βλεπω οτι ειναι 64αμπιτος και εχει υποστιρηξη για AMD-V / AMD Virtualization technology

(Πηγη: https://www.cpu-world.com/CPUs/K8/AMD-Athlon%2064%20X2%20QL-60%20-%20AMQL60DAM22GG.html )

Το κυριο μου λαπτοπ ειναι ενα HP Envy 17-j150ca που φωραει εναν Intel® Core™ i7-4700MQ CPU @ 2.40GHz

Βλεποντας τα αντοιστιχα αποτελεσματα βλεπω οτι και αυτος ειναι 64αμπιτος και εχει υποστιρηξη για το αντοιστιχο Intel Virtualization Technology (VT-x)

(Πηγη: https://ark.intel.com/content/www/us/en/ark/products/75117/intel-core-i7-4700mq-processor-6m-cache-up-to-3-40-ghz.html)

Τώρα για να δουμε αν ειναι ενεργοποιημενο. Γραφουμε:

cat /proc/cpuinfo | grep "vmx\|svm"

και αν ειναι ενεργοποιημενο θα πρεπει να δουμε κατι παρομοιο με το παρακατω:

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 pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm cpuid_fault epb invpcid_single pti ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid xsaveopt dtherm ida arat pln pts md_clear flush_l1d
vmx flags	: vnmi preemption_timer invvpid ept_x_only ept_ad ept_1gb flexpriority tsc_offset vtpr mtf vapic ept vpid unrestricted_guest ple

Στο παραπανω παραδειγμα στις σημαιες (μικρες κωδικες ονομασιες ιδιωτητων) του επεξεργαστη συγκαταλεγεται και η ιδιοτητα vmx με επιμερους σημαιες για αυτη την ιδιοτητα (vmx flags). Οποτε μπορουμε να πουμε οτι υποστηριζεται και ειναι ενεργοποιημενο το hardware acceleration για τον επεξεργαστη μου.

Αν δεν βγει κατι οπως το παραπανω τοτε πρεπει να μπουμε στο BIOS του υπολογιστη μας και να το ενεργοποιησουμε για να δουμε σωστες επιδοσεις.

Στην συνεχεια…

Στο επομενο μερος θα δουμε βημα βημα τι πρεπει να κανουμε για να δημιουργησουμε την πρωτη μας εικονικη μηχανη, απο την εγκατασταση του virt-manager και των υπολοιπων πακετων που χρειαζομαστε μεχρι την πληρη εγκατασταση του λειτουργικου συστηματος της εικονικης μας μηχανης.

16 «Μου αρέσει»