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.

HOSTNAME IP eth0 - Management network IP eth1 - External network IP eth2(virbr0) - Data network
mcloud01.regionemarche.intra 192.168.200.21 10.101.8.21 192.168.122.0/24
mcloud02.regionemarche.intra 192.168.200.22 10.101.8.22 192.168.122.0/24
mcloud03.regionemarche.intra 192.168.200.23 10.101.8.23 192.168.122.0/24
mcloud04.regionemarche.intra 192.168.200.24 10.101.8.24 192.168.122.0/24
La seguente figura illustra questo setup: figura4.png

Controlli preliminari dell'ambiente software da effettuare su ogni server

  • Controllare il sistema operativo installato (deve essere Centos 6.3)
    # cat /etc/redhat-release
    CentOS release 6.3 (Final)
    

  • Controllare la corretta configurazione del volume group (un unico volume group con nome nova-volumes) e dei logical volumes
    # vgs
      VG           #PV #LV #SN Attr   VSize VFree  
      nova-volumes   1   3   0 wz--n- 1.64t 849.76g
    
    # lvs
      LV      VG           Attr     LSize   Pool Origin Data%  Move Log Copy%  Convert                                       
      lv_root nova-volumes -wi-ao--  10.00g                                           
      lv_swap nova-volumes -wi-ao--  15.90g    
    

  • Controllare il setup di rete (tre reti fisiche distinte eth0, eth1 ed eth2)
    # ifconfig 
    eth0      Link encap:Ethernet  HWaddr B4:B5:2F:5C:FE:70  
              inet addr:192.168.200.21  Bcast:192.168.200.255  Mask:255.255.255.0
              inet6 addr: fe80::b6b5:2fff:fe5c:fe70/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:49059623 errors:0 dropped:0 overruns:0 frame:0
              TX packets:20760293 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000 
              RX bytes:47573641634 (44.3 GiB)  TX bytes:49395841919 (46.0 GiB)
              Interrupt:92 
    
    eth1      Link encap:Ethernet  HWaddr B4:B5:2F:5C:FE:71  
              inet addr:10.101.8.21  Bcast:10.101.9.255  Mask:255.255.254.0
              inet6 addr: fe80::b6b5:2fff:fe5c:fe71/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:85066 errors:0 dropped:0 overruns:0 frame:0
              TX packets:58474 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000 
              RX bytes:14284835 (13.6 MiB)  TX bytes:42927456 (40.9 MiB)
              Interrupt:96 
    
    eth2      Link encap:Ethernet  HWaddr B4:B5:2F:5C:FE:72  
              inet6 addr: fe80::b6b5:2fff:fe5c:fe72/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:762806 errors:0 dropped:0 overruns:0 frame:0
              TX packets:174684 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000 
              RX bytes:78052445 (74.4 MiB)  TX bytes:11460443 (10.9 MiB)
              Interrupt:100 
    
    lo        Link encap:Local Loopback  
              inet addr:127.0.0.1  Mask:255.0.0.0
              inet6 addr: ::1/128 Scope:Host
              UP LOOPBACK RUNNING  MTU:16436  Metric:1
              RX packets:10325996 errors:0 dropped:0 overruns:0 frame:0
              TX packets:10325996 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:0 
              RX bytes:3852026297 (3.5 GiB)  TX bytes:3852026297 (3.5 GiB)
    


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 
 

  • La lista dei repository a questo punto sarà la seguente:
    # ls /etc/yum.repos.d/
    CentOS-Base.repo  CentOS-Debuginfo.repo  CentOS-Media.repo  CentOS-Vault.repo  epel.repo  epel-testing.repo
     

  • Operazioni preliminari per l'avvio del servizio libvirtd :
    /etc/init.d/messagebus restart
    /etc/init.d/avahi-daemon restart
    /etc/init.d/libvirtd restart
    chkconfig messagebus on
    chkconfig avahi-daemon on
    


GlusterFS

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.

  1. 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.
    
    
  2. 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 .
    
    
  3. Creare la directory dove si intende montare il volume appena creato:
    # mkdir /mnt/brick-glance
    
    
    
  4. 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 
    
    
    
  5. 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.

  1. Creare un volume logico di 800 Gigabyte:
    # lvcreate -L 800G -n lv_nova <VOLUME_NAME>
    
    
    
  2. Formattare la partizione appena creata (ad esempio su filesystem ext4):
    # mkfs.ext4 <LV_PATH> 
    
    
    
  3. Creare la directory dove si intende montare il volume appena creato:
    # mkdir /mnt/brick-nova
    
    
    
  4. Editare il file /etc/fstab aggiungendo la seguente riga:
    <LV_PATH>       /mnt/brick-nova       ext4    defaults        1 1 
    
    
    
  5. 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.

figura3.png

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.

  • Per creare il DB keystone e l'utente keystone che ha completo accesso al DB stesso, digitare il comando:
    # openstack-db --init --service keystone
    
  • Controllare in /etc/keystone/keystone.conf che esista una riga del tipo:
    connection = mysql://keystone:keystone@192.168.200.21/keystone
    
    Nota bene: in keystone:keystone il primo keystone è il nome utente, il secondo è la password. Utilizzando il comando openstack-db --init --service keystone per l'inizializzazione del DB keystone verranno utilizzati quei valori di default.

  • Inizializzare il parametro admin_token contenuto all'interno del file /etc/keystone/keystone.conf , attraverso il comando:
    # openstack-config --set /etc/keystone/keystone.conf \
       DEFAULT admin_token $(openssl rand -hex 10)
    

  • 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.

  • Creare il tenant lanciando il comando:
    keystone --token $ADMIN_TOKEN \
       --endpoint $ENDPOINT tenant-create \
       --name adminTenant --description "Admin Tenant" \
       --enabled true
    +-------------+----------------------------------+
    |   Property  |              Value               |
    +-------------+----------------------------------+
    | description |           Admin Tenant           |
    |   enabled   |               True               |
    |      id     | 7e266325c0ca4e01aa0a12f54c00adc5 |
    |     name    |           adminTenant            |
    +-------------+----------------------------------+
    
    

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"

  • Assegnare il ruolo tramite il seguente comando:
    # keystone --token $ADMIN_TOKEN --endpoint $ENDPOINT user-role-add \
       --user_id $ADMIN_USER_ID --tenant_id $ADMIN_TENANT_ID \ 
       --role_id $ADMIN_ROLE_ID
    

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.

  • Creare il tenant lanciando il comando:
    # keystone --token $ADMIN_TOKEN --endpoint $ENDPOINT tenant-create \
       --name service --description "Service Tenant" --enabled true
    +-------------+----------------------------------+
    |   Property  |              Value               |
    +-------------+----------------------------------+
    | description |          Service Tenant          |
    |   enabled   |               True               |
    |      id     | 7735e801ccd0429ca14186abe6a166bf |
    |     name    |             service              |
    +-------------+----------------------------------+
    
    

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.

  • Assegnare il ruolo tramite il seguente comando:
    # keystone --token $ADMIN_TOKEN --endpoint $ENDPOINT user-role-add \
       --user_id $GLANCE_USER_ID --tenant_id $SERVICE_TENANT_ID \
       --role_id $ADMIN_ROLE_ID
    

Nota bene: non viene visualizzato nulla se il comando ha successo.

Creazione ed inserimento dell'utente associato a Nova

  • Creare l'utente tramite il seguente comando:
    # keystone --token $ADMIN_TOKEN --endpoint $ENDPOINT user-create \
       --tenant_id $SERVICE_TENANT_ID --name nova \
       --pass <NOVA_PASSWORD> --enabled true
    +----------+-------------------------------------------------------------------------------------------------------------------------+
    | Property |                                                          Value                                                          |
    +----------+-------------------------------------------------------------------------------------------------------------------------+
    |  email   |                                                                                                                         |
    | enabled  |                                                           True                                                          |
    |    id    |                                             19cc0bbdb5a247cdab8864d86e6a3506                                            |
    |   name   |                                                           nova                                                          |
    | password | $6$rounds=40000$aPJ5bn7ouUXikgAQ$lFTSOLNxboBTPoQjdjiRvbrUuMjLlca53C44mckVRs7NYHHX7BeXpBQhvmOvKtkmA9KmgVBkYLWDYHVqg86Dd/ |
    | tenantId |                                             7735e801ccd0429ca14186abe6a166bf                                            |
    +----------+-------------------------------------------------------------------------------------------------------------------------+
    
    

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.

  • Verificare che il file /etc/keystone/keystone.conf contenga la seguente riga:
    [catalog]
    driver = keystone.catalog.backends.sql.Catalog
    

Definizione del servizio identity (Keystone)

  • Creare il servizio "keystone":
    # keystone --token $ADMIN_TOKEN --endpoint $ENDPOINT service-create \
       --name=keystone --type=identity --description="Keystone Identity Service"
    +-------------+----------------------------------+
    |   Property  |              Value               |
    +-------------+----------------------------------+
    | description |    Keystone Identity Service     |
    |      id     | 7ba50cacbf9d48ce89bb3a48600025e0 |
    |     name    |             keystone             |
    |     type    |             identity             |
    +-------------+----------------------------------+
    
    

  • Creare l'endpoint per il servizio "keystone":
    # keystone --token $ADMIN_TOKEN --endpoint $ENDPOINT endpoint-create \
       --region RegionOne --service_id=$KEYSTONE_SERVICE_ID \
       --publicurl=$KEYSTONE5000 --internalurl=$KEYSTONE5000 \
       --adminurl=$ENDPOINT
    +-------------+-----------------------------------+
    |   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             |
    |  service_id |  7ba50cacbf9d48ce89bb3a48600025e0 |
    +-------------+-----------------------------------+
    

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).

  • Creare il servizio "nova":
    # keystone --token $ADMIN_TOKEN --endpoint $ENDPOINT service-create \
       --name=nova --type=compute --description="Nova Compute Service"
    +-------------+----------------------------------+
    |   Property  |              Value               |
    +-------------+----------------------------------+
    | description |       Nova Compute Service       |
    |      id     | 77faae0db3f741b0b14cd926ccdcc0d7 |
    |     name    |               nova               |
    |     type    |             compute              |
    +-------------+----------------------------------+
    
    

  • Creare l'endpoint per il servizio "nova":
    # keystone --token $ADMIN_TOKEN --endpoint $ENDPOINT endpoint-create \ 
       --region RegionOne --service_id=$NOVA_SERVICE_ID \
       --publicurl='http://<CLOUD_CONTROLLER_HOSTNAME>:8774/v2/%(tenant_id)s'  \
       --internalurl='http://<CLOUD_CONTROLLER_HOSTNAME>:8774/v2/%(tenant_id)s' \
       --adminurl='http://<CLOUD_CONTROLLER_HOSTNAME>:8774/v2/%(tenant_id)s'
    +-------------+---------------------------------------------+
    |   Property  |                    Value                    |
    +-------------+---------------------------------------------+
    |   adminurl  | http://192.168.200.21:8774/v2/%(tenant_id)s |
    |      id     |       d5205b8e45b24871aaa88376da990a0a      |
    | internalurl | http://192.168.200.21:8774/v2/%(tenant_id)s |
    |  publicurl  | http://192.168.200.21:8774/v2/%(tenant_id)s |
    |    region   |                  RegionOne                  |
    |  service_id |       77faae0db3f741b0b14cd926ccdcc0d7      |
    +-------------+---------------------------------------------+
    
    Dove <CLOUD_CONTROLLER_HOSTNAME> è l'hostname del Cloud Controller (Nova). Nel nostro caso è 192.168.200.21 .

Definizione del servizio volume (Volume)

Il servizio volume richiede un endpoint specifico per ogni tenant.

  • Creare il servizio "volume":
    # keystone --token $ADMIN_TOKEN --endpoint $ENDPOINT service-create \
       --name=volume --type=volume --description="Nova Volume Service"
    +-------------+----------------------------------+
    |   Property  |              Value               |
    +-------------+----------------------------------+
    | description |       Nova Volume Service        |
    |      id     | 307b3276f0304684beeabefbc5cfedce |
    |     name    |              volume              |
    |     type    |              volume              |
    +-------------+----------------------------------+
    
    

  • Creare l'endpoint per il servizio "volume":
    # keystone --token $ADMIN_TOKEN --endpoint $ENDPOINT endpoint-create \
       --region RegionOne --service_id=$NOVA_VOLUME_SERVICE_ID \
       --publicurl='http://<CLOUD_CONTROLLER_HOSTNAME>:8776/v1/%(tenant_id)s'  \
       --internalurl='http://<CLOUD_CONTROLLER_HOSTNAME>:8776/v1/%(tenant_id)s' \
       --adminurl='http://<CLOUD_CONTROLLER_HOSTNAME>:8776/v1/%(tenant_id)s'
    +-------------+---------------------------------------------+
    |   Property  |                    Value                    |
    +-------------+---------------------------------------------+
    |   adminurl  | http://192.168.200.21:8776/v1/%(tenant_id)s |
    |      id     |       51fa841e57a248c89124a1d340f0b4f8      |
    | internalurl | http://192.168.200.21:8776/v1/%(tenant_id)s |
    |  publicurl  | http://192.168.200.21:8776/v1/%(tenant_id)s |
    |    region   |                  RegionOne                  |
    |  service_id |       307b3276f0304684beeabefbc5cfedce      |
    +-------------+---------------------------------------------+
    
    Dove <CLOUD_CONTROLLER_HOSTNAME> è l'hostname del Cloud Controller (Nova). Nel nostro caso è 192.168.200.21 .

Definizione del servizio image (Glance)

  • Creare il servizio "glance":
    # keystone --token $ADMIN_TOKEN --endpoint $ENDPOINT service-create \
       --name=glance --type=image --description="Glance Image Service"
    +-------------+----------------------------------+
    |   Property  |              Value               |
    +-------------+----------------------------------+
    | description |       Glance Image Service       |
    |      id     | ec3e65796067413ea32c3c34c0a85d09 |
    |     name    |              glance              |
    |     type    |              image               |
    +-------------+----------------------------------+
    
    

  • Creare l'endpoint per il servizio "glance":
    # keystone --token $ADMIN_TOKEN --endpoint $ENDPOINT endpoint-create \
       --region RegionOne --service_id=$GLANCE_IMAGE_SERVICE_ID \
       --publicurl=http://<GLANCE_SERVER_HOSTNAME>:9292/v1  \
       --internalurl=http://<GLANCE_SERVER_HOSTNAME>:9292/v1 \
       --adminurl=http://<GLANCE_SERVER_HOSTNAME>:9292/v1
    +-------------+----------------------------------+
    |   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_id | ec3e65796067413ea32c3c34c0a85d09 |
    +-------------+----------------------------------+
    
    Dove <GLANCE_SERVER_HOSTNAME> è l'hostname del server sui è installato il servizio Glance. Nel nostro caso è 192.168.200.21 .


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.

  • Installare Glance tramite il gestore di pacchetti yum :
    # yum install python-swiftclient --enablerepo=epel-testing
    # yum install openstack-glance openstack-glance-doc
    


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.

  • Creare il DB glance:
    mysql> CREATE DATABASE glance;
    

  • Creare l'utente "glance" che ha completo accesso al DB "glance" appena creato.
    mysql> GRANT ALL ON glance.* TO 'glance'@'%' IDENTIFIED BY '<YOUR_GLANCEDB_PASSWORD>';
    
    Dove <YOUR_GLANCEDB_PASSWORD> è la password scelta per l'utente "glance" del DB.

  • Provare ad accedere a MySQL da locale con l'utente "glance" appena creato tramite il comando mysql -u glance -p digitando la password. Nel caso di accesso negato, accedere a MySQL da root ed eliminare l'utente anonimo con i seguenti comandi:
    mysql> DROP USER ''@'localhost';
    mysql> flush privileges;
    
    Questo problema è dovuto ad un bug di MySQL

Editare i file di configurazione di Glance

  • Modificare le seguenti righe nel file /etc/glance/glance-api-paste.ini :
    [filter:authtoken]
    admin_tenant_name = service
    admin_user = glance
    admin_password = <GLANCE_PASSWORD>
    
    Nota bene:
    • service è il tenant "service" creato durante la configurazione di Keystone
    • glance è l'utente del tenant "service" associato al servizio Glance
    • <GLANCE_PASSWORD> è la password scelta per l'utente "glance" creato nel tenant "service", non la password identificata da <YOUR_GLANCEDB_PASSWORD>

  • Modificare le seguenti righe nel file /etc/glance/glance-api.conf:
    [paste_deploy]
    config_file = /etc/glance/glance-api-paste.ini
    flavor = keystone
    
    * Verificare che sql_connection punti al DB MySQL piuttosto che a sqlite:
    sql_connection = mysql://glance:<YOUR_GLANCEDB_PASSWORD>@localhost/glance
    

  • Riavviare il servizio openstack-glance-api per rendere effettive le precedenti modifiche:
    # service openstack-glance-api restart
    

  • 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.

  • Modificare le seguenti righe nel file /etc/glance/glance-registry-paste.ini :
    [filter:authtoken]
    admin_tenant_name = service
    admin_user = glance
    admin_password = <GLANCE_PASSWORD>
    
    Verificare che la sezione pipeline:glance-registry contenga pipeline settato come segue:
    [pipeline:glance-registry]
    pipeline = authtoken auth-context context registryapp
    

  • Riavviare i servizi openstack-glance-registry e openstack-glance-api per rendere effettive le precedenti modifiche:
    # service openstack-glance-registry restart
    # service openstack-glance-api restart
    

  • Inizializzare il DB "glance":
    # glance-manage db_sync
    

  • Modificare il proprietario della directory /var/lib/glance :
    # chown -R glance:glance /var/lib/glance
    

  • Attivare i servizi al boot :
    # chkconfig openstack-glance-api on
    # chkconfig openstack-glance-registry on
    


Troubleshooting Glance

  • Scaricare un'immagine di test ed aggiungerla al repository di glance per verificare il corretto funzionamento del servizio. Dettaglio delle opzioni
    • name: Tag identificativo dell’immagine;
    • disk-format: L’opzione specifica il formato dell’immagine.  Altri formati supportati sono raw, vhd, vmdk, vdi, iso, aki, ari and ami
    • container-format: Questa opzione e’ al momento necessaria, ma non utilizzata. Con bare si vuole intendere che il file non contiene metadati sull’immagine e si raccomanda sempre di specificarla cosi’ come e’ nell’esempio
      # wget https://launchpad.net/cirros/trunk/0.3.0/+download/cirros-0.3.0-x86_64-disk.img 
      
      # glance image-create --name=cirros-0.3.0-x86_64 --disk-format=qcow2 --container-format=bare < cirros-0.3.0-x86_64-disk.img
      
      Added new image with ID: 691109ac-9673-4195-a27f-8211a49bfdcb
      
      
      # glance image-list
      ID                                   Name                           Disk Format          Container Format     Size          
      ------------------------------------ ------------------------------ -------------------- -------------------- --------------
      691109ac-9673-4195-a27f-8211a49bfdcb cirros-0.3.0-x86_64            qcow2                bare                        9761280
      
      
      # ls /var/lib/glance/images/
      691109ac-9673-4195-a27f-8211a49bfdcb  lost+found
      
      
      # glance image-show 691109ac-9673-4195-a27f-8211a49bfdcb
      URI: http://192.168.200.21:9292/v1/images/691109ac-9673-4195-a27f-8211a49bfdcb
      Id: 691109ac-9673-4195-a27f-8211a49bfdcb
      Public: No
      Protected: No
      Name: cirros-0.3.0-x86_64
      Status: active
      Size: 9761280
      Disk format: qcow2
      Container format: bare
      Minimum Ram Required (MB): 0
      Minimum Disk Required (GB): 0
      Owner: 7e266325c0ca4e01aa0a12f54c00adc5
      Created at: 2012-11-22T07:49:33
      Updated at: 2012-11-22T07:49:34
      
      


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.

  • Creare il DB "nova".
    mysql> CREATE DATABASE nova;
    
  • Creare l'utente "nova" che ha completo accesso al DB appena creato.
    mysql> GRANT ALL ON nova.* TO 'nova'@'%' IDENTIFIED BY '<YOUR_NOVADB_PASSWORD>';
    
    Dove <YOUR_NOVADB_PASSWORD> è la password scelta per l'utente "nova" del DB.


Installare il Cloud Controller

  • Installare il server di messaging queue. I servizi OpenStack comunicano tra di loro attraverso AMQP (Advanced Message Queue Protocol) usando un server di messaging. Su Fedora, RHEL e CentOS il server di messaging maggiormente testato è Apache Qpid.
    # yum install openstack-utils memcached qpid-cpp-server
    

  • Installare i pacchetti di nova e le dipendenze verranno installate automaticamente:
    # yum install openstack-nova
    

  • Far partire il servizio qpidd e configurarlo affinchè si avvi al boot del server
    # /etc/init.d/qpidd start
    
    # chkconfig qpidd on
    


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)

  • Per poter fare l'attach di un volume nova all'instanza di una macchina virtuale è necessario installare ed avviare il servizio scsi-target-utils sul Cloud Controller. Controllare quindi che sia installato attraverso il seguente comando:
    yum install scsi-target-utils
    
  • Inserire alla fine del file /etc/tgt/targets.conf la riga:
    include /var/lib/nova/volumes/*
    
  • Far partire il servizio:
    service tgtd start
    
  • Settare l'avvio automatico:
    chkconfig tgtd on
    


Nova

Configurazione dell'Hypervisor (KVM)

  • Installare i pacchetti per la virtualizzazione:
    # yum install qemu-kvm qemu-img virt-manager \
       python-virtinst bridge-utils libguestfs-tools
    
    # yum groupinstall Virtualization "Virtualization Client" \
       "Virtualization Platform" "Virtualization Tools"
    
    # yum install openstack-utils memcached qpid-cpp-server \
       openstack-nova-compute openstack-nova-network mysql dnsmasq-utils \
       python-keystone-auth-token
    
  • Requisito di configurazione per RHEL: assicurarsi che nel file /etc/qpidd.conf sia settato auth=no .


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

  • Cambiare il propietario della cartella nova :
    # chown -R nova:nova /etc/nova
    
  • Modificare due file in /etc/nova nel seguente modo.
    • Contentuto completo di nova.conf :
      [DEFAULT]
      
      logdir = /var/log/nova
      state_path = /var/lib/nova
      lock_path = /var/lib/nova/tmp
      verbose = False
      
      # kvm
      compute_driver = libvirt.LibvirtDriver
      libvirt_type = kvm
      libvirt_nonblocking = True
      libvirt_inject_partition = -1
      libvirt_xml_template = /usr/share/nova/libvirt.xml.template
      
      # sql
      sql_connection = mysql://nova:PASSWORD_UTENTE_DB_NOVA@192.168.200.21/nova
      
      # authentication
      auth_strategy = keystone
      
      # network manager
      network_manager = nova.network.manager.FlatDHCPManager
      force_dhcp_release = False
      dhcp_lease_time = 120
      dhcpbridge = /usr/bin/nova-dhcpbridge
      dhcpbridge_flagfile = /etc/nova/nova.conf
      firewall_driver = nova.virt.libvirt.firewall.IptablesFirewallDriver
      my_ip = THIS_SERVER_IP
      fixed_range = 192.168.122.0/24
      public_interface = eth1
      flat_network_bridge = virbr0
      flat_interface = eth2
      multi_host = True
      auto_assign_floating_ip = False
      injected_network_template = /usr/share/nova/interfaces.template
      allow_same_net_traffic=true
      
      # no vnc console
      vnc_enabled = True
      vncserver_listen = 0.0.0.0
      vncserver_proxyclient_address = THIS_SERVER_IP
      novncproxy_base_url=http://10.101.8.21:6080/vnc_auto.html
      xvpvncproxy_base_url=http://10.101.8.21:6081/console
      
      # qpid
      qpid_hostname = 10.101.8.21
      rpc_backend = nova.rpc.impl_qpid
      
      # glance
      image_service=nova.image.glance.GlanceImageService
      glance_api_servers=10.101.8.21:9292
      cache_images=true
      
      # other
      vpn_client_template = /usr/share/nova/client.ovpn.template
      credentials_template = /usr/share/nova/novarc.template
      rootwrap_config = /etc/nova/rootwrap.conf
      remove_unused_base_images = True
      
      # quota
      quota_cores=20
      quota_instances=20
      max_cores=24
      
      # volumes
      volume_group = nova-volumes
      iscsi_helper = tgtadm
      
      

Dove:

      • <PASSWORD_UTENTE_DB_NOVA> è la password dell'utente "nova" del DB "nova" del Cloud Controller
      • <THIS_SERVER_IP> è l'IP del server che si sta configurando
      • nei parametri sql_connection , glance_api_servers , novncproxy_base_url , xvpvncproxy_base_url e qpid_hostname l'ip 10.101.8.21 è il server che ospita il Cloud Controller e il servizio Keystone
      • nel parametro fixed_range il valore 192.168.122.0/24 indica il range di IP che possono essere assegnati alle macchine virtuali
      • nel parametro flat_network_bridge "virbr0" è l'interfaccia di rete virtuale del server che si sta configurando e si appoggia all'interfaccia fisica eth2
        
        
    • Parte finale di /etc/nova/api-paste.ini (la parte precedente rimane invariata):
      [...]
      
      [filter:authtoken]
      paste.filter_factory = keystone.middleware.auth_token:filter_factory
      service_protocol = http
      service_host = 192.168.200.21
      service_port = 5000
      auth_host = 192.168.200.21
      auth_port = 35357
      auth_protocol = http
      auth_uri = http://192.168.200.21:5000/
      admin_tenant_name = service
      admin_user = nova
      admin_password = NOVA_PASSWORD
      
      
      Dove:
      • <NOVA_PASSWORD> è la password che è stata associata all'utente del servizio Nova in Keystone
 
  • Per far partire i servizi di Nova per i Compute Nodes ed inizializzare il DB, lanciare i seguenti comandi:
    # for s in `ls /etc/init.d/openstack-nova-*`; do $s stop ; done
    
    # chkconfig openstack-nova-compute on
    # chkconfig openstack-nova-network on
    
    # nova-manage db sync
    
    #  /etc/init.d/openstack-nova-compute start
    
    # /etc/init.d/openstack-nova-network start
    

  • Sul Cloud controller verificare lo stato dei servizi Nova compute:
    # nova-manage service list
    
    Binary           Host                                 Zone             Status     State Updated_At
    nova-consoleauth mcloud01.regionemarche.intra         nova             enabled    :-)   2012-12-03 14:03:54
    nova-console     mcloud01.regionemarche.intra         nova             enabled    :-)   2012-12-03 14:03:48
    nova-volume      mcloud01.regionemarche.intra         nova             enabled    :-)   2012-12-03 14:03:50
    nova-scheduler   mcloud01.regionemarche.intra         nova             enabled    :-)   2012-12-03 14:03:56
    nova-compute     mcloud02.regionemarche.intra         nova             enabled    :-)   2012-12-03 14:03:49
    nova-network     mcloud02.regionemarche.intra         nova             enabled    :-)   2012-12-03 14:03:51
    nova-cert        mcloud01.regionemarche.intra         nova             enabled    :-)   2012-12-03 14:03:54
    nova-network     mcloud01.regionemarche.intra         nova             enabled    :-)   2012-12-03 14:03:55
    nova-compute     mcloud04.regionemarche.intra         nova             enabled    :-)   2012-12-03 14:03:49
    nova-network     mcloud04.regionemarche.intra         nova             enabled    :-)   2012-12-03 14:03:57
    nova-compute     mcloud03.regionemarche.intra         nova             enabled    :-)   2012-12-03 14:03:48
    nova-network     mcloud03.regionemarche.intra         nova             enabled    :-)   2012-12-03 14:03:55
    

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.

  • Per mostrare la lista dei gruppi di sicurezza usare il seguente comando:
    # nova secgroup-list
    +---------+-------------+
    |   Name  | Description |
    +---------+-------------+
    | default | default     |
    +---------+-------------+
    

  • Abilitare l'accesso sulla porta TCP 22 (SSH) per tutti gli indirizzi di Nova:
    # nova secgroup-add-rule default tcp 22 22 0.0.0.0/0
    +-------------+-----------+---------+-----------+--------------+
    | IP Protocol | From Port | To Port |  IP Range | Source Group |
    +-------------+-----------+---------+-----------+--------------+
    | tcp         | 22        | 22      | 0.0.0.0/0 |              |
    +-------------+-----------+---------+-----------+--------------+
    

  • Abilitare il traffico ICMP (ping) per tutti gli IP di Nova:
    # nova secgroup-add-rule default icmp -1 -1 0.0.0.0/0
    +-------------+-----------+---------+-----------+--------------+
    | IP Protocol | From Port | To Port |  IP Range | Source Group |
    +-------------+-----------+---------+-----------+--------------+
    | icmp        | -1        | -1      | 0.0.0.0/0 |              |
    +-------------+-----------+---------+-----------+--------------+
    

  • 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).

  • Installare i seguenti pacchetti:
    yum install memcached mod_wsgi openstack-dashboard novnc openstack-nova-novncproxy
    
  • Far partire il servizio openstack-nova-novncproxy e farlo partire il automatico:
    # service openstack-nova-novncproxy start
    # chkconfig openstack-nova-novncproxy on
    
  • Su ogni compute node installare novnc:
    # yum install novnc
    

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

  • Di default l'IP forwarding è disabilitato sulla maggior parte delle distribuzioni Linux. Per poter assegnare indirizzi pubblici alle macchine è necessario che l'IP forwarding sia abilitato. Verificare se è abilitato tramite il seguente comando:
    # sysctl net.ipv4.ip_forward
    net.ipv4.ip_forward = 0
    
  • In questo esempio è disabilitato. e' possibile abilitarlo al volo usando il seguente comando:
    # sysctl -w net.ipv4.ip_forward=1
    
    *Al fine di rendere permanente questa modifica, editare il file /etc/sysctl.conf inserendo o modificando la seguente riga:
    net.ipv4.ip_forward = 1
    

Creare una lista di floating IP

  • Nova può gestire una lista di IP pubblici che possano essere assegnati alle istanze virtuali. Per aggiungere un IP alla lista:
    # nova-manage floating create <AVAILABLE_PUBLIC_IP>
    
    Dove <AVAILABLE_PUBLIC_IP> è un IP disponibile.
    
    
  • E' possibile aggiungere una sottorete tramite:
    # nova-manage floating create --ip_range=<SUBNET>
    
    Dove <SUBNET> è una sottorete disponibile (es. 131.154.100.0/24). Per la gestione della lista di IP pubblici sono disponibili i seguenti comandi:
    • nova-manage floating list : mostra la lista degli IP pubblici inseriti
    • nova-manage floating create : aggiunge un IP alla lista
    • nova-manage floating create --ip-range= : aggiunge una sottorete alla lista
    • nova-manage floating delete : rimuove un IP dalla lista
    • nova-manage floating delete --ip-range= : rimuove una sottorete dalla lista

  • Nel caso del pilota MarcheCloud è stata creata la seguente lista di floating IP:
    # nova-manage floating create --ip_range=10.101.8.128/25
    
    # nova-manage floating list
    None   10.101.8.129   None   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
    

Assegnazione IP ad una macchina virtuale

  • Nel caso in cui non sia abilitata l'assegnazione automatica dei floating IP alle macchine virtuali in fase di istanziazione (verificabile dalla presenza nel file /etc/nova/nova.conf della riga auto_assign_floating_ip = True ), come nel caso dell'infrastruttura pilota, è possibile assegnare manualmente un IP ad un'istanza. Per assegnare un IP ad un'istanza è necessario prima assegnare l'IP al progetto, attraverso il seguente comando:
    # nova floating-ip-create
    
    # nova-manage floating list
    14998a053eb745bb852d7a593812da2f   10.101.8.129   None   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
    
    Nota bene: il progetto a cui viene assegnato l'IP è il tenant con cui ci si è autenticati.

  • 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

Topic attachments
I Attachment Action Size Date Who Comment
PNGpng figura3.png manage 78.8 K 2013-03-22 - 09:50 PaoloVeronesi glusterfs
PNGpng figura4.png manage 190.7 K 2013-03-21 - 16:45 PaoloVeronesi network
Edit | Attach | PDF | History: r22 < r21 < r20 < r19 < r18 | Backlinks | Raw View | More topic actions
Topic revision: r22 - 2013-03-22 - PaoloVeronesi
 
This site is powered by the TWiki collaboration platformCopyright © 2008-2019 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback