Se avete seguito l’HowTo su OpenNebula del precedente articolo, ora avete un sistema di cloud formato da un controller e due nodi, perfettamente funzionante e completamente fault tolerant.
In questo howto useremo OpenSolaris per creare uno storage NFS4; alla base del datastore ci sarà ZFS che incorpora le funzionalità di snapshooting e modificheremo i driver NFS di OpenNebula per utilizzare gli snapshot in fase di deploy al posto della copia fisica: per una VM con un disco di 4 GB i tempi di deploy passeranno da circa 2 minuti a circa un secondo!
Questo articolo è tratto da questo blog.
Installazione dello storage server
Partiamo da una installazione pulita di OpenSolaris e, attraverso l’apposito pannello, assegnamo un indirizzo IP statico. In questo esempio assumiamo di usare l’IP 172.16.0.250 con la configurazione degli altri host dell’articolo precedente.
Inoltre, modifichiamo il file /etc/hosts per aggiungere gli altri host:
/etc/hosts
172.16.0.1 cloud-cc
172.16.0.2 cloud-01
172.16.0.3 cloud-02
Quindi creiamo la configurazione dell’utente rispettando uid e gid del precedente articolo aprendo una shell e lanciando i seguenti comandi:
pfexec groupadd -g 1001 cloud
pfexec useradd -u 1001 -g cloud -d /srv/cloud/one -s /bin/bash oneadmin
Ora è il momento di creare la configurazione NFS:
pfexec zfs create rpool/export/home/cloud
pfexec zfs set mountpoint=/srv/cloud rpool/export/home/cloud
pfexec zfs create rpool/export/home/cloud/images
pfexec zfs create rpool/export/home/cloud/one
pfexec zfs create rpool/export/home/cloud/one/var
pfexec chown -R oneadmin:cloud /srv/cloud
pfexec zfs set sharenfs='rw=@172.16.0.0/24' rpool/export/home/cloud
cat /var/run/nfs4_domain # Segnarsi il risultato di quest'ultimo comando
Bene, la configurazione dello storage è ultimata.
Modifica della configurazione dei nodi del cloud per montare lo storage NFS
E’ necessario modificare la configurazione dei tre server del precedente esempio per poter sfruttare il nuovo storage.
Innanzi tutto, sui due nodi di calcolo smontiamo la directory condivisa:
umount /srv/cloud
Sul nodo controller, invece, spostiamo la directory con tutti i file di opennebula in un luogo diverso:
mv /srv/cloud /srv/cloud.old
mkdir /srv/cloud
leviamo la riga dal file /etc/export e lanciamo
exportfs -a
Ora configuriamo tutti i 3 server per accedere allo storage; modifichiamo innanzi tutto il file /etc/export per montare il filesystem nfs in /srv/cloud. Nel caso del colud controller questa riga anfrà aggiunta, nel caso dei due nodi di calcolo bisognerà modificare la vecchia riga. Attenzione che nel caso precedente il filesystem esportato era nfs3 mentre in questo caso sarà nfs4.
/etc/fstab
172.16.0.250:/srv/cloud /srv/cloud/ nfs4 noauto 0 0
Inoltre bisognerà modificare il file /etc/idmapd.conf come da esempio seguente, prestando attenzione a settare Domain al valore precedentemente rilevato sul server OpenSolaris
/etc/idmapd.conf
[General]
Verbosity = 0
Pipefs-Directory = /var/lib/nfs/rpc_pipefs
Domain = mydomain.priv # Modificare questo valore
[Mapping]
Nobody-User = nobody
Nobody-Group = nobody
Come ultima cosa, bisogna modificare il file /etc/default/nfs-kernel-server per abilitare il demone idmapd:
/etc/default/nfs-kernel-server
NEED_IDMAPD=yes
NEED_STATD=
STATDOPTS=
A questo punto riavviamo il demone nfs-common e montiamo lo storage:
/etc/init.d/nfs-common restart
mount /srv/cloud
Sul cloud controller, infine, spostiamo tutti i file si OpenNebula dalla directory temporanea allo storage sul server:
mv /srv/cloud.old/* /srv/cloud
rmdir /srv/cloud.old
A questo punto OpenNebula si comperterebbe esattamente come nella precedente installazione, però userà lo storage NFS invece del filesystem locale sul cloud controller. Vediamo ora come modificare il setup di default per utilizzare le possibilità offerte da ZFS… e qui il gioco si fa davvero duro!
Innanzi tutto, sullo storage OpenSolaris lanciamo il seguente comando per consentire all’utente oneadmin di gestire gli snapshot con ZFS:
pfexec zfs allow oneadmin clone,create,mount,share,sharenfs rpool/export/home/cloud
Creiamo quindi uno storage ZFS all’interno del quale sposteremo i file relativi alla VM creati nel precedente articolo:
pfexec zfs create rpool/export/home/cloud/images/lenny
pfexec mv /srv/cloud/images/debian/* /srv/cloud/images/lenny
pfexec rmdir /srv/cloud/images/debian
Condizione essenziale per il funzionamento dello script è che il file dell’immagine del disco si chiami disk.0.
A questo punto creiamo un “golden snapshot” della nostra immagine, che sarà clonata per tutte le istanze delle macchine virtuali che andremo ad allocare ai nostri utenti:
pfexec zfs snapshot rpool/export/home/cloud/images/S10U8@gold
Ultima cosa da fare è verificare che i nodi possano accedere in ssh anche allo storage come user “oneadmin” senza usare la password. Bisogna prima aver aggiunto la riga corrispondente nel file /srv/cloud/one/.ssh/authorized_keys
ssh 172.16.0.250 echo > /dev/null && echo success
Ora bisognerà sostituire sul cloud controller gli script per clonare una VM e per cancellare una VM con questi… ed il gioco è fatto!