In questo HowTo eseguiremo una installazione di test di OpenStack Nova utilizzando Ubuntu Server 10.10 nella versione a 64 bit e un comodo script di autoinstallzione. Nell’HowTo installeremo innanzi tutto quello che sarà il cloud controller ma che ora fungerà anche da server di calcolo.
Questo HowTo è liberamente tratto da questo articolo.
Il cloud controller è il server che si occupa di gestire il cloud. Per semplicità useremo un unico server con un indirizzo ip statico “pubblico” (172.16.0.1), anche se è ovvio che nel caso di installazioni di cloud in produzione, anche questo server dovrà essere ridondato adeguatamente.
Per eseguire i comandi citati in questo articolo, è necessario essere “root”; visto che Ubuntu non consente l’accesso all’utente root, dopo il login utente è necessario lanciare
sudo su -
Innanzi tutto è necessario installare Ubuntu Server base (senza alcun modulo aggiuntivo) sul server, scegliendo la lingua inglese per una questione di compatibilità con lo script di installazione.
Al termine dell’installazione, aggiorniamo il sistema ed installiamo alcuni pacchetti utili per la gestione del server:
apt-get update apt-get upgrade apt-get install ssh ntp mc
Utilizzaremo due interfaccie di rete: una “pubblica” attraverso la quale sarà possibile interfacciarsi con le macchine virtuali (eth0) e una seconda attraverso la quale il server comunicherà con Internet in dhcp. Come già detto, nell’esempio utilizzeremo l’ip 172.16.0.1 per ‘interfaccia “pubblica”:
/etc/network/interfaces
auto eth0
iface eth0 inet static
address 172.16.0.1
netmask 255.255.255.0
auto eth1
iface eth1 inet dhcp
A questo punto riavviamo il server:
reboot
Una volta completato il riavvio procediamo al download dello script di installazione e lanciamolo:
wget --no-check-certificate http://www.hybridclouds.co.uk/OSinstall.sh bash ./OSinstall.sh -A $(whoami)
Attenzione: lo script presuppone di installare una rete “privata” per le VM sulla subnet 10.0.0.0/8. Se la vostra rete internet è all’interno della stessa subnet, è necessario modificare il comando di installazione in:
bash ./OSinstall.sh -A $(whoami) -N 192.168.0.0/16
Al termine del processo di installazione, il sistema è completo, per cui procediamo ad un minimo di configurazione in modo da testare il sistema appena installato.
Nel prossimo passo creeremo un nuovo utente, un nuovo progetto e un nuovo certificato per il progetto: l’autenticazione sui progetti di OpenStack avviene sempre utilizzando certificati e non password.
ADMIN=$(whoami)
sudo nova-manage user admin ${ADMIN}
sudo nova-manage project create myproject ${ADMIN}
sudo nova-manage project zipfile myproject ${ADMIN}
mkdir -p cloud/creds
cd cloud/creds
unzip ~/nova.zip
. novarc
cd
euca-add-keypair openstack > ~/cloud/creds/openstack.pem
chmod 0600 cloud/creds/*
OpenStack crea automaticamente delle regole a livello di iptables in modo da bloccare l’accesso via rete alle VM. Creaiamo quindi le regole necessarie per accedere alle nostre VM in SSH e permettere il comando ping:
euca-authorize default -P tcp -p 22 -s 0.0.0.0/0 euca-authorize default -P icmp -t -1:-1
Ora scarichiamo da internet una immagine di test e pubblichiamola sul server:
image="ttylinux-uec-amd64-12.1_2.6.35-22_1.tar.gz" wget http://smoser.brickies.net/ubuntu/ttylinux-uec/$image uec-publish-tarball $image mybucket
L’output di quest’ultimo comando sarà simile al seguente:
Fri Mar 18 09:25:56 CET 2011: ====== extracting image ====== kernel : ttylinux-uec-amd64-12.1_2.6.35-22_1-vmlinuz ramdisk: ttylinux-uec-amd64-12.1_2.6.35-22_1-initrd image : ttylinux-uec-amd64-12.1_2.6.35-22_1.img Fri Mar 18 09:25:56 CET 2011: ====== bundle/upload kernel ====== Fri Mar 18 09:25:58 CET 2011: ====== bundle/upload ramdisk ====== Fri Mar 18 09:26:00 CET 2011: ====== bundle/upload image ====== Fri Mar 18 09:26:03 CET 2011: ====== done ====== emi="ami-771e27bf"; eri="ari-06ab74e9"; eki="aki-604201bc";
Prestare attenzione all’ultima riga: il valore “emi” (ami-771e27bf nel mio caso) è l’identificativo interno della VM. Per avviare la VM, quindi, lanciamo:
euca-run-instances ami-771e27bf -k openstack -t m1.tiny
Sostituendo il primo parametro con il vostro valore di “emi”.
Dopo qualche secondo, lanciamo il seguente comando:
euca-describe-instances RESERVATION r-ordxigwy myproject default INSTANCE i-00000001 ami-771e27bf 192.168.0.3 192.168.0.3 running openstack (myproject, nova-cc) 0 m1.tiny 2011-03-18T08:26:57Z nova
Verificare lo stato (running) e l’indirizzo IP assegnato alla macchina (192.168.0.3). Ora verifichiamo l’effettivo funzionamento della VM entrando in SSH dal server:
ssh -i cloud/creds/openstack.pem root@192.168.0.3
Verificato che tutto funzioni regolarmente, usciamo dalla console ssh con
exit
Una VM che “vive” in OpenStack ma alla quale non è possibile accedere dall’esterno può essere utile solo a scopi particolari, ma nella maggior parte dei casi è necessario assegnarle un secondo indirizzo ip “esterno”. Creiamo quindi una nuova subnet all’interno del nostro sistema cloud:
nova-manage floating create cloud1 172.16.0.0/24
e assegnamo alla nostra VM un indirizzo IP “pubblico”:
euca-associate-address -i i-00000001 172.16.0.3
Ora la nostra VM è accessibile anche dall’esterno:
ssh -i cloud/creds/openstack.pem root@172.16.0.3
Ammettiamo ora di avere un PC client linux collegato all’eth0 del cloud con IP 172.16.0.100, ad esempio il PC con il quale avete configurato il sistema. Copiamo quindi i file di autenticazione del progetto su questo PC:
scp -r user@172.16.0.100:cloud/creds .
Lanaciamo nuovamente l’ultimo ssh, questa volta però dal PC client:
ssh -i cloud/creds/openstack.pem root@172.241.0.3
A testimonanza che l’intero progetto è controllabile dall’esterno, lanciamo sul client Linux i seguenti comandi:
sudo apt-get install euca2ools . cloud/creds/novarc euca-describe-instances euca-terminate-instances i-00000001
[...] OpenStack Glance, il componente di OpenStack in grado di interfacciarsi con il pool di server Nova per fornire loro le immagini delle macchine [...]