Guida di installazione dell'infrastruttura di cloud per il progetto Marche Cloud
Ver. 0.3 - 2013-02-27
Testbed
Tabella Hostnames / IPs dei server che compongono l'infrastruttura pilota
Per il funzionamento dell’infrastruttura la configurazione di rete prevede l’uso di tre sottoreti:
- Management network - 192.168.200.0/24
- Utilizzata per la comunicazione tra i servizi di openstack. Questa rete dovrebbe essere accessibile solo all’interno del data center
- Data network - 192.168.122.0/24
- è la rete utilizzata per assegnare ip privati alle macchine virtuali.
- External network - 10.101.8.0/24
- è la rete definita “pubblica”. Viene usata per permettere alle VM di comunicare con le reti esterne all’infrastruttura.Inoltre, da questa sottorete vengono prelevati gli indirizzi di rete pubblici da usare come “floating IP” da assegnare dinamicamente alle VM.
La seguente figura illustra questo setup:
Controlli preliminari dell'ambiente software da effettuare su ogni server
Operazioni preliminari effettuate su tutti i server
- Verifica del risoluzione degli hostname. E' stato modificato il file
/etc/hosts.conf
come segue per una corretta risoluzione.
# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.200.21 mcloud01.regionemarche.intra mcloud01
192.168.200.22 mcloud02.regionemarche.intra mcloud02
192.168.200.23 mcloud03.regionemarche.intra mcloud03
192.168.200.24 mcloud04.regionemarche.intra mcloud04
- Installazione di alcuni pacchetti sui S.O. mancanti, ma utili per il lavoro di installazione e configurazione:
yum install openssh-clients system-config-lvm vim-enhanced xorg-x11-xauth ntp avahi libvirt libvirt-python libvirt-client
- Configurazione servizio
ntp
. La sincronizzazione dei server è essenziale per il corretto funzionamento di openstack. Al file di configurazione /etc/ntp.conf
è stato aggiunta la riga server 10.101.12.49
e successivamente riavviato il servizio.
# chkconfig ntpd on
# service ntpd restart
- Installazione del repository EPEL
# rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
# yum clean all
# yum update
- E' consigliabile fare un reboot successivamente al comando
yum update
- I servizi
iptables
e SELinux
risultavano abilitati e sono stati spenti.
- Per disattivare completamente SELinux occorre editare
/etc/sysconfig/selinux
, mettere SELINUX=disabled
e fare il reboot dei server. Per iptables:
# /etc/init.d/iptables stop
# chkconfig iptables off
Il sito ufficiale di GlusterFE è
http://www.gluster.org/
. La documentazione per GlusterFS è disponibile in
http://www.gluster.org/community/documentation/index.php/Gluster_3.2_Filesystem_Administration_Guide
Al momento dell'installazione, nel repository EPEL era disponibile la versione GlusterFS 3.2.
La seguente documentazione riporta le operazioni fatte sui server a disposizione e non sostituisce la documentazione ufficiale di GlusterFS.
Installazione pacchetti GlusterFS
Installare tramite
yum
i pacchetti del server GestioneServiziGenerali.GlusterFS sui nodi che comporranno il filesystem distribuito
# yum install glusterfs-fuse glusterfs-server glusterfs-vim
Far partire il servizio
glusterd
appena installato
# /etc/init.d/glusterd start
Permettere che i servizi
glusterd
e
glusterfsd
vengano avviati di default al riavvio dei server
# chkconfig glusterd on
# chkconfig glusterfsd on
Creazione di un trusted storage pool
Prima di configurare un volume GestioneServiziGenerali.GlusterFS è necessario creare un trusted storage pool, contenente i server che comporranno il volume.
Per permettere la condivisione del filesystem tra i nodi desiderati eseguire,
su uno qualsiasi dei nodi, il comando
gluster peer probe <HOSTNAME_NODE>
per ognuno degli altri nodi.
Ad esempio in un pool di quattro nodi (come nell'infrastruttura
MarcheCloud) eseguire sull'host
192.168.200.21
:
# gluster peer probe 192.168.200.22
# gluster peer probe 192.168.200.23
# gluster peer probe 192.168.200.24
Per controllare che la creazione del pool sia andata a buon fine, lanciare il comando
gluster peer status
su uno dei nodi. In output verrà visualizzata la composizione del pool.
Ad esempio lanciandolo su
192.168.200.21
si otterrà:
# gluster peer status
Number of Peers: 3
Hostname: 192.168.200.23
Uuid: c170f9ab-21f9-4382-98a7-cdff443fc696
State: Peer in Cluster (Connected)
Hostname: 192.168.200.24
Uuid: 2a4733bf-f1e6-4e68-a526-7c52da574c23
State: Peer in Cluster (Connected)
Hostname: 192.168.200.22
Uuid: 55e2e264-4359-417d-9da2-ab7032b9a293
State: Peer in Cluster (Connected)
Creazione delle unità base di storage (Brick)
In GestioneServiziGenerali.GlusterFS un Brick è l'unità base dello storage, rappresentata da una directory su un server del trusted storage pool.
Creazione Brick per GLANCE
Nota bene:
- I nodi che compongono il volume condiviso per GLANCE sono 3 in modalità di replica
- Per GLANCE si è reputata sufficiente una dimensione di 300G (Gigabyte) per ciascun brick
- Si è scelto lv_glance come nome del volume logico
- Si è scelto /mnt/brick-glance come directory dove montare il volume logico
Ripetere il seguente set di istruzioni per
ognuno dei nodi che si intende utilizzare per comporre il filesystem per il servizio GLANCE (Image Repository) di OpenStack.
- Creare un volume logico di 300 Gigabyte:
# lvcreate -L 300G -n lv_glance <VOLUME_NAME>
dove <VOLUME_NAME> è il nome del volume fisico sul quale si intende creare il volume logico. Per capire quali sono i volumi fisici disponibili sul server lanciare il comando vgdisplay
Per controllare la corretta creazione del volume logico, digitare il comando lvs
che fornirà in output la lista dei volumi logici disponibili sul server.
- Formattare la partizione appena creata (ad esempio su filesystem ext4):
# mkfs.ext4 <LV_PATH>
dove <LV_PATH> è il percorso del volume logico ricavabile tramite il comando lvdisplay
.
- Creare la directory dove si intende montare il volume appena creato:
# mkdir /mnt/brick-glance
- Per consentire che il volume logico sia montato all'avvio del server, editare il file
/etc/fstab
aggiungendo la seguente riga:
<LV_PATH> /mnt/brick-glance ext4 defaults 1 1
- Montare il volume:
# mount –a
Creazione Brick per NOVA
Nota bene:
- I nodi che compongono il volume condiviso per NOVA sono 4 in modalità di replica distribuita
- Per NOVA si è reputata sufficiente una dimensione di 800G (Gigabyte) per ciascun brick
- Si è scelto lv_nova come nome del volume logico
- Si è scelto /mnt/brick-glance come directory dove montare il volume logico
Ripetere il seguente set di istruzioni per
ognuno dei nodi che si intende utilizzare per comporre il filesystem per il servizio NOVA (Compute) di OpenStack.
- Creare un volume logico di 800 Gigabyte:
# lvcreate -L 800G -n lv_nova <VOLUME_NAME>
- Formattare la partizione appena creata (ad esempio su filesystem ext4):
# mkfs.ext4 <LV_PATH>
- Creare la directory dove si intende montare il volume appena creato:
# mkdir /mnt/brick-nova
- Editare il file
/etc/fstab
aggiungendo la seguente riga:
<LV_PATH> /mnt/brick-nova ext4 defaults 1 1
- Montare il volume:
# mount –a
Creazione del volume condiviso
I Brick vengono utlizzati per comporre il volume di storage condiviso sui nodi. La creazione del volume può essere effettuata su uno qualsiasi dei nodi che compongono il trusted storage pool. Ciascun Brick è identificato dalla combinazione del nome del server con la directory da esportare, nel seguente formato
hostname.domain:/mnt/mydir .
Creazione del volume condiviso per GLANCE
Nota bene:
- I nodi che compongono il volume condiviso per GLANCE sono 3 in modalità di replica
- Il servizio GLANCE sarà installato sul server 192.168.200.21
- Si è scelto volume_glance come nome del volume condiviso
Creare il volume condiviso tramite il seguente comando:
# gluster volume create volume-glance replica 3 transport tcp \
192.168.200.22:/mnt/brick-glance \
192.168.200.23:/mnt/brick-glance \
192.168.200.24:/mnt/brick-glance
Far partire il vomune appena creato:
# gluster volume start volume-glance
Per controllare il corretto avvio del volume, digitare:
# gluster volume info
Sul server che ospiterà il servizio GLANCE (Image repository) montare il volume creato.
Editare il file
/etc/fstab
(se necessario creare la directory
/var/lib/glance/images
):
192.168.200.21:/volume-glance /var/lib/glance/images glusterfs defaults 1 1
Montare il volume condiviso:
# mount –a
Creazione del volume condiviso per NOVA
Nota bene:
- I nodi che compongono il volume condiviso per NOVA sono 4 in modalità di replica distribuita
- Il servizio NOVA sarà installato sui server 192.168.200.22, 192.168.200.23 e 192.168.200.24
- Si è scelto volume_nova come nome del volume condiviso
Creare il volume condiviso tramite il seguente comando:
# gluster volume create volume-nova replica 2 transport tcp \
192.168.200.21:/mnt/brick-nova \
192.168.200.22:/mnt/brick-nova \
192.168.200.23:/mnt/brick-nova \
192.168.200.24:/mnt/brick-nova
Far partire il vomune appena creato:
# gluster volume start volume-nova
Sui server che ospiteranno il servizio NOVA (Compute) montare il volume creato.
Editare il file
/etc/fstab
(se necessario creare la directory con il comando
mkdir -p /var/lib/nova/instances
):
<IP_ETH0>:/volume-nova /var/lib/nova/instances glusterfs defaults 1 1
Montare il volume condiviso:
# mount –a
Riepilogo configurazione del filesystem
I volumi di GlusterFS risulteranno essere i seguenti:
# gluster volume info
Volume Name: volume-nova
Type: Distributed-Replicate
Status: Started
Number of Bricks: 2 x 2 = 4
Transport-type: tcp
Bricks:
Brick1: 192.168.200.21:/mnt/brick-nova
Brick2: 192.168.200.22:/mnt/brick-nova
Brick3: 192.168.200.23:/mnt/brick-nova
Brick4: 192.168.200.24:/mnt/brick-nova
Volume Name: volume-glance
Type: Replicate
Status: Started
Number of Bricks: 3
Transport-type: tcp
Bricks:
Brick1: 192.168.200.22:/mnt/brick-glance
Brick2: 192.168.200.23:/mnt/brick-glance
Brick3: 192.168.200.24:/mnt/brick-glance
La figura successiva mostra i dettagli della composizione dei volumi e sui mount point.
A questo punto avremo le seguenti configurazioni sui vari server.
mcloud01
# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Thu May 17 04:42:07 2012
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/nova--volumes-lv_root / ext4 defaults 1 1
UUID=81dfe44d-f37c-494c-8181-6fec7c785b66 /boot ext4 defaults 1 2
/dev/mapper/nova--volumes-lv_swap swap swap defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
/dev/nova-volumes/lv_nova /mnt/brick-nova ext4 defaults 1 1
192.168.200.21:/volume-glance /var/lib/glance/images glusterfs defaults 1 1
# mount
/dev/mapper/nova--volumes-lv_root on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
/dev/sda1 on /boot type ext4 (rw)
/dev/mapper/nova--volumes-lv_nova on /mnt/brick-nova type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
192.168.200.21:/volume-glance on /var/lib/glance/images type fuse.glusterfs (rw,allow_other,default_permissions,max_read=131072)
# df -mh
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/nova--volumes-lv_root
9.9G 1.4G 8.1G 15% /
tmpfs 63G 0 63G 0% /dev/shm
/dev/sda1 1008M 75M 883M 8% /boot
/dev/mapper/nova--volumes-lv_nova
788G 197M 748G 1% /mnt/brick-nova
192.168.200.21:/volume-glance
296G 191M 281G 1% /var/lib/glance/images
mcloud02
# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Wed May 16 17:06:15 2012
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/nova--volumes-lv_root / ext4 defaults 1 1
UUID=7c003c6b-aa96-4075-9cda-6fba7cc4b710 /boot ext4 defaults 1 2
/dev/mapper/nova--volumes-lv_swap swap swap defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
/dev/nova-volumes/lv_glance /mnt/brick-glance ext4 defaults 1 1
/dev/nova-volumes/lv_nova /mnt/brick-nova ext4 defaults 1 1
192.168.200.22:/volume-nova /var/lib/nova/instances glusterfs defaults 1 1
# mount
/dev/mapper/nova--volumes-lv_root on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
/dev/sda1 on /boot type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
/dev/mapper/nova--volumes-lv_glance on /mnt/brick-glance type ext4 (rw)
/dev/mapper/nova--volumes-lv_nova on /mnt/brick-nova type ext4 (rw)
192.168.200.22:/volume-nova on /var/lib/nova/instances type fuse.glusterfs (rw,allow_other,default_permissions,max_read=131072)
# df -mh
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/nova--volumes-lv_root
9.9G 886M 8.5G 10% /
tmpfs 63G 0 63G 0% /dev/shm
/dev/sda1 1008M 75M 883M 8% /boot
/dev/mapper/nova--volumes-lv_glance
296G 191M 281G 1% /mnt/brick-glance
/dev/mapper/nova--volumes-lv_nova
788G 197M 748G 1% /mnt/brick-nova
192.168.200.22:/volume-nova
1.6T 393M 1.5T 1% /var/lib/nova/instances
mcloud03
# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Thu May 17 03:26:21 2012
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/nova--volumes-lv_root / ext4 defaults 1 1
UUID=cc735352-9441-48e3-bc4b-35399db82c27 /boot ext4 defaults 1 2
/dev/mapper/nova--volumes-lv_swap swap swap defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
/dev/nova-volumes/lv_glance /mnt/brick-glance ext4 defaults 1 1
/dev/nova-volumes/lv_nova /mnt/brick-nova ext4 defaults 1 1
192.168.200.23:/volume-nova /var/lib/nova/instances glusterfs defaults 1 1
# mount
/dev/mapper/nova--volumes-lv_root on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
/dev/sda1 on /boot type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
/dev/mapper/nova--volumes-lv_glance on /mnt/brick-glance type ext4 (rw)
/dev/mapper/nova--volumes-lv_nova on /mnt/brick-nova type ext4 (rw)
192.168.200.23:/volume-nova on /var/lib/nova/instances type fuse.glusterfs (rw,allow_other,default_permissions,max_read=131072)
# df -mh
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/nova--volumes-lv_root
9.9G 886M 8.5G 10% /
tmpfs 63G 0 63G 0% /dev/shm
/dev/sda1 1008M 75M 883M 8% /boot
/dev/mapper/nova--volumes-lv_glance
296G 191M 281G 1% /mnt/brick-glance
/dev/mapper/nova--volumes-lv_nova
788G 197M 748G 1% /mnt/brick-nova
192.168.200.23:/volume-nova
1.6T 393M 1.5T 1% /var/lib/nova/instances
mcloud04
# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Wed May 16 18:06:47 2012
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/nova--volumes-lv_root / ext4 defaults 1 1
UUID=893f9415-1029-42e2-acf7-1a0cd3ccff29 /boot ext4 defaults 1 2
/dev/mapper/nova--volumes-lv_swap swap swap defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
/dev/nova-volumes/lv_glance /mnt/brick-glance ext4 defaults 1 1
/dev/nova-volumes/lv_nova /mnt/brick-nova ext4 defaults 1 1
192.168.200.24:/volume-nova /var/lib/nova/instances glusterfs defaults 1 1
# mount
/dev/mapper/nova--volumes-lv_root on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
/dev/sda1 on /boot type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
/dev/mapper/nova--volumes-lv_glance on /mnt/brick-glance type ext4 (rw)
/dev/mapper/nova--volumes-lv_nova on /mnt/brick-nova type ext4 (rw)
192.168.200.24:/volume-nova on /var/lib/nova/instances type fuse.glusterfs (rw,allow_other,default_permissions,max_read=131072)
# df -mh
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/nova--volumes-lv_root
9.9G 886M 8.5G 10% /
tmpfs 63G 0 63G 0% /dev/shm
/dev/sda1 1008M 75M 883M 8% /boot
/dev/mapper/nova--volumes-lv_glance
296G 191M 281G 1% /mnt/brick-glance
/dev/mapper/nova--volumes-lv_nova
788G 197M 748G 1% /mnt/brick-nova
192.168.200.24:/volume-nova
1.6T 393M 1.5T 1% /var/lib/nova/instances
Installazione servizi di OpenStack
OpenStack è una suite di servizi. Nell'ambito del progetto sono stati installati i servizi minimi essenziali al raggiungimento degli obiettivi del progetto stesso e provati alcuni altri servizi e scenari di interesse per prendere familiarità e capire le potenzialità di alcune componenti. Questi scenari verranno descritti nella sezione
Use case della presente guida.
La release di OpenStack al momento disponibile nel repository EPEL è la
Folsom (code 2012.2) rilasciata nell'Ottobre 2012.
Le seguenti istruzioni sono da considerarsi come un'aggiunta e una guida passo passo all'installazione e configurazione dei servizi partendo dalla documentazione ufficiale di Openstack disponibile in
http://docs.openstack.org/folsom/openstack-compute/install/yum/content/
e
http://docs.openstack.org/folsom/openstack-compute/admin/content/
Keystone
Installazione Keystone
Server designato per l'installazione: 192.168.200.21.
- Installare Keystone tramite il gestore di pacchetti
yum
:
# yum install openstack-utils openstack-keystone python-keystoneclient
- Installare il server
mysql
:
# yum install mysql mysql-server MySQL-python
- Permettere che il servizio
mysqld
venga avviato di default al riavvio del server ed avviare il servizio:
# chkconfig mysqld on
# service mysqld start
- Inserire la password di
root
:
# mysqladmin -u root password *******
Configurazione keystone
- Rimuovere, se esiste, il file
/var/lib/keystone/keystone.db
(cioè il DB sqlite). Verrà utilizzato MySQL che permette a più Keystone di utilizzare lo stesso DB e al DB stesso di essere replicato utilizzando le feature di MySQL.
- Assicurarsi che il servizio sia attivo al boot ed riavviarlo attraverso i seguenti comandi:
# chkconfig openstack-keystone on
# service openstack-keystone restart
- Infine inizializzare il DB keystone:
# keystone-manage db_sync
- Riavviare nuovamente il servizio
keystone
(in caso contrario a volte dà errore durante l'inserimento di entry nel DB da parte di keystone):
# service openstack-keystone restart
Creazione di tenant, utente e ruolo per l'amministratore
Per comodità in questa sezione si utilizzerà uno script che farà l'export di determinate variabili. Creare il file
.keystonrc
e modificarlo come segue:
export ADMIN_TOKEN=<ADMIN_TOKEN>
export OS_USERNAME=<ADMIN_USER>
export OS_PASSWORD=<ADMIN_PASSWORD>
export OS_TENANT_NAME=<ADMIN_TENANT>
export ENDPOINT=http://<KEYSTONE_HOSTNAME>:35357/v2.0/
export OS_AUTH_URL=http://<KEYSTONE_HOSTNAME>:5000/v2.0/
export ADMIN_USER_ID=
export ADMIN_TENANT_ID=
export ADMIN_ROLE_ID=
export SERVICE_TENANT_ID=
export GLANCE_PASSWORD=
export GLANCE_USER_ID=
export NOVA_PASSWORD=
export NOVA_USER_ID=
export KEYSTONE_SERVICE_ID=
export KEYSTONE5000=http://<KEYSTONE_HOSTNAME>:5000/v2.0
export NOVA_SERVICE_ID=
export NOVA_VOLUME_SERVICE_ID=
export GLANCE_IMAGE_SERVICE_ID=
export OBJECT_STORAGE_SERVICE_ID=
Dove:
- <ADMIN_TOKEN> è il token dell'amministratore, inserito come prima riga del file
/etc/keystone/keyston.conf
- <KEYSTONE_HOSTNAME> è l'hostname che ospita il servizio Keystone
- <ADMIN_USER> è l'utente admin, nel nostro caso "adminUser"
- <ADMIN_PASSWORD> è la password dell'utente admin
- <ADMIN_TENANT> è il tenant di amministrazione, nel nostro caso "adminTenant"
Per poter utilizzare queste variabili d'ambiente lanciare il seguente comando:
# source .keystonerc
N.B.
I campi vuoti dello script verranno riempiti man mano che verranno lanciate le seguenti istruzioni, si imposteranno le password e si otterranno gli ID. Ad ogni ID ottenuto, modificare il file .keystonerc
(inserendo l'ID ed eventualmente la password associata) e rifarne il source
.
Creazione del tenant "adminTenant"
Definizione di tenant:
Un tenant è un contenitore usato per raggruppare risorse o utenti.
Creazione dell'utente "adminUser"
- Creare l'utente lanciando il seguente comando:
# keystone --token $ADMIN_TOKEN --endpoint $ENDPOINT user-create \
--tenant_id $ADMIN_TENANT_ID --name $OS_USERNAME \
--pass $OS_PASSWORD --enabled true
+----------+-------------------------------------------------------------------------------------------------------------------------+
| Property | Value |
+----------+-------------------------------------------------------------------------------------------------------------------------+
| email | |
| enabled | True |
| id | 5267588ce6694b1da88144a11e586106 |
| name | adminUser |
| password | $6$rounds=40000$Xb2oWYG4gq64Yu/n$gjvQ/8Gr7hRgbT.Yd7xNWdHxJX8.O.9qD7bvcgTTqz0e8Hh4s0a/D2LSCMCuGh7XBK0vsYBFTq6nYrVrLWT../ |
| tenantId | 7e266325c0ca4e01aa0a12f54c00adc5 |
+----------+-------------------------------------------------------------------------------------------------------------------------+
Dove <ADMIN_TENANT_ID> è l'ID del tenant appena creato, mentre <ADMIN_PASSWORD> è la password scelta per l'utente "adminUser".
Creazione del ruolo "admin"
- Creare il ruolo lanciando il seguente comando:
# keystone --token $ADMIN_TOKEN --endpoint $ENDPOINT role-create --name admin
+----------+----------------------------------+
| Property | Value |
+----------+----------------------------------+
| id | 154531bb41554dbebfeff2da47283909 |
| name | admin |
+----------+----------------------------------+
Assegnazione del ruolo "admin" all'utente "AdminUser"
Dove <ADMIN_USER_ID> e <ADMIN_TENANT_ID> sono rispettivamente gli ID di user e tenant appena creati. $ADMIN_ROLE_ID è invece l'id del ruolo "admin" esportato nell'istruzione precedente.
Nota bene: non viene visualizzato nulla se il comando ha successo.
Creazione del tenant per i servizi
Creazione del tenant "service":
Questo tenant conterrà tutti gli utenti dei servizi che si desidera far conoscere al service catalog.
Creazione ed inserimento degli utenti associati ai servizi
Una volta creato il "Service Tenant", si andrà ad inserire al suo interno un utente per ogni servizio che si vuole aggiungere.
Creazione ed inserimento dell'utente associato a Glance
- Creare l'utente tramite il seguente comando:
keystone --token $ADMIN_TOKEN --endpoint $ENDPOINT user-create \
--tenant_id $SERVICE_TENANT_ID --name glance \
--pass <GLANCE_PASSWORD> --enabled=true
+----------+-------------------------------------------------------------------------------------------------------------------------+
| Property | Value |
+----------+-------------------------------------------------------------------------------------------------------------------------+
| email | |
| enabled | True |
| id | a9a8771522494fa9aa608089a94ca998 |
| name | glance |
| password | $6$rounds=40000$ZYeLs6pJqUlrjH/K$fgMJjrAAqJitScxk0KQCud6Y0MjwRWyZHjdR2UExGouHoSV9jm6FWVbvumdg0oQumeGh5V169YqTvnMVR8CTU1 |
| tenantId | 7735e801ccd0429ca14186abe6a166bf |
+----------+-------------------------------------------------------------------------------------------------------------------------+
Dove <GLANCE_PASSWORD> è la password che si desidera associare all'utente del servizio Glance.
Nota bene: non viene visualizzato nulla se il comando ha successo.
Creazione ed inserimento dell'utente associato a Nova
Dove <NOVA_PASSWORD> è la password che si desidera associare all'utente del servizio Nova.
- Assegnare il ruolo tramite il seguente comando:
# keystone --token $ADMIN_TOKEN --endpoint $ENDPOINT user-role-add \
--user_id $NOVA_USER_ID --tenant_id $SERVICE_TENANT_ID \
--role_id $ADMIN_ROLE_ID
Nota bene: non viene visualizzato nulla se il comando ha successo.
Definizione dei servizi
Keystone agisce anche come catalogo dei servizi per permettere alle altre componenti OpenStack di conoscere quali sono gli endpoint dei vari servizi OpenStack.
Definizione del servizio identity (Keystone)
Definizione del servizio compute (Nova)
Il servizio compute richiede un endpoint specifico per ogni tenant. La stringa
%(tenant_id)s
ed i singoli apici che racchiudono i valori di
publicurl
,
internalurl
e
adminurl
devono essere digitati esattamente come mostrato sia per l'endpoint
compute che per l'endpoint
volume e l'endpoint
object storage (paragrafi successivi).
Definizione del servizio volume (Volume)
Il servizio volume richiede un endpoint specifico per ogni tenant.
Definizione del servizio image (Glance)
Troubleshooting Keystone
- Per le principali operazioni di troubleshooting riferirsi alla guida
.
# keystone tenant-list
+----------------------------------+-------------+---------+
| id | name | enabled |
+----------------------------------+-------------+---------+
| 14998a053eb745bb852d7a593812da2f | MCloud | True |
| 7735e801ccd0429ca14186abe6a166bf | service | True |
| 7e266325c0ca4e01aa0a12f54c00adc5 | adminTenant | True |
+----------------------------------+-------------+---------+
# keystone user-list
+----------------------------------+------------+---------+----------------+
| id | name | enabled | email |
+----------------------------------+------------+---------+----------------+
| 19cc0bbdb5a247cdab8864d86e6a3506 | nova | True | |
| 5267588ce6694b1da88144a11e586106 | adminUser | True | |
| 6301ae88f3e14c6ab71e5fed8425f566 | mcloudUser | True | user@marche.it |
| a9a8771522494fa9aa608089a94ca998 | glance | True | |
+----------------------------------+------------+---------+----------------+
# keystone service-list
+----------------------------------+----------+----------+---------------------------+
| id | name | type | description |
+----------------------------------+----------+----------+---------------------------+
| 307b3276f0304684beeabefbc5cfedce | volume | volume | Nova Volume Service |
| 77faae0db3f741b0b14cd926ccdcc0d7 | nova | compute | Nova Compute Service |
| 7ba50cacbf9d48ce89bb3a48600025e0 | keystone | identity | Keystone Identity Service |
| ec3e65796067413ea32c3c34c0a85d09 | glance | image | Glance Image Service |
+----------------------------------+----------+----------+---------------------------+
# keystone endpoint-list
+----------------------------------+-----------+---------------------------------------------+---------------------------------------------+---------------------------------------------+----------------------------------+
| id | region | publicurl | internalurl | adminurl | service_id |
+----------------------------------+-----------+---------------------------------------------+---------------------------------------------+---------------------------------------------+----------------------------------+
| 51fa841e57a248c89124a1d340f0b4f8 | RegionOne | http://192.168.200.21:8776/v1/%(tenant_id)s | http://192.168.200.21:8776/v1/%(tenant_id)s | http://192.168.200.21:8776/v1/%(tenant_id)s | 307b3276f0304684beeabefbc5cfedce |
| 57f6a5ebe7694f438b984970a7c8c1eb | RegionOne | http://192.168.200.21:9292/v1 | http://192.168.200.21:9292/v1 | http://192.168.200.21:9292/v1 | ec3e65796067413ea32c3c34c0a85d09 |
| b34e2e479dcf49dda776857e26f58998 | RegionOne | http://192.168.200.21:5000/v2.0 | http://192.168.200.21:5000/v2.0 | http://192.168.200.21:35357/v2.0/ | 7ba50cacbf9d48ce89bb3a48600025e0 |
| d5205b8e45b24871aaa88376da990a0a | RegionOne | http://192.168.200.21:8774/v2/%(tenant_id)s | http://192.168.200.21:8774/v2/%(tenant_id)s | http://192.168.200.21:8774/v2/%(tenant_id)s | 77faae0db3f741b0b14cd926ccdcc0d7 |
+----------------------------------+-----------+---------------------------------------------+---------------------------------------------+---------------------------------------------+----------------------------------+
# keystone catalog
Service: volume
+-------------+----------------------------------------------------------------+
| Property | Value |
+-------------+----------------------------------------------------------------+
| adminURL | http://192.168.200.21:8776/v1/7e266325c0ca4e01aa0a12f54c00adc5 |
| id | 51fa841e57a248c89124a1d340f0b4f8 |
| internalURL | http://192.168.200.21:8776/v1/7e266325c0ca4e01aa0a12f54c00adc5 |
| publicURL | http://192.168.200.21:8776/v1/7e266325c0ca4e01aa0a12f54c00adc5 |
| region | RegionOne |
+-------------+----------------------------------------------------------------+
Service: image
+-------------+----------------------------------+
| Property | Value |
+-------------+----------------------------------+
| adminURL | http://192.168.200.21:9292/v1 |
| id | 57f6a5ebe7694f438b984970a7c8c1eb |
| internalURL | http://192.168.200.21:9292/v1 |
| publicURL | http://192.168.200.21:9292/v1 |
| region | RegionOne |
+-------------+----------------------------------+
Service: compute
+-------------+----------------------------------------------------------------+
| Property | Value |
+-------------+----------------------------------------------------------------+
| adminURL | http://192.168.200.21:8774/v2/7e266325c0ca4e01aa0a12f54c00adc5 |
| id | d5205b8e45b24871aaa88376da990a0a |
| internalURL | http://192.168.200.21:8774/v2/7e266325c0ca4e01aa0a12f54c00adc5 |
| publicURL | http://192.168.200.21:8774/v2/7e266325c0ca4e01aa0a12f54c00adc5 |
| region | RegionOne |
+-------------+----------------------------------------------------------------+
Service: identity
+-------------+-----------------------------------+
| Property | Value |
+-------------+-----------------------------------+
| adminURL | http://192.168.200.21:35357/v2.0/ |
| id | b34e2e479dcf49dda776857e26f58998 |
| internalURL | http://192.168.200.21:5000/v2.0 |
| publicURL | http://192.168.200.21:5000/v2.0 |
| region | RegionOne |
+-------------+-----------------------------------+
Glance
Installazione Glance
Server designato per l'installazione: 192.168.200.21.
Configurazione Glance
- Rimuovere, se esiste, il file
/var/lib/glance/glance.db
(cioè il DB sqlite). Verrà utilizzato MySQL.
- Collegarsi su MySQL da linea di comando lanciando
mysql -u root -p
e digitando la password dell'utente root.
Editare i file di configurazione di Glance
- Modificare le seguenti righe nel file
/etc/glance/glance-registry.conf
:
[keystone_authtoken]
auth_host = 127.0.0.1
auth_port = 35357
auth_protocol = http
admin_tenant_name = service
admin_user = glance
admin_password = <GLANCE_PASSWORD>
[paste_deploy]
flavor = keystone
Verificare che sql_connection
punti al DB MySQL piuttosto che a sqlite:
sql_connection = mysql://glance:<YOUR_GLANCEDB_PASSWORD>@localhost/glance
Nota bene: inserendo esplicitamente l'hostname del server al posto di localhost sono stati verificati problemi di connessione.
- Inizializzare il DB "glance":
# glance-manage db_sync
Troubleshooting Glance
- Scaricare un'immagine di test ed aggiungerla al repository di glance per verificare il corretto funzionamento del servizio. Dettaglio delle opzioni
Cloud Controller
Configurare il DB MySQL sul Cloud Controller
- Collegarsi a MySQL da linea di comando con
mysql -u root -p
digitando la password di root.
Installare il Cloud Controller
Configurazione dei servizi di Nova:
- Il servizio
openstack-nova-metadata-api
va in conflitto con il servizio openstack-nova-api
, quindi è conveniente disabilitarlo, inoltre non si vuole che il Cloud Controller funga da Compute Node, quindi disabilitiamo anche il servizio openstack-nova-compute
. Nei files /etc/init.d/openstack-nova-metadata-api
e /etc/init.d/openstack-nova-compute
modificare la funzione start() come segue:
[...]
start() {
echo "This service must be stopped!"
exit
[...]
- Seguire le istruzioni al paragrafo Configurazione del servizio Compute -> Servizio nova . Nota bene: seguire solo i punti riferiti al cambio proprietario ed alla modifica dei due files, poi tornare a questo paragrafo.
- Impostare l'avvio automatico dei servizi nova, tranne i servizi appena disabilitati:
# for svc in api console network scheduler cert \
consoleauth volume objectstore \
xvpvncproxy; do chkconfig \
openstack-nova-$svc on; done
- Fermare i servizi nova, sincronizzare il database e far ripartire i servizi:
# for s in `ls /etc/init.d/openstack-nova-*`; \
do $s stop ; done
# nova-manage db sync
# for s in `ls /etc/init.d/openstack-nova-*`; \
do $s start ; done
Aggiungere nova tra gli utenti sudoers:
- A causa di un bug, quando si prova ad eliminare un volume di Nova da Dashboard o da CLI, le risorse del sistema vengono monopolizzate dal processo gluster a causa dell'esecuzione di un dd sul volume che si intende cancellare. La causa scatenante è la non appartenenza dell'utente nova (utente con cui viene lanciato il dd) tra gli utenti sudoers. Per risolvere questo problema appendere la riga
nova ALL = (root) NOPASSWD: /bin/dd
al file /etc/sudoers
.
Installare e impostare l'avvio automatico dei servizi legati a ISCSI (sul Cloud Controller)
Nova
Configurazione dell'Hypervisor (KVM)
Configurazione del servizio Compute
Servizio libvirtd
- Editare il file
/etc/libvirt/libvirtd.conf
e assicurarsi siano impostati i seguenti valori:
# OPENSTACK LIVE MIGRATION
listen_tls = 0
listen_tcp = 1
auth_tcp = "none"
- Editare il file
/etc/sysconfig/libvirtd
e assicurarsi che ci siano le impostazioni come seguono:
LIBVIRTD_ARGS="--listen"
- Far partire
libvirtd
:
# chkconfig libvirtd on
# /etc/init.d/libvirtd restart
- Viene aggiunta anche una interfaccia di rete virtuale, chiamata di default
virbr0
. Il comando ifconfig
dovrebbe mostrarla nel suo output:
virbr0 Link encap:Ethernet HWaddr 52:54:00:54:65:A1
inet addr:192.168.122.1 Bcast:192.168.122.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:45 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:7585 (7.4 KiB)
Servizio nova
Dove:
Configurazione del servizio nova-network
NB: SU TUTTI I SERVER
- Verificare che ci sia il bridge sulla
192.168.122.0
con il comando ifconfig
(NB: il servizio libvirtd
deve essere running).
# ifconfig virbr0
virbr0 Link encap:Ethernet HWaddr 52:54:00:83:66:9B
inet addr:192.168.122.1 Bcast:192.168.122.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:67 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:5681 (5.5 KiB)
NB: DA UN QUALSIASI SERVER UNA VOLTA SOLA
- Creare la rete con
nova-manage
# nova-manage network list
# nova-manage network create private --multi_host=T \
--fixed_range_v4=192.168.122.0/24 --bridge_interface=virbr0 \
--num_networks=1 --network_size=256 --dns1=10.101.12.10 \
--dns2=10.101.12.11
# nova-manage network list
id IPv4 IPv6 start address DNS1 DNS2 VlanID project uuid
6 192.168.122.0/24 None 192.168.122.2 10.101.12.10 10.101.12.11 None None a51798f8-3c2a-48f3-ad19-54ab2048bf7e
- Il servizio Compute usa i concetti di gruppi di sicurezza per controllare che i protocolli di rete (TCP, UDP, ICMP), le porte e gli indirizzi IP permettano di accedere alle istanze.
- Abilitare il traffico sulle porte 80 e 443 (necessario all'applicazione di SCS):
# nova secgroup-add-rule default tcp 80 80 0.0.0.0/0
# nova secgroup-add-rule default tcp 443 443 0.0.0.0/0
Installare e impostare l'avvio automatico dei servizi legati a ISCSI (su ogni Compute Node)
- Per poter fare l'attach di un volume nova ad l'instanza di una macchina virtuale è necessario installare ed avviare il servizio
iscsi-initiator-utils
su ogni Compute Node. Controllare quindi che sia installato attraverso il seguente comando:
# yum install iscsi-initiator-utils
- Far partire il servizio:
# service iscsid force-start
- Nota bene: è necessario modificare lo script
/etc/init.d/iscsid
per poter far partire in automatico iscsid in automatico all'avvio del server in modalità force-start
. Modificare i case start e restart dello switch all'interno dello script in modo tale che risulti come segue:
[...]
start)
# rh_status_q && exit 0
# $1
force_start
;;
[...]
restart)
# $1
stop
force_start
;;
[...]
- Impostare l'avvio automatico:
# chkconfig iscsid on
Dashboard
Installazione della Dashboard
Nei passi successivi si assume di avere gia' installati e configurati Identity Service (Keystone) e il compute service (Nova).
Configurazione della Dashboard
- Verificare le impostazioni di memcached presenti nel file
/etc/sysconfig/memcached
. Di default si presentano come di seguito:
# cat /etc/sysconfig/memcached
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS=""
- Modificare il valore della variabile
CACHE_BACKEND
nel file /etc/openstack-dashboard/local_settings
in modo da essere coerente con le configurazioni di memcached sopra riportate. In questo caso la variabile sara' settata con:
CACHE_BACKEND = 'memcached://127.0.0.1:11211/'
- Aggiungere le seguenti variabili (impostandole a
True
o False
nel caso i servizi siano disponibili o meno):
# SWIFT : da impostare a True quando SWIFT sara' configurato
SWIFT_ENABLED = False
# QUANTUM e' previsto essere un componente ad-hoc dalla prossima release di openstack (Folsom)
QUANTUM_ENABLED = False
- Avviare i servizi (
memcached
e httpd
):
# /etc/init.d/memcached start
Starting memcached: [ OK ]
# chkconfig memcached on
# /etc/init.d/httpd start
Starting httpd: [ OK ]
# chkconfig httpd on
Utilizzo della Dashboard
Per verificare il funzionamento della Dashboard, andare su
http://10.101.8.21/dashboard
e loggarsi con le credenziali
adminUser
e relativa password.
Casi d'uso
Configurazione degli indirizzi IP Floating pubblici
- Ad ogni istanza virtuale viene automaticamente assegnato un IP privato (appartenente alla sottorete creata al punto precedente). E' possibile assegnare indirizzi pubblici alle istanze. In tal caso verificare la presenza della seguente riga nel file
nova.conf
:
public_interface = eth1
- Far ripartire il servizio
nova-network
dopo aver cambiato il nova.conf
.
Abilitazione di IP forwarding
Creare una lista di floating IP
Assegnazione IP ad una macchina virtuale
- Ora è possibile assegnare uno degli IP (nel nostro caso uno solo, il 10.101.8.129) ad una macchina virtuale specificando l'id della VM, come segue:
# nova list
+--------------------------------------+-----------------------+--------+-------------------------------------+
| ID | Name | Status | Networks |
+--------------------------------------+-----------------------+--------+-------------------------------------+
| 44806b1a-6157-417d-8437-ef36871bb6fd | Osuse_instance_andrea | ACTIVE | private=192.168.122.4 |
+--------------------------------------+-----------------------+--------+-------------------------------------+
# nova add-floating-ip 44806b1a-6157-417d-8437-ef36871bb6fd 10.101.8.129
# nova list
+--------------------------------------+-----------------------+--------+-------------------------------------+
| ID | Name | Status | Networks |
+--------------------------------------+-----------------------+--------+-------------------------------------+
| 44806b1a-6157-417d-8437-ef36871bb6fd | Osuse_instance_andrea | ACTIVE | private=192.168.122.4, 10.101.8.129 |
+--------------------------------------+-----------------------+--------+-------------------------------------+
# nova-manage floating list
14998a053eb745bb852d7a593812da2f 10.101.8.129 44806b1a-6157-417d-8437-ef36871bb6fd nova eth1
None 10.101.8.130 None nova eth1
None 10.101.8.131 None nova eth1
None 10.101.8.132 None nova eth1
[....]
None 10.101.8.254 None nova eth1
Gestione gruppi sicurezza
Per accedere, tramite dashboard, alla pagina di gestione dei gruppi di sicurezza andare in
Project
->
Access & Security
. La seconda tabella di questa pagina permette la gestione dei gruppi di sicurezza:
per poter utilizzare una qualsiasi porta di un'istanza è necessario aggiungere tale porta al rispettivo gruppo di sicurezza. Ad esempio per poter accedere ad una web application installata nell'istanza è necessario aggiungere la porta 80 tra le regole di sicurezza del gruppo associato a quell'istanza.
Live migration
Con
Live Migration si intende la possibilita' da parte dell'amministratore di OpenStack di migrare una VM da un Compute Node ad un altro senza discontinuita' di servizio. Questa operazione e' utile per fare manutenzione su un Compute Node.
- La directory
/var/lib/nova/instances
deve essere condivisa tra tutti i Compute Node;
-
libvitrd
deve essere configurato per supportare la migrazione live (vedere istruzione nella installazione del Compute Node).
Nel seguente esempio, la vm con id
44806b1a-6157-417d-8437-ef36871bb6fd
viene migrata dal compute node
mcloud02.regionemarche.intra
a
mcloud03.regionemarche.intra
.
# nova show 44806b1a-6157-417d-8437-ef36871bb6fd
+-------------------------------------+------------------------------------------------------------+
| Property | Value |
+-------------------------------------+------------------------------------------------------------+
| OS-DCF:diskConfig | MANUAL |
| OS-EXT-SRV-ATTR:host | mcloud02.regionemarche.intra |
| OS-EXT-SRV-ATTR:hypervisor_hostname | mcloud02.regionemarche.intra |
| OS-EXT-SRV-ATTR:instance_name | instance-0000002a |
| OS-EXT-STS:power_state | 1 |
| OS-EXT-STS:task_state | None |
| OS-EXT-STS:vm_state | active |
| accessIPv4 | |
| accessIPv6 | |
| config_drive | |
| created | 2012-11-29T16:36:58Z |
| flavor | MCloud Flavor (6) |
| hostId | bdafa05a4a5a5e92b059ab59db5bf40cce604edcd547930a1cf0efb0 |
| id | 44806b1a-6157-417d-8437-ef36871bb6fd |
| image | Osuse_mcloud_281112 (28a1a678-1410-4235-a697-6de2e4fade51) |
| key_name | None |
| metadata | {} |
| name | Osuse_instance_andrea |
| private network | 192.168.122.4, 10.101.8.130 |
| progress | 0 |
| security_groups | [{u'name': u'default'}] |
| status | ACTIVE |
| tenant_id | 7e266325c0ca4e01aa0a12f54c00adc5 |
| updated | 2012-11-29T17:07:46Z |
| user_id | 5267588ce6694b1da88144a11e586106 |
+-------------------------------------+------------------------------------------------------------+
# nova live-migration 44806b1a-6157-417d-8437-ef36871bb6fd mcloud03.regionemarche.intra
# nova show 44806b1a-6157-417d-8437-ef36871bb6fd
+-------------------------------------+------------------------------------------------------------+
| Property | Value |
+-------------------------------------+------------------------------------------------------------+
| OS-DCF:diskConfig | MANUAL |
| OS-EXT-SRV-ATTR:host | mcloud03.regionemarche.intra |
| OS-EXT-SRV-ATTR:hypervisor_hostname | mcloud03.regionemarche.intra |
| OS-EXT-SRV-ATTR:instance_name | instance-0000002a |
| OS-EXT-STS:power_state | 1 |
| OS-EXT-STS:task_state | None |
| OS-EXT-STS:vm_state | active |
| accessIPv4 | |
| accessIPv6 | |
| config_drive | |
| created | 2012-11-29T16:36:58Z |
| flavor | MCloud Flavor (6) |
| hostId | bdafa05a4a5a5e92b059ab59db5bf40cce604edcd547930a1cf0efb0 |
| id | 44806b1a-6157-417d-8437-ef36871bb6fd |
| image | Osuse_mcloud_281112 (28a1a678-1410-4235-a697-6de2e4fade51) |
| key_name | None |
| metadata | {} |
| name | Osuse_instance_andrea |
| private network | 192.168.122.4, 10.101.8.130 |
| progress | 0 |
| security_groups | [{u'name': u'default'}] |
| status | ACTIVE |
| tenant_id | 7e266325c0ca4e01aa0a12f54c00adc5 |
| updated | 2012-11-29T17:07:46Z |
| user_id | 5267588ce6694b1da88144a11e586106 |
+-------------------------------------+------------------------------------------------------------+
--
MatteoManzali - 2013-02-27