Linux Inside
84
Η
libcloud είναι μία βιβλιοθήκη για Python και Java που
δίνει μία όσο το δυνατόν ενιαία διεπαφή προγραμματι-
σμού για τη διαχείριση εικονικών μηχανών, δίσκων και
δικτύων σε πολλαπλά cloud computing backends.
Με αυτόν τον τρόπο επιλύει το πρόβλημα της ενιαίας δια-
χείρισης στα διαφορετικά clouds και παρέχει έναν εύχρηστο
τρόπο επικοινωνίας με τους παρόχους υπηρεσιών cloud.
Έτσι είναι εύκολο μέσω αυτού του εργαλείου να επικοινωνή-
σουμε με όσους διαφορετικούς παρόχους cloud υποστηρίζει
και να δημιουργήσουμε scripts ή εφαρμογές για τη διαχείριση
των servers μας.
Είναι ανοιχτού κώδικα και δημιουργήθηκε το 2009 από την
cloudkick.com, ενώ πλέον είναι επίσημο project του Apache
Foundation. Η τρέχουσα stable έκδοση είναι η 0.9.1 και επι-
τρέπει να διαχειριζόμαστε τα εξής:
•
Cloud Servers που παρέχουν υπηρεσίες όπως το EC2 και
το Rackspace CloudServers, μέσω των modules
libcloud.compute*
•
Cloud Storage που παρέχουν υπηρεσίες όπως τα Amazon
S3 και Rackspace CloudFiles, μέσω των modules
libcloud.storage*
•
Υπηρεσίες Load Balancers, μέσω των modules
libcloud.loadbalancer*
•
Υπηρεσίες DNS, μέσω των modules libcloud.dns*
Ορισμένοι από τους providers που υποστηρίζει η libcloud,
είναι οι Amazon, Rackspace, Cloudsigma, Dreamhost, Gandi,
Slicehost κ.ά.
Χρήσιμοι όροι
Για να χρησιμοποιήσουμε τη libcloud, πρώτα ας έρθουμε
σε επαφή με την ορολογία της. Οι κύριοι όροι είναι οι εξής:
Providers:
Ένας provider είναι μία υπηρεσία cloud, όπως
το Amazon EC2 ή το Rackspace. Κάθε provider είναι προσβά-
σιμος μέσω του αντίστοιχου driver της libcloud.
Nodes:
Ένα node είναι ο virtual server μας σε κάποιον
provider.
Images:
Τα images είναι τα λειτουργικά συστήματα τα
οποία παρέχει ένας provider προς deployment. Κάθε provider
παρέχει τα δικά του images. Ένα Image, π.χ., που παρέχει
το Rackspace, είναι το Ubuntu 11.10 Server.
Sizes:
Ένα size αντιπροσωπεύει την υπολογιστική ισχύ, τον
αποθηκευτικό χώρο και το δικτυακό bandwidth τα οποία πα-
ρέχει ένας provider για συγκεκριμένο virtual server που μπο-
ρούμε να δημιουργήσουμε. Είναι προφανές ότι το κόστος των
sizes μεγαλώνει όσο αυξάνονται οι παροχές!
Locations:
Ένα location αντιστοιχεί σε μία γεωγραφική το-
ποθεσία για κάθε provider. Για παράδειγμα, ένα location του
Amazon EC2 είναι το us-east-1a (Amazon US N. Virginia).
Λειτουργίες
Μέσω του αντίστοιχου driver για κάθε provider έχουμε και
τις αντίστοιχες δυνατότητες στη libcloud. Όλοι οι drivers υπο-
στηρίζουν κάποιες βασικές λειτουργίες, ενώ ορισμένοι drivers
περιλαμβάνουν και επιπρόσθετες λειτουργίες.
Οι βασικές λειτουργίες είναι οι μέθοδοι:
•
list_images() όπου παίρνουμε μία λίστα με τα images που
υποστηρίζει ο provider
•
list_sizes() όπου παίρνουμε τα sizes
•
list_locations() όπου παίρνουμε τα locations
•
list_nodes() όπου παίρνουμε τα nodes μας, εφόσον, φυσι-
κά, έχουμε
•
create_node() για να δημιουργήσουμε ένα node, αφού
προσδιορίσουμε τα κατάλληλα ορίσματα
•
destroy_node() για τη διαγραφή ενός node
•
reboot_node() για να κάνουμε reboot ένα node
Μέσω της τεκμηρίωσης της libcloud ή με dir() στην python
μπορούμε να δούμε τις μεθόδους που υποστηρίζει ένας
driver.
Εγκατάσταση
Ήρθε η ώρα να περάσουμε στην πράξη. Θα εγκαταστήσου-
με τη libcloud με έναν από τους παρακάτω διαφορετικούς
τρόπους:
•
Ως πακέτο στη διανομή μας, π.χ., apt-get install python-
libcloud στα Debian/Ubuntu
•
Μέσω του easy_install εργαλείου της python. easy_install
apache-libcloud ή του pip, για να μπορούμε να κάνουμε και
upgrade (pip install --upgrade apache-libcloud)
•
Κάνοντας clone το git repository στο github. git clone
https://github.com/apache/libcloud.git
Ο πρώτος τρόπος έχει το μειονέκτημα ότι θα έχουμε πα-
λιότερη έκδοση της libcloud, μια και το πακέτο ανανεώνεται
από τη διανομή και άρα θα είναι μονίμως κάποια παλιότερη
έκδοση.
Σύνδεση με τον Amazon EC2 driver
Με τη libcloud εγκατεστημένη, είναι ώρα να ξεκινήσουμε.
1
>>> from libcloud.compute.types import Provider
2 >>> from libcloud.compute.providers import
get_driver
3 #κάνουμε τα απαραίτητα imports
4 >>> EC2_ACCESS_ID = 'ABC'
5 >>> EC2_SECRET_KEY = 'DEF'
6 #προσδιορίζουμε τα προσωπικά στοιχεία για τη
σύνδεση
7 >>> Driver = get_driver(Provider.EC2)
8 >>> conn = Driver(EC2_ACCESS_ID,
Του Μάρκου Γώγουλου <mgogoulos@gmail.com>
Linux Labs - LibCloud
Παρουσιάζουμε τη βιβλιοθήκη libcloud που παρέχει
ένα ενοποιημένο περιβάλλον διαχείρισης
υπηρεσιών cloud και δοκιμάζουμε ορισμένες
ενέργειες, όπως το reboot ενός server στο cloud
EC2 της Amazon και η δημιουργία ενός virtual
server μέσω εντολών!
Εργαλεία:
libcloud
Δυσκολία:
URL:
http://libcloud.apache.org
Τεκμηρίωση
Ο Μάρκος είναι software engineer και ιδρυτικό μέλος της Unweb.me...
LibCloud: Διαχείριση δημόσιων και ιδιωτικών clouds