Το προφίλ μας στο Google Plus
0

Ενεργοποίηση του nested virtualization για το KVM

Σε κάποιες περιπτώσεις χρειάζεται να τρέχουμε εικονικές μηχανές μέσα σε εικονικές μηχανές. Κάτι τέτοιο ίσως ακούγεται περιττό ή/και άσκοπο, στην πραγματικότητα όμως δεν είναι τίποτε από τα δύο.

Υποθέστε, για παράδειγμα, ότι πειραματιζόμαστε με ένα virtual Ceph storage cluster. Εντός του εικονικού δικτύου του cluster θέλουμε κι έναν (εικονικό) KVM server, όπου ορισμένα VMs θα έχουν ως δίσκους block devices που κατοικούν στο storage cluster. Άλλο σενάριο: Εντός ενός VM διερευνούμε τις δυνατότητες του Kubernetes, και μέσα στο VM θέλουμε δύο ή περισσότερα άλλα VMs για να οργανώνει ο Kubernetes τα pods του. Μπορούμε να παραθέσουμε κι άλλα παραδείγματα, νομίζουμε όμως ότι δεν χρειάζεται.

Οι σύγχρονοι hypervizors επιτρέπουν τη δημιουργία εικονικών μηχανών μέσα σε εικονικές μηχανές, κι ο συνδυασμός Linux kernel/KVM δεν αποτελεί εξαίρεση. Πιο συγκεκριμένα, το λεγόμενο nested virtualization κάνει δυνατή την εκτέλεση KVM VMs μέσα σε KVM VMs με ταυτόχρονη εκμετάλλευση του hardware acceleration που παρέχει το host computer (physical hardware). Σε έναν οποιονδήποτε Linux host η υποστήριξη nested virtualization ίσως είναι ενεργοποιημένη — αλλά ίσως και όχι. Προκειμένου να δούμε τι ισχύει με τον υπολογιστή μας, από ένα τερματικό πληκτρολογούμε

cat /sys/module/kvm_intel/parameters/nested

(αν έχουμε Intel CPU) ή

cat /sys/module/kvm_amd/parameters/nested

(αν έχουμε AMD CPU). Στην περίπτωση που το cat επιστρέψει 0 ή N, τότε το nested virtualization είναι απενεργοποιημένο. Αν πάλι επιστρέψει 1 ή Y, τότε το nested virtualization είναι ενεργοποιημένο.

Στον Intel-based Linux host των δοκιμών μας, το nested virtualization ήταν εξ ορισμού απενεργοποιημένο.

Αν ο υπολογιστής σας έχει επεξεργαστή AMD, το nested virtualization πιθανώς είναι ήδη ενεργοποιημένο. Αν από την άλλη έχετε μηχάνημα με επεξεργαστή Intel, τότε το nested virtualization ίσως δεν είναι ενεργοποιημένο. Σε μια τέτοια περίπτωση, αξίζει να δοκιμάσουμε την εκκίνηση του host OS έχοντας δώσει στον πυρήνα την παράμετρο kvm-intel.nested=1. Ειδικά στο openSUSE που πολύ αγαπάμε, με τη βοήθεια του YaST module ονόματι bootloader είναι πανεύκολο να ρυθμίσουμε τον GRUB ώστε η προαναφερθείσα παράμετρος να περνάει πάντοτε στον πυρήνα κατά το boot.

Χρήση του YaST module ονόματι bootloader, ώστε να τροποποιήσουμε τις παραμέτρους που περνούν στον πυρήνα κατά το boot.

Η νέα παράμετρος για τον πυρήνα λαμβάνεται υπόψη μετά την επόμενη επανεκκίνηση του λειτουργικού. Ξανά από ένα τερματικό, πληκτρολογούμε και πάλι cat /sys/module/kvm_intel/parameters/nested κι ελέγχουμε το αποτέλεσμα. Αν και τώρα δεν δούμε 1 ή Y, τότε είτε ο επεξεργαστής είτε ο πυρήνας του λειτουργικού είναι αρκετά παλιός.

Μετά την επανεκκίνηση του λειτουργικού κι έχοντας περάσει στον Linux kernel την κατάλληλη παράμετρο, με χαρά διαπιστώνουμε ότι το nested virtualization υποστηρίζεται από το σύστημά μας.

Με το nested virtualization ενεργοποιημένο είμαστε πλέον σε θέση να φτιάχνουμε VMs μέσα σε VMs, όπου τα nested VMs θα εκμεταλλεύονται το hardware acceleration του physical host. Οφείλουμε όμως να φροντίζουμε ώστε, για τα VMs που θα αποτελούν hosts άλλων VMs, να ισχύει συγκεκριμένη ρύθμιση όσον αφορά στον εικονικό τους επεξεργαστή. Δείτε το screenshot που ακολουθεί, όπου διακρίνεται η σχετική ρύθμιση στο περιβάλλον του virt-manager.

Το συγκεκριμένο VM θα αποτελέσει τον host άλλων VMs. Γι' αυτό και μέσα από το περιβάλλον του virt-manager φροντίζουμε ώστε για τη CPU του VM να είναι τσεκαρισμένο το Copy host CPU configuration.

Για ένα KVM VM που θα αποτελέσει τον host άλλων KVM VMs, μένει ένας τελευταίος έλεγχος που καλό είναι να κάνουμε μέσα από το guest OS του virtualized host. Συγκεκριμένα, αρκεί να πληκτρολογήσουμε

virt-host-validate

και να παρατηρήσουμε το αποτέλεσμα του ελέγχου περί hardware virtualization (στο openSUSE, το εργαλείο βρίσκεται στο πακέτο libvirt-client).

Αυτό το VM θα αποτελέσει τον host άλλων VMs, τα οποία θα εκμεταλλεύονται το hardware acceleration του physical host. Το αποτέλεσμα του πρώτου ελέγχου που διενεργεί το virt-host-validate επιβεβαιώνει ότι, πράγματι, έτσι θα συμβαίνει.

Όπως φαίνεται και στο screenshot, το αποτέλεσμα θα πρέπει να είναι “PASS”.

ΥΓ. Φτιάξτε τον δικό σας physical KVM server χωρίς ιδιαίτερα ισχυρό hardware. Διαβάστε περισσότερα στη σχετική σειρά άρθρων.

Leave a Reply

You must be logged in to post a comment.

Σύνδεση

Αρχείο δημοσιεύσεων