Report Progetto OpenNebula
Transcript
Report Progetto OpenNebula
Report Progetto OpenNebula Buzzoni M.#1, Dalpasso N.#2, Limone. G.P.#3 Milioli L.#4 Università degli Studi di Bologna - Dipartimento Scienze dell'Informazione - Laurea Magistrale Informatica a.a. 2011/2012 Bologna, Italia {marco.buzzoni2, nicola.dalpasso, gianpiero.limone, luca.milioli}@studio.unibo.it Abstract— Con il presente documento si intende illustrare il lavoro di installazione e configurazione di una cloud tramite il software OpenNebula e qemu-kvm come driver di virtualizzazione. Keywords— cloud, virtualizzazione, opennebula, jboss, kvm I. Introduzione Con il termine Cloud Computing si intende un sistema distribuito di calcolatori elettronici che fornisce servizi software tramite il modello commerciale definito “Pay As You Go”. OpenNebula è un software open-source atto a creare e gestire una cloud di tipo Infrastructure as a Service (IaaS), garantendo integrità di lavoro anche nel caso di utilizzo di macchine eterogenee dal punto di vista hardware e software. I requisiti previsti dai cluster sono il kernel Linux ed il supporto hardware alla virtualizzazione. Attraverso il seguente report verrà presentato come sono stati utilizzati OpenNebula e qemu-kvm al fine di creare una piccola cloud. Per quanto riguarda l'applicativo utilizzato nelle macchine virtuali è stata scelto l'Application Server JBoss. II. Hardware e Software L'architettura di OpenNebula prevede la seguente distinzione tra le varie macchine impiegate: una macchina master, definita frontend, sulla quale è installato il software OpenNebula, tramite la quale è gestita l'intera cloud, ed un insieme di macchine host, sulle quali vengono eseguite le macchine virtuali. Altre tipologie di macchine possono essere adibite a scopi specifici, quali la fornitura di file system condiviso, ad esempio Network File System (NFS). Di seguito sono elencate le caratteristiche hardware e software delle macchine utilizzate: Frontend • CPU: Intel® T2300 @1.66 GHz • Memoria: 1GB • Sistema Operativo: Ubuntu 12.04, 32bit, kernel GNU/Linux 3.2.0 Host #1 • CPU: Intel® T7300 @2.00 GHz • Memoria: 4GB • Sistema Operativo: Ubuntu 12.04, 32bit, kernel GNU/Linux 3.2.0 Host #2 • • • CPU: Intel® T9400 @2.53 GHz Memoria: 4GB Sistema Operativo: LinuxMint 12, 64bit, kernel GNU/Linux 3.2.0 Le macchine sono tra loro collegate tramite una rete LAN Ethernet utilizzando indirizzi IP statici; tale scelta è dovuta al fatto che OpenNebula deve essere in grado di risolvere i nomi degli host, e questa soluzione prevede il non utilizzo di un Server DNS. III. Configurazione Frontend e Host Frontend e host presentano una configuarzione comune di base, seguita da modifiche specifiche a seconda dello scopo d'uso. A. Configurazione Comune Gli host ed il frontend sono aggiunti all'infrastruttura di OpenNebula utilizzando gli hostname delle rispettive macchine, pertanto ognuno deve essere in grado di risolverne i nomi; questo può essere fatto, ad esempio, tramite DNS. È stato seguito un approccio semplice, ma meno flessibile, aggiungendo le associazioni Indirizzo IP-Hostname all'interno del file /etc/hosts: 192.168.13.1 192.168.13.2 192.168.13.3 192.168.13.4 gothicdream-fisso biondo pc-compaq gothicdream-notebook È stato creato l'utente oneadmin con gruppo primario cloud i cui rispettivi UID e GID devono essere gli stessi in tutte le macchine. Come home directory è stata utilizzata /var/lib/one. L'utente oneadmin deve utilizzare come shell predefinita /bin/bash. Tra le macchine è stato necessario stabilire una sessione remota cifrata, tramite protocollo Secure Shell (SSH), creando le chiavi per l'utente oneadmin: $ ssh-keygen $ ssh-copy-id oneadmin@localhost $ ssh-copy-id oneadmin@otherhost dove otherhost indica gli altri host. Anche se non strettamente necessario, per motivi di configurazione di file, abbiamo concesso tutti i permessi all'utente oneadmin cambiando il file /etc/sudoers: oneadmin ALL=(ALL) ALL C. Configurazione Host B. Configurazione Frontend In OpenNebula sono possibili due modalità di installazione per la macchina frontend: System-wide e Self-contained. Adottando la prima modalità i file eseguibili, di configurazione e di log vengono installati nelle posizioni standard di UNIX; con la seconda trovano posto all'interno di una directory scelta dall'utente. È stata decisa la Selfcontained, in particolare, utilizzando la home di oneadmin come directory di installazione. Tramite compilazione dei sorgenti, sulla macchina frontend è stato installato il software, aggiornato alla versione 3.4.1, di Opennebula. Per prima cosa sono stati installati i pacchetti necessari alla sua compilazione: $ sudo apt-get install g++ libxmlrpc-c3-dev scons libsqlite3-dev libmysqlclient-dev libxml2-dev libssl-dev ruby (>= 1.8) sqlite3 ruby-sqlite3 Per la compilazione sono stati eseguiti i seguenti comandi come utente oneadmin: $ tar xzf opennebula-3.4.1.tar.gz $ cd opennebula-3.4.1 $ scons [ … ] scons: done building targets. $ ./install.sh -d /var/lib/one Per garantire i permessi all'utente oneadmin nell'esecuzione di macchine virtuali tramite KVM è necessario aggiungerlo ad i gruppi libvirtd e kvm. Sono state richieste modifiche a tre file di configurazione all'interno della cartella /etc/libvirt. Di seguito sono riportate le modifiche per ciascun file rispetto alla configurazione predefinita: 1) libvirtd.conf • • • • • listen_tls = 0 listen_tcp = 1 unix_sock_group = "cloud" unix_sock_ro_perms = "0777" unix_sock_rw_perms = "0777" 2) lxc.conf • • • • log_with_libvirtd = 1 export ONE_LOCATION="/var/lib/one" export ONE_AUTH="$ONE_LOCATION/.one/one_auth" export ONE_XMLRPC='http://localhost:2633/RPC2' if [ -d "$ONE_LOCATION/bin" ] ; then PATH="$ONE_LOCATION/bin:$PATH" fi export PATH="/var/lib/gems/1.8/bin":$PATH È dunque possibile avviare OpenNebula tramite il comando: user = "oneadmin" group = "cloud" dynamic_ownership = 0 Ulteriori modifiche sono anche state apportate al file /etc/init/libvirt-bin.conf aggiungendo l'opzione -l all'istruzione exec /usr/bin/libvirtd -d -l. Un ulteriore requisito per le macchine host è la versione di ruby che deve essere ≥ 1.8 . > Tale file viene utilizzato pure per le successive autenticazioni dell'utente amministratore. Il software necessita il settaggio di particolari variabili d'ambiente; è stato quindi modificato il file ~/.bashrc : $ one start mentre per terminarne l'esecuzione: $ one stop $ sudo apt-get install qemu-kvm libvirt-bin ubuntu-vm-builder bridge-utils 3) qemu.conf dove -d indica la cartella dove verrà installato OpenNebula. Di default l'utente e il gruppo che sarà abilitato ad eseguire OpenNebula sono gli stessi dell'utente che esegue lo script. OpenNebula prevede un proprio sistema interno di utenti e gruppi. In questa fase è dunque necessario creare l'utente amministratore di OpenNebula (da non confondere con l'utente oneadmin). Le credenziali (username:password) di tale utente sono fornite direttamente a OpenNebula: $ mkdir .one $ echo "oneadmin2:password2" ~/.one/one_auth $ chmod 600 ~/.one/one_auth OpenNebula supporta tre sistemi di virtualizzazione: KVM, Xen e VMware. Sulle macchine host utilizzate è stato scelto l'utilizzo di KVM; i pacchetti installati a tale scopo sono: IV. Software Aggiuntivo A. OpenNebula Sunstone Esiste un interfaccia grafica chiamata OpenNebula Sunstone, ovvero un server web installabile sia su frontend che su una macchina diversa. Come requisito è stato installato il pacchetto rubygems ed eseguito il seguente script: $ ./share/install_gems sunstone la cui locazione coincide con la cartella d'installazione. Rispettivamente, il software si avvia e termina tramite i comandi: $ sunstone-server start $ sunstone-server stop La porta di default utilizzata è la numero 9869. B. VNC È possibile collegarsi alle macchine virtuali di OpenNebula tramite client Virtual Networ Computing (VNC), ad esempio utilizzando gtkvncviewer. È inoltre disponibile un client VNC utilizzabile direttamente all'interno dell'interfaccia di Sunstone. Prima dell'installazione del client occorre installare curl, procedendo, infine, con il comando: $ ./install_novnc.sh Di default la porta utilizzata dal server VNC è 5900+VMID, dove VMID è l'ID della macchina virtuale in esecuzione, anche se possibile è specificare manualmente la porta di ascolto in modo manuale. pagina di benvenuto situata in ./welcomecontent/index.html, di cui è stato modificato il contenuto in vista della presentazione. Digitando l'url http://localhost:8080 con un browser web (nello specifico ELinks) è possibile visualizzarla. Per terminare JBoss, nel caso non sia eseguito in background, è possibile utilizzare CTRL-C; differentemente è possibile eseguire il comando: $ ./jboss-cli.sh --connect command=:shutdown dopo essersi spostati nella cartella bin. C. NFS Si tratta di un file system condiviso utile per la live migration ma non essenziale per le altre funzionalità, per le quali è sufficiente SSH. Quest'ultimo velocizza le operazioni locali ma impiega sensibilmente più tempo ad effettuare le operazioni di deployment e shutdown della macchina virtuale. Per ragioni di comodità il server NFS può essere installato anche su un host diverso dal frontend; nello specifico è stato installato tale server sul frontend stesso. Come cartella condivisa per NFS è stata scelta /var/lib/one. Lato Server: dopo aver installato il pacchetto nfskernel-server è necessario effettuare le seguenti modifiche al file /etc/default/nfs-common: NEED_IDMAPD=yes NEED_GSSD=no ed esportare la cartella /var/lib/one. A tal fine nel file /etc/exports è stata aggiunta la riga: /var/lib/one *(rw,async,no_root_squash, no_subtree_check,anonuid=2000,anongid=2000) eseguendo successivamente il comando: $ sudo exportfs -r per aggiornare la lista dei filesystem esportati da NFS. Lato Client: dopo aver installato il pacchetto nfscommon è necessario abilitare IDMAPD modificando il file nfs-common, come spiegato nel paragrafo relativo al server NFS. Per montare la cartella si esegue: $ sudo mount -t nfs frontend:/var/lib/one /var/lib/one all'avvio dell'host. V. Virtualizzazione A. Immagine Utilizzata Per creare l'immagine virtuale abbiamo utilizzato la GUI fornita da Virtual Machine Manager che a sua volta si appoggia a libvirt. Si è installato il sistema operativo Ubuntu 10.04 Alternate 32 bit privo di GUI su un disco fisso virtuale di 3GB, lasciando la configurazione di default fornita da Virtual Machine Manager. Una volta lanciata l'immagine virtuale è stato scaricato JBoss (v 7.1) e decompresso l'archivio. Per avviare il server JBoss si ha eseguito lo script standalone.sh situato nella sottocartella bin della cartella ottenuta dopo l'estrazione dell'archivio. Una volta avviato è possibile raggiungere la B. Importazione dell'immagine virtuale in OpenNebula L'immagine è stata aggiunta ad OpenNebula tramite Sunstone. È stata decisa la configurazione di default tranne nel caso del driver utilizzato per la creazione dell'immagine, per il quale è stato optato raw, scelta predefinita in Virtual Manager. La seconda ed ultima modifica consiste nell'abilitazione della modalità persistente, con la quale le macchine virtuali utilizzano l'immagine stessa invece di lavorare su una copia di essa generata dinamicamente. Ciò permette di effettuare modifiche all'immagine avviandola dalle macchine virtuali di OpenNebula e di risparmiare il tempo necessario all'avvio della macchina virtuale per la creazione della copia. C. Preparazione della macchina virtuale tramite Sunstone Utilizzando Sunstone è stato creato un template per le macchine virtuali con la seguente configurazione: • tipo: KVM • memoria: 512MB • disco: immagine precedentemente creata contenente JBoss Riguardo a VNC sono stati scelti come indirizzo di ascolto 0.0.0.0 e come porta 5900. Sono stati lasciati i valori di default per le rimanenti opzioni. VI. Preparazione Cluster Sono stati aggiunti gli host (utilizzando come nomi i rispettivi hostname) al cluster di default di OpenNebula utilizzando Sunstone, specificando KVM per la virtualizzazione. È stato lasciato il valore di default per le rimanenti voci. A questo punto risulta possibile avviare una macchina virtuale istanziando il template precedentemente creato. VII. Problemi e considerazioni Riguardo la configurazione della rete è stato inizialmente pensato l'utilizzo di una rete wireless Ad-Hoc, ma ciò non è stato possibile causa il mancato supporto di tale configurazione hardware di un host. Un router Ethernet ha sostituito tale tipologia di rete. Grazie a questo è stato possibile utilizzare contemporaneamente la configurazione di rete necessaria per OpenNebula e al contempo utilizzare l'interfaccia wireless per l'accesso ad internet su tutte le macchine. Il corretto funzionamento dell'intera infrastruttura è totalmente dipendente dalle versioni dei software. Inizialmente gli host montavano: • libvirt-bin: v 0.8.3 • qemu-kvm: v 0.16.5 • qemu-utils: v 0.12.5 • qemu-common: v 0.12.5 • OpenNebula. v 2.2.1 e ciò comportava problemi durante il deployment e la migrazione, live e non, delle macchine virtuali. Tali problemi sono stati risolti utilizzando le versioni disponibili da repository per Ubuntu 12.04 e Mint 12: • libvirt-bin: v 0.9.8 • qemu-kvm: v 1.0 • qemu-utils: v 1.0 • qemu-common: v 1.0 • OpenNebula: v 3.4.1 Esclusivamente durante la live migration è stato riscontrato un errore risolto in seguito modificando nello script /var/lib/one/lib/sh/scripts_common.sh il valore della variabile SCP da scp a scp -R. Riferimenti • • • • Ubuntu Documentation - "KVM" https://help.ubuntu.com/community/KVM/ Ubuntu Documentation - "SettingUpNFSHowTo" https://help.ubuntu.com/community/SettingUpNFSHowT o OpenNebula.org - "OpenNebula Documentation" http://opennebula.org/documentation:rel3.4 JBoss Community – "JBoss Application Server 7" http://www.jboss.org/as7