Aug 14, 2013

Εναλλακτική προσέγγιση για virtualization: LXC

Το τελευταίο χρονικό διάστημα εξετάζω λύσεις για την ελάφρυνση του laptop μου και την καλύτερη αξιοποίηση της επεξεργαστικής του ισχύς. Χρησιμοποιώ ευρύτατα εδώ και χρόνια το Oracle VirtualBox για τη συντήρηση του server-side προγραμματιστικού μου περιβάλλοντος (DB, Fusion Middleware, κλπ) και ένα από τα πράγματα που μου κινούν το ενδιαφέρον είναι η εκμετάλλευση αυτής της τεχνολογίας σε υψηλότερες ταχύτητες για τις ανάγκες ενός προγραμματιστικού περιβάλλοντος. Το να τρέχεις κάποιος καθετοποιημένες αρχιτεκτονικές προϊόντων σε εικονικές μηχανές έχει σαφή πλεονεκτήματα συντήρησης, ασφάλειας αναβάθμισης, επίτευξης πολύπλοκων δοκιμών, διασφάλισης ανεξαρτησίας από το πρωτεύον λειτουργικό σύστημα, κλπ. Από την άλλη πλευρά, χρησιμοποιώντας το VirtualBox εδώ και περίπου πέντε χρόνια, σε καθημερινή βάση, και πάντα σε σχέση με τα ιδιαίτερα απαιτητικά σε επεξεργαστικούς πόρους, μνήμη και δίσκο της Oracle, διαπιστώνω πως υπάρχουν κάποια περιθώρια για βελτίωση στη λειτουργία, όπως:


  • Ταχύτερη απόκριση στη λειτουργία σε σχέση με CPU και I/O. Λόγω του διαρκούς context switching, μια εικονική μηχανή χρειάζεται διαρκώς πόρους, που ακόμα σε κατάσταση αδράνειας απαιτεί το 5-10% της CPU. Εξίσου η λειτουργία του I/O δεδομένου του ότι πραγματοποιείται μέσω του μηχανισμού της εικονικοποίησης, επιβαρύνει (έστω και σε μικρό βαθμό) την ταχύτητα μιας μηχανής
  • Περιορισμοί στην χρήση μνήμης και CPU. Κατά τη δήλωση μιας μηχανής, προχωρούμε σε περιορισμούς στη μνήμη και τους επεξεργαστικούς πυρήνες που αυτή θα έχει πρόσβαση. Για ένα περιβάλλον προγραμματισμού, πολλές φορές είναι προτιμότερο να έχουμε στη διάθεση μας όλους τους πόρους του συστήματος ώστε όποτε χρειάζεται, να προχωρούμε στην κατάλληλη δέσμευση πόρων, αφήνοντας το κύριο λειτουργικό σύστημα να αποφασίζει.
  • Καλύτερη αξιοποίηση του αποθηκευτικού χώρου. Ειδικά όταν μιλάμε για SSD, τότε τα GBs κοστίζουν. Είτε δημιουργούμε έναν στατικό ή έναν δυναμικό δίσκο στο VirtualBox, πάντα έχουμε απώλεια αποθηκευτικού χώρου. Θα ήταν ίσως χρήσιμο να έχουμε κατειλημμένα bytes εκεί ακριβώς που τα χρειαζόμαστε.
  • Ειδική για ένα περιβάλλον προγραμματισμού σε laptop, η χρήση virtualization έχει άμεση επίδραση στην θερμότητα της συσκευής (λόγω CPU, I/O) και στην εν γένει διάρκεια της μπαταρίας
Βάζοντας όλα αυτά σε ένα πλαίσιο, κάνω αποτίμηση εδώ και καιρό μιας τεχνολογίας που ενσωματώνεται στο Linux kernel και προσφέρει ελαφρύς υπηρεσίες virtualization. Πρόκειται για το LXC ή αλλιώς Linux Containers. Πρόκειται για πολύ ελαφρύ περιβάλλον εικονικοποίησης, που τρέχει απευθείας στον πυρήνα του Linux (δίχως να χρειάζονται τρίτες βιβλιοθήκες ή προϊόντα), σε όλες τις μοντέρνες διανομές (πχ Ubuntu, openSuSE, Fedora, κλπ) και επιτρέπει την κατασκευή containers που διαθέτουν μια επαρκή απομόνωση από το κύριο λειτουργικό σύστημα, αξιοποιώντας ταυτόχρονα τις υπηρεσίες του (πχ buffers, scheduling, κλπ) Ως προσέγγιση, προσιδιάζει αυτή των Solaris Containers ή του OpenVZ και επιτρέπει την γρήγορη κατασκευή μηχανών με βάση κάποια πρότυπη διανομή όπως Ubuntu, Debian, Oracle Enterprise Linux, openSuSE, κλπ. Η εκκίνηση μιας τέτοιας μηχανής είναι ακαριαία: δεδομένου πως το host λειτουργικό σύστημα βρίσκεται σε λειτουργία, ένας LXC container δεν χρειάζεται πολλά πράγματα να αρχικοποιήσει καθώς τρέχει στο ίδιο kernel space. Η κατανάλωση πόρων είναι η πιο μικρή δυνατή (μια μηχανή σε αδράνεια καταναλώνει λιγότερο από 1% της CPU) ενώ φυσικά μπορούμε να συνθέσουμε τα δικά μας, ιδιωτικά δίκτυα μεταξύ των μηχανών, να εγκαταστήσουμε όποια software πακέτα θέλουμε μέσα στα πλαίσια ενός container, κλπ.

Στο επίπεδο του συστήματος αρχείων, μια εικονική μηχανή δεν είναι κάποιο μαγικό image file, αλλά μια κανονική δομή αρχείων.(πχ κάτω από το directory /var/lib/lxc/<όνομα container>/rootfs) που μπορούμε να διαβάσουμε ή να μεταβάλλουμε από το κύριο λειτουργικό σύστημα. Ένα σημείο που το paravirtualization υπερτερεί είναι η αποθήκευση της κατάστασης (saved state) μιας εικονικής μηχανής: εδώ το lxc δεδομένου ότι λειτουργεί στο επίπεδο του λειτουργικού συστήματος, με το κλείσιμο του υπολογιστή μας, τερματίζονται οι εικονικές μηχανές. Υπάρχει σε εξέλιξη το CRIU project για αυτόν τον λόγο που όμως δεν με έχει ικανοποιήσει ως προς τα αποτελέσματα του στις δοκιμές μου. Στον αντίλογο, η λήψη cold backup στο lxc αφορά απλά την αντιγραφή ενός συστήματος αρχείων.

Στο στάδιο της αποτίμησης του lxc, αρχικά το έτρεχα στα πλαίσια ενός VirtualBox guest machine (που με τη σειρά του έτρεχε ένα Ubuntu 13.04) Πρόκειται για μια αρχιτεκτονική ευέλικτη, που φέρνει μέσω του VirtualBox τα οφέλη του LXC και σε άλλες πλατφόρμες (πχ Mac OS X ή Microsoft Windows) Επί της ουσίας αντί να δημιουργηθούν πολλαπλά VirtualBox guest machines για διάφορα προϊόντα, δημιούργησα μόνο ένα, και εκτέλεσα το lxc εκεί, φτιάχνοντας κατά αυτόν τον τρόπο πολλαπλές εικονικές μηχανές. Θα έλεγα ένα lxc staging περιβάλλον.
Από τη στιγμή που έμεινα ικανοποιημένος από το lxc, έχω πια προχωρήσει σε deployments δίχως τη μεσολάβηση του VirtualBox.

Το λειτουργικό σύστημα που χρησιμοποιώ στο laptop μου είναι η τελευταία έκδοση του Ubuntu 13.04, που διαθέτει το lxc 0.9. Στις εικονικές μηχανές που έχουν κατασκευαστεί, χρησιμοποιώ το Oracle Enterprise Linux 6.4 ώστε να λειτουργήσουν τα προϊόντα της Oracle. Αυτή τη στιγμή, έχω εγκαταστήσει και λειτουργώ με επιτυχία διάφορα προϊόντα σε Linux Containers όπως:

  • Oracle Database 11g R2
  • Oracle Database 11g XE edition
  • Oracle Weblogic 10.3.6
  • Oracle SOA Suite/ESB 11.1.1.6
  • Oracle Webcenter/UCM 11.1.1.6
  • Oracle Identity and Access Management 11g R2
  • Oracle Identity Management 11.1.1.7
Στα επόμενα άρθρα θα εστιάσω στην παραμετροποίηση του lxc καθώς και στην εγκατάσταση των προϊόντων της Oracle σε αυτό.

3 comments:

Anonymous said...

Nice post. VagMan (ypoio)

Nikos Kyriakoulakos said...

Πολύ καλό post! δώσε μας και κάποια "αίσθηση" του hardware που μπορεί να υποστηρίζει με "αξιοπρέπεια" τα VMs για development, όχι τόσο production.

Serafeim Karapatis said...

Ευχαριστώ Νίκο για τα καλά λόγια. Χμ, για hardware δεν μπορώ να πω πολλά καθώς το lxc το τρέχω προς το παρόν μόνο στο laptop μου με (Intel Ivy Bridge Quad Core) Η υποστήριξη ως προς το hardware, και η κλιμάκωση του, έχει να κάνει με το Linux που τρέχει στο host λειτουργικό σύστημα. Ταιριάζει γάντι για development σε server-side. Η αίσθηση σε τελική ανάλυση είναι ακριβώς η ίδια με το να έτρεχαν οι εφαρμογές του container σε native mode.

Πάντως θα επανέλθω με μετρήσεις καθώς και με θέματα σχετικά με file systems και storage σε σχέση με το lxc.