Installazione di OpenStack Nova (1)

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”:

<strong>/etc/network/interfaces</strong>
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