Guida di installazione (in unica pagina) dell'infrastruttura di cloud per il progetto Marche Cloud
Testbed
Tabella Hostnames / IPs dei server che compongono l'infrastruttura pilota
HOSTNAME |
IP eth0 |
IP eth1 |
mcloud01.regionemarche.intra |
192.168.200.21 |
10.101.8.21 |
mcloud02.regionemarche.intra |
192.168.200.22 |
10.101.8.22 |
mcloud03.regionemarche.intra |
192.168.200.23 |
10.101.8.23 |
mcloud04.regionemarche.intra |
192.168.200.24 |
10.101.8.24 |
Controlli preliminari dell'ambiente software da effettuare su ogni server
- Controllare la corretta configurazione del volume group (un unico volume group con nome
nova-volumes
) e dei logical volumes
# vgdisplay
--- Volume group ---
VG Name nova-volumes
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 4
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 3
Open LV 3
Max PV 0
Cur PV 1
Act PV 1
VG Size 557,37 GiB
PE Size 4,00 MiB
Total PE 142687
Alloc PE / Size 55748 / 217,77 GiB
Free PE / Size 86939 / 339,61 GiB
VG UUID 6x1Q85-hjml-folN-VzIo-0Atn-f2H9-x1hZ4m
# lvs
LV VG Attr LSize Pool Origin Data% Move Log Copy% Convert
lv_nova nova-volumes -wi-ao-- 200,00g
lv_root nova-volumes -wi-ao-- 9,77g
lv_swap nova-volumes -wi-ao-- 8,00g
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 il servizio
glusterd
venga avviato di default al riavvio del server
# chkconfig glusterd 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 (con hostname rispettivamente
hostname1.domain
,
hostname2.domain
,
hostname3.domain
,
hostname4.domain
) eseguire sull'host
hostname1.domain
:
# gluster peer probe hostname2.domain
# gluster peer probe hostname3.domain
# gluster peer probe hostname4.domain
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
hostname1.domain
si otterrà:
# gluster peer status
Number of Peers: 3
Hostname: hostname2.domain
Uuid: 2088ff36-dbf9-44a3-9b3b-8a3a94d64cd4
State: Peer in Cluster (Connected)
Hostname: hostname3.domain
Uuid: ce7b0621-4068-43e4-b2a5-585c23ade1de
State: Peer in Cluster (Connected)
Hostname: hostname4.domain
Uuid: ae5dfd23-4a65-a2e6-be85-3e5c11abe5cd
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 1000G (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 1000 Gigabyte:
# lvcreate -L 1000G -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
hostname1.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 hostname1.domain
- 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 hostname2.domain:/mnt/brick-glance hostname3.domain:/mnt/brick-glance hostname4.domain:/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
):
hostname1.domain:/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 hostname1.domain, hostname2.domain, hostname3.domain
- 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 hostname1.domain:/mnt/brick-nova hostname2.domain:/mnt/brick-nova hostname3.domain:/mnt/brick-nova hostname4.domain:/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
/var/lib/nova/instances
):
hostname1.domain:/volume-nova /var/lib/nova/instances glusterfs defaults 1 1
Montare il volume condiviso:
# mount –a
Keystone
Installazione Keystone
Server designato per l'installazione: hostname1.domain.
- 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.
Creazione di tenant, utente e ruolo per l'amministratore e del tenant per i servizi
Per comodità in questa sezione si utilizzeranno delle variabili d'ambiente settate come segue:
# export ADMIN_TOKEN=<ADMIN_TOKEN_VALUE>
export OS_USERNAME=adminUser
export OS_PASSWORD=<PASSWORD>
export OS_TENANT_NAME=adminTenant
export ENDPOINT=http://openstack-01.cnaf.infn.it:35357/v2.0/
export OS_AUTH_URL=http://openstack-01.cnaf.infn.it:5000/v2.0/
Dove <ADMIN_TOKEN_VALUE> è il valore del parametro
admin_token
contenuto nel file
/etc/keystone/keystone.conf
.
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 | None |
| enabled | True |
| id | 7d6a3a42c37948b88e2fa692b63587cd |
| name | adminUser |
| password | $6$rounds=40000$NxZyxUfO8VRj3gR.$zt9GJKwMDOUMDHCMhqAqJje3JAJmqqTXADZkXll.usGHEsEpAMgKsnZEfF0itF75ooyY1/tjxXBJq9MaQXnfo. |
| tenantId | db2cf825309c49989595fc2ff915dc7e |
+----------+-------------------------------------------------------------------------------------------------------------------------+
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 | 2f196d11ff954c67befc3f190195f47c |
| name | admin |
+----------+----------------------------------+
# export ADMIN_ROLE_ID=2f196d11ff954c67befc3f190195f47c
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 "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 | None |
| enabled | True |
| id | 90ee5ac051eb4d1eaa543243987968a6 |
| name | glance |
| password | $6$rounds=40000$LApm.pXGC43cDMhN$J1mDpXad5r2YYNoMKK/P5t0VwXQidKauP/oHaVH5Nm9E7zGQLYamwa1Xxvh0FRcjOvhDtTSZ97CToKV6pWFPA1 |
| tenantId | 73016aa2c9ca4aeba3736cf44cc8433b |
+----------+-------------------------------------------------------------------------------------------------------------------------+
export GLANCE_USER_ID=90ee5ac051eb4d1eaa543243987968a6
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
.
[root@clstr-09 ~]# keystone tenant-list
+----------------------------------+-------------+---------+
| id | name | enabled |
+----------------------------------+-------------+---------+
| 8f74bb88623e41619a4c020baed3caa0 | adminTenant | True |
| d6e9133d43b5440eae0db744c00bbca7 | service | True |
+----------------------------------+-------------+---------+
[root@clstr-09 ~]# keystone user-list
+----------------------------------+-----------+---------+-------+
| id | name | enabled | email |
+----------------------------------+-----------+---------+-------+
| 30fc09b098b0451f8ec3861cf96f3422 | nova | True | |
| 71228944d88b477188528c47942bcdb8 | adminUser | True | |
| 7f3e370e94b54d8fa6ddbb02d5903f43 | glance | True | |
+----------------------------------+-----------+---------+-------+
[root@clstr-09 ~]# keystone service-list
+----------------------------------+----------+----------+---------------------------+
| id | name | type | description |
+----------------------------------+----------+----------+---------------------------+
| 11279e60f5054500a1a0a4ea99016721 | glance | image | Glance Image Service |
| 25197e8149da4bc199fc3e8476f4c5ba | volume | volume | Nova Volume Service |
| 990589efda944f379888edc97f17cb75 | keystone | identity | Keystone Identity Service |
| dbe9d50403c541f9b277e1c26b6e7946 | nova | compute | Nova Compute Service |
+----------------------------------+----------+----------+---------------------------+
[root@clstr-09 ~]# keystone endpoint-list
+----------------------------------+-----------+----------------------------------------------------+----------------------------------------------------+----------------------------------------------------+----------------------------------+
| id | region | publicurl | internalurl | adminurl | service_id |
+----------------------------------+-----------+----------------------------------------------------+----------------------------------------------------+----------------------------------------------------+----------------------------------+
| 20fef2ceae314842aade705eb6c3ed17 | RegionOne | http://clstr-09.cnaf.infn.it:8774/v2/%(tenant_id)s | http://clstr-09.cnaf.infn.it:8774/v2/%(tenant_id)s | http://clstr-09.cnaf.infn.it:8774/v2/%(tenant_id)s | dbe9d50403c541f9b277e1c26b6e7946 |
| 8868e9748ad4481cac64ab0e3d33e614 | RegionOne | http://clstr-09.cnaf.infn.it:8776/v1/%(tenant_id)s | http://clstr-09.cnaf.infn.it:8776/v1/%(tenant_id)s | http://clstr-09.cnaf.infn.it:8776/v1/%(tenant_id)s | 25197e8149da4bc199fc3e8476f4c5ba |
| 8953d51657d8482a9037671db111f718 | RegionOne | http://clstr-09.cnaf.infn.it:5000/v2.0 | http://clstr-09.cnaf.infn.it:5000/v2.0 | http://clstr-09.cnaf.infn.it:35357/v2.0/ | 990589efda944f379888edc97f17cb75 |
+----------------------------------+-----------+----------------------------------------------------+----------------------------------------------------+----------------------------------------------------+----------------------------------+
[root@clstr-09 ~]# keystone catalog
Service: volume
+-------------+-----------------------------------------------------------------------+
| Property | Value |
+-------------+-----------------------------------------------------------------------+
| adminURL | http://clstr-09.cnaf.infn.it:8776/v1/8f74bb88623e41619a4c020baed3caa0 |
| id | 8868e9748ad4481cac64ab0e3d33e614 |
| internalURL | http://clstr-09.cnaf.infn.it:8776/v1/8f74bb88623e41619a4c020baed3caa0 |
| publicURL | http://clstr-09.cnaf.infn.it:8776/v1/8f74bb88623e41619a4c020baed3caa0 |
| region | RegionOne |
+-------------+-----------------------------------------------------------------------+
Service: compute
+-------------+-----------------------------------------------------------------------+
| Property | Value |
+-------------+-----------------------------------------------------------------------+
| adminURL | http://clstr-09.cnaf.infn.it:8774/v2/8f74bb88623e41619a4c020baed3caa0 |
| id | 20fef2ceae314842aade705eb6c3ed17 |
| internalURL | http://clstr-09.cnaf.infn.it:8774/v2/8f74bb88623e41619a4c020baed3caa0 |
| publicURL | http://clstr-09.cnaf.infn.it:8774/v2/8f74bb88623e41619a4c020baed3caa0 |
| region | RegionOne |
+-------------+-----------------------------------------------------------------------+
Service: identity
+-------------+------------------------------------------+
| Property | Value |
+-------------+------------------------------------------+
| adminURL | http://clstr-09.cnaf.infn.it:35357/v2.0/ |
| id | 8953d51657d8482a9037671db111f718 |
| internalURL | http://clstr-09.cnaf.infn.it:5000/v2.0 |
| publicURL | http://clstr-09.cnaf.infn.it:5000/v2.0 |
| region | RegionOne |
+-------------+------------------------------------------+
Glance
Installazione Glance
Server designato per l'installazione: hostname1.domain.
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
- To begin troubleshooting, look at the logs in the
/var/log/glance/registry.log
or /var/log/glance/api.log
- You can find the version of the installation by using the
glance --version
command. The version number 2012.1 corresponds with the Essex release.
- Obtain a test image
# mkdir /stackimages
# cd /stackimages
# wget https://launchpad.net/cirros/trunk/0.3.0/+download/cirros-0.3.0-x86_64-disk.img
# glance index
# glance add name=cirros-0.3.0-x86_64 disk_format=qcow2 container_format=bare < /stackimages/cirros-0.3.0-x86_64-disk.img
Uploading image 'cirros-0.3.0-x86_64'
================================================================================================================================================================================[100%] 23.2M/s, ETA 0h 0m 0s
Added new image with ID: a08912a4-3c73-4b17-9d96-bed2d1290d3d
# glance index
ID Name Disk Format Container Format Size
------------------------------------ ------------------------------ -------------------- -------------------- --------------
a08912a4-3c73-4b17-9d96-bed2d1290d3d cirros-0.3.0-x86_64 qcow2 bare 9761280
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
Nova
Configurazione dell'Hypervisor (KVM)
- Requisiti di configurazione per RHEL
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"
Servizio nova
- Modificare due file in
/etc/nova
nel seguente modo.
Dove:
Gruppi di sicurezza: abilitazione di SSH e ICMP
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.
Installare e impostare l'avvio automatico dei servizi legati a ISCSI
--
MatteoManzali - 2012-11-19