== Δημιουργία λογαριασμού == Στέλνουμε e-mail στο cslab-admins cslab.ece.ntua.gr == Δημιουργία VM == Για να δημιουργήσουμε VM μπορούμε να το κάνουμε με τους ακόλουθους τρόπους: * Μέσω του UI, όπου πάμε στο [https://termi7.cslab.ece.ntua.gr/horizon termi7] και βάζουμε τα credentials μας * Μέσω του [https://pypi.python.org/pypi/python-novaclient nova client] (μπορούμε να εγκαταστήσουμε μέσω PIP, apt, yum, etc.) * Μέσω των eucatools (δες και παλιά version). == API access == Για να έχουμε access στο API του Openstack (nova/eucatools), πρέπει να κατεβάσουμε τα κατάλληλα files από το UI του Openstack. Πάμε στο tab Access/Security (αφού κάνουμε login) και πάμε στην τελευταία καρτέλα (API Access). Εκεί επιλέγουμε το Download Openstack RC File, και σώζουμε το αρχείο στο filesystem. Μετά κάνοντας source, έχουμε πρόσβαση στον openstack μέσω nova. Πχ: `giannis@ggian:~> source ~/.openstack/ggian-openrc.sh`\\ `giannis@ggian:~> nova list # list των VMs που τρέχουν` Με ακριβώς αντίστοιχη λογική, επιλέγοντας το link Download EC2 Credentials, κατεβάζουμε το zip για να έχουμε access μέσω των eucatools. Κάνουμε extract, source το e2rc.sh και that's it. Για νεότερα euca2ools προτείνεται η χρήση config file (αντίστοιχου με τα aws CLI tools). Παρέχεται template attached (global.ini). Χρειάζεται να συμπληρώσετε το Access και Secret key σας στα αντίστοιχα πεδία του χρήστη. Επίσης μπορείτε να προσθέσετε πάνω από 1 region στο ίδιο αρχείο και διαφορετικούς χρήστες. Δείτε και την σελίδα οδηγιών [https://www.eucalyptus.com/docs/eucalyptus/4.1.0/index.html#shared/euca2ools_config_file_layout.html εδώ]. **Known bug**: για άγνωστο λόγο, το ec2rc.sh έχει σαν EC2\_URL το entry None. Το σβήνουμε και βάζουμε στη θέση του το entry `export EC2\_URL=http://termi7:8773/services/Cloud` **Known bug 2**: για επίσης άγνωστο λόγο, αν απλά κάνουμε source το \*-openrc.sh αρχείο που κατεβάσαμε από το dashboard, το nova δεν βρίκσει τον host. Για αυτό, βάζουμε καρφωτά την IP του termi7 στο /etc/hosts αρχείο του υπολογιστή μας, μέχρι να βρούμε μια πιο μόνιμη λύση :). `giannis@ggian:~> echo -e "\\n147.102.4.167\\ttermi7" >> /etc/hosts` == Συνδεση με VM == Για να συνδεθούμε στα VM μας, υποστηρίζονται 3 τρόποι: * Σύνδεση μέσω IPv6, αν βρισκόμαστε σε IPv6 enabled δίκτυο. Εναλλακτικά μπορούμε να χρησιμοποιήσουμε τα scripts που βρίσκονται στο τέλος της σελίδας. * Σύνδεση μέσω ssh proxy. Δίνουμε: `giannis@ggian:~> ssh username@147.102.4.187` και στη συνέχεια έχουμε access σε όλο το subnet των VMs. Σε περίπτωση που δεν έχουμε access, στέλνουμε ένα mail στο csl ab-admins και επισυνάπτουμε ένα public key. * Σύνδεση μέσω VPN. Φτιάχνουμε ένα νέο certificate request ως εξής: `giannis@ggian:~> openssl req -nodes -new -keyout cslab-openstack-username.key -out cslab-openstack-username.csr -subj '/C=GR/ST=Attiki/O=CSLab/CN=FirstName LastName/emailAddress=email@somedomain.com'` και στέλνουμε το csr αρχείο στο cslab-admins (όπου username, CN καi email βάζουμε τα δικά μας στοιχεία). ΠΡΟΣΟΧΗ: δεν στέλνουμε το παραγόμενο key. Στη συνέχεια, μας επιστρέφεται ένα tar που περιέχει τα αρχεία ca.crt, client.ovpn, cslab-openstack-username.crt. Τα κάνουμε extract σε ένα directory και στο ίδιο directory τοποθετούμε το private key. Κάνουμε edit το .ovpn αρχείο, βρίσκουμε τις γραμμές στις οποίες δηλώνεται το ca, το cert και το key, και τοποθετούμε τα κατάλληλα entries με το δικό μας path. πχ: {{{ ca /usr/share/easy-rsa/keys/ca.crt cert /usr/share/easy-rsa/keys/cslab-ggian.crt key /usr/share/easy-rsa/keys/cslab-ggian.key }}} Τέλος, εκτελούμε (σαν root) `giannis@ggian:~> sudo openvpn client.ovpn` και δοκιμάζουμε να κάνουμε ping στις private IP των VM μας. (ο client πρέπει να έχει εγκατεστημένα τα πακέτα openvpn network-manager-openvpn network-manager-openvpn-{gnome,kde}, αν θέλει να ανοίγει το VPN connection μέσω του [wiki:OpenVPN Network Manager] Προτείνεται η χρησιμοποίηση του VPN σαν default τρόπος σύνδεσης. **Παρατήρηση:** για την επιτυχή σύνδεση με το VM που έχει την public IP, επιβάλλεται να τεθούν τα κατάλληλα exceptions στο Default Security Group του Openstack (by default, o Openstack κλείνει το access σε όλα τα ports, συνεπώς δεν θα υπάρχει connectivity μέχρι να σεταριστεί το Default Security Group). Περισσότερες πληροφορίες βρίσκουμε [http://docs.openstack.org/openstack-ops/content/security_groups.html εδώ]. **Σημείωση:** ΠΡΙΝ την δημιουργία ενός VM, χρειάζεται να θέσουμε ένα έγκυρο SSH key με το οποίο θα μπορούμε να συνδεόμαστε σε αυτά. Αυτό μπορεί να γίνει μέσω dashboard μέσω την επιλογής Project -> Compute -> Access & Security -> Key Pairs. == Volumes == Για τη δημιουργία ενός volume δίνουμε: {{{ giannis@ggian:~> source ~/.openstack/ggian-openrc.sh giannis@ggian:~> nova volume-create --display-name "myvolume" 10 # kataskebazetai 10G volume me onoma myvolume giannis@ggian:~> nova volume-list # gia na kratisoume to volume-id giannis@ggian:~> nova list # gia na kratiosume to server-id giannis@ggian:~> nova attach # edw ginetai to attacha }}} Αν όλα έχουν πάει καλά, δίνοντας `ls /dev/vd?` πρέπει να βλέπουμε και το device `/dev/vdb`. Για να αξιοποιήσουμε το volume, κάνουμε partition (με `fdisk`, `cfdisk`, etc.), και δημιουργούμε filesystem στο primary partition (`/dev/vdb1`) με την εντολής `mkfs.\*\*` , όπου `\*\*` το filesystem που θέλουμε να δημιουργήσουμε (αν δεν έχουμε κάποια συγκεκριμένη απαίτηση, ας προτιμήσουμε ext4). Τέλος, κάνουμε mount το `/dev/vdb1`. Για να κάνουμε detach το volume, πρέπει πρώτα να το κάνουμε unmount μέσα από το vm, αλλιώς κινδυνεύομυμε να χάσουμε data. Για resizing, δεν ξεχνάμε ότι πρέπει να κανουμε resize και το filesystem!!! Σε περίπτωση που θέλουμε να κάνουμε shrink το volume πρέπει πρώτα να κάνουμε shrink το Fs και μετά το actual shrink του volume. Το ανάποδο ισχύει για το expand. == Monitoring == Για τα πειράματα, έχει εγκατασταθεί Ganglia στους hosts που κάνουν host τον Openstack και κάνουν report και μετρικά από τον hypervisor για κάθε VM κάθε χρήστη. Το UI βρίσκεται στο [https://termi7.cslab.ece.ntua.gr/ganglia/](https://termi7.cslab.ece.ntua.gr/ganglia/) (**Μάλλον deprecated**). Για τα monitoring metrics των VM, επιλέγουμε την καρτέλα "Views" και επιλέγουμε το username μας από τη λίστα αριστερά. Αν δεν βρίσκεται το username μας ακόμα εκεί (ενώ έχουμε openstack account), περιμένουμε να φανεί (εντός 6 ωρών θα εμφανιστεί). == Performance (Deprecated) == Σε περίπτωση που το Disk IO αναμένετε να είναι υψηλό, συνίσταται (ένθερμα) να φτιάχνετε VMs που ζουν στο δικό τους volume, αντί να κάνετε boot από τα "παραδοσιακά images" (ask ggian for more details..). Update: τα volumes τείνουν να εμφανίζουν stability issues across reboots, για αυτό καλό είναι να τα αποφεύγουμε. == Καλές πρακτικές == Εδώ γράφουμε καλές πρακτικές για την αποδοτικότερη διαχείριση των resources μας. * Αν θέλουμε να φτιάξουμε ένα cluster, συνίσταται η χρησιμοποίηση των snapshots. Συγκεκριμένα, έστω ότι θέλουμε να φτιάξουμε ένα Hadoop cluster. Φτιάχνουμε τον master και 1 slave, κρατάμε snapshot του slave και μετά bootαρουμε νέα VMs με βάση το snapshot αυτό. * Αν έχουμε κατασκευάσει ένα cluster και δεν το χρησιμοποιούμε για κάποιο χρονικό διάστημα, τότε καλό θα είναι να κάνουμε poweroff τα VMs για να απελευθερώσουμε πόρους για άλλους χρήστες. ---- == Old version (Deprecated -- Παραμένει για reference) == === Δημιουργία λογαριασμού === Στέλνουμε e-mail στο admins@… === Συνοπτικές οδηγίες χρήσης User Interface === * Πηγαίνουμε στο [http://termi2.cslab.ece.ntua.gr/ termi2] * Δίνουμε το username και τον κωδικό μας * Φτιάχνουμε ένα κλειδί (όχι απαραίτητο, αλλά επιθυμητό) πηγαίνοντας στο Access&Security και κάνοντας κλικ στο Create Keypair. Αποθηκεύουμε το .pem που θα μας επιστραφεί. Για να ξεκινήσουμε VMs: * Πηγαίνουμε στο Images & Snapshots * Επιλέγουμε το Image που χρειαζόμαστε (στην περίπτωσή μας το Hama- έχει τα πάντα) και πατάμε στο Launch δεξιά του. * Συμπληρώνουμε τα στοιχεία με προσοχή στο dialog που εμφανίζεται. Σημαντικά είναι τα Flavor (πόσα CPUs και μνήμη θα έχει το καινούριο instance) το keypair (βάζουμε αυτό που φτιάξαμε προηγουμένως) και το instance count (πόσα θέλουμε δλδ). * Κάνουμε κλικ στο Launch Instance και περιμένουμε να γίνουν running. Για πρόσβαση στα VMs χρειαζόμαστε πρόσβαση στο termi2 (με τις IPv4 διευθύνσεις τους). Οπότε κάνουμε ssh πρώτα στο termi2 και μετά ssh στο VM μας. Αν είμαστε στο εργαστήριο, μπορούμε να χρησιμοποιήσουμε και την IPv6 διεύθυνση του VM από το μηχάνημά μας απευθείας. Για να τη βρούμε, μπαίνουμε πρώτα από termi2 στο VM και τρέχουμε: {{{ \# ifconfig | grep inet6 | grep Scope:Global | grep ff:fe | awk '{print $3}' | cut -d/ -f1 }}} === Συνοπτικές οδηγίες χρήσης EC2 API (euca2ools) === Από τη στιγμή που θα πάρουμε το zip με τα credentials μας, τρέχουμε: {{{ :~# sudo aptitude install euca2ools # για να βάλουμε τα euca-\* εργαλεία με τα οποία επικοινωνούμε με το OpenStack :~# unzip creds.zip :~# source creds/novarc :~# euca-describe-availability-zones verbose # μας δείχνει αν τρέχει το cluster σωστά :~# euca-describe-images # μας δείχνει τους διαθέσιμους δίσκους VMs που μπορούμε να τρέξουμε :~# euca-add-keypair # δημιουργεί ένα ζεύγος ιδιωτικού-δημόσιου κλειδιού για πρόσβαση στα VMs μας (αποθηκεύουμε το output, θα το χρησιμοποιήσουμε για πρόσβαση) :~# euca-run-instance -k -n 1 -t m1.tiny # δημιουργεί ένα vm τύπου m1.tiny από το ami που θα επιλέξουμε από το output της εντολής euca-describe-images :~# euca-describe-instances # μας δείχνει τα VMs μας και σε τι state βρίσκονται :~# euca-terminate-instances # κλείνει το VM με }}} === Συνοπτικές οδηγίες χρήσης RADOS cluster από EC2 API (euca2ools) === Το RADOS cluster στήθηκε για συγκεκριμένο τεστ, αλλά μάλλον θα παραμείνει για γενική χρήση. Ακολουθούν γενικές οδηγίες για τη χρήση του από euca2ools (συστήνεται): {{{ $ euca-create-volume -z nova -s 10 #(δημιουργία ενός νέου volume 10 GB) $ euca-describe-volumes #(διαθέσιμα volumes - Προσοχή: δεν υπάρχουν πληροφορίες χρήστη) $ euca-attach-volume -i -d #(κάνουμε attach το δίσκο στο VM με id i-XXX. To -d χρειάζεται αλλά "αγνοείται" από το VM, οπότε οι δίσκοι γίνονται mount με τη σειρά vdb/vdc etc. ανeξάρτητα από το όρισμα.) }}} Από το VM: `\# fdisk/mkfs/mount/... /dev/vdb` Όταν έχουμε τελειώσει με τη χρήση, κάνουμε: {{{ \# umount /dev/vdb ... $ euca-detach-volume }}} και μπορούμε μετά να ξαναβάλουμε το δίσκο σε όποιο VM θέλουμε, μαζί με τα δεδομένα φυσικά. Για να τον σβήσουμε τρέχουμε: `$ euca-delete-volume ` === Διαθέσιμα μεγέθη VMs (flavors) === {{{ m1.tiny: Memory: 512MB, VCPUS: 1, Storage: 0GB, FlavorID: 1, Swap: 0GB, RXTX Quota: 0GB, RXTX Cap: 0MB m1.small: Memory: 2048MB, VCPUS: 1, Storage: 0GB, FlavorID: 2, Swap: 0GB, RXTX Quota: 0GB, RXTX Cap: 0M m1.medium: Memory: 4096MB, VCPUS: 2, Storage: 0GB, FlavorID: 3, Swap: 0GB, RXTX Quota: 0GB, RXTX Cap: 0MB m1.large: Memory: 8192MB, VCPUS: 4, Storage: 0GB, FlavorID: 4, Swap: 0GB, RXTX Quota: 0GB, RXTX Cap: 0MB m1.xlarge: Memory: 16384MB, VCPUS: 8, Storage: 0GB, FlavorID: 5, Swap: 0GB, RXTX Quota: 0GB, RXTX Cap: 0MB }}} === Σύνδεση από το σπίτι με την ipv6 === 2 τρόποι, ο δύσκολος είναι να κάνουμε ένα ssh tunnel ανάμεσα στο PC μας και το VM μέσω ενός μηχανήματος στο εργαστήριο στο οποίο έχουμε πρόσβαση από το σπίτι \*ΚΑΙ\* έχει ipv6 διεύθυνση. Τότε, κάνουμε ένα tunnel ανά πόρτα στην οποία θέλουμε να συνδεθούμε ως εξής: `\# ssh -L :\[\]: @` Αφήνουμε ανοιχτό το tunnel και όταν θα συνδεόμαστε στην πόρτα localhost: θα βλέπουμε την απομακρυσμένη πόρτα στο μηχάνημα. Ο δεύτερος τρόπος, πιο εύκολος, είναι να χρησιμοποιήσουμε ένα από τα attached scripts στη σελίδα. === Scripts === Attached script για χρήση 6to4 από το σπίτι (για Fedora 18 και Ubuntu 12.10).