Cloud Controller: descrizione,
installazione e test
Matteo Manzali
(INFN CNAF - Università degli Studi di Ferrara)
Formazione MCloud WP1 – Ancona 18-19 Marzo 2013
Schema generale
•  Nell’infrastruttura prototipale MCloud
vengono individuati 4 macro componenti:
§ 
§ 
§ 
§ 
Dashboard (Horizon)
Image (Glance)
Identity (Keystone)
Compute (Nova)
•  Oggi ci occuperemo del
macro componente Compute.
Formazione MCloud WP1 – Cloud Controller: descrizione, installazione e test
2
I princìpi di OpenStack
•  L’architettura Openstack si basa sui concetti di sharednothing e messaging-based.
•  Tutti i componenti possono essere eseguiti su server distinti
(Cloud Controller, Compute Node, Volume Controller,
Network Controller, Image Server, Identity Service).
•  Per evitare di bloccare ogni componente mentre è in attesa
di una risposta, i componenti di Openstack usano chiamate
asincrone.
Formazione MCloud WP1 – Cloud Controller: descrizione, installazione e test
3
Comunicazione tra i vari
componenti OpenStack
•  La comunicazione tra i macro componenti (Compute,
Dashboard, Image, Identity) avviene via HTTP attraverso le
API che i componenti mettono a disposizione.
•  La comunicazione tra i componenti che compongono la
parte Compute avviene via AMQP (Advanced Message
Queue Protocol), ovvero un protocollo per lo scambio di
messaggi attraverso delle code.
Formazione MCloud WP1 – Cloud Controller: descrizione, installazione e test
4
I componenti di Nova (1)
•  L’API server riceve le richieste dell’utente e le manda al
Cloud Controller.
•  Il Cloud Controller è il nodo centrale del sistema ed
interagisce con tutti gli altri componenti attraverso code di
messaggi.
•  L’Authorization Manager fornisce servizi di autenticazione
ed autorizzazione, in alternativa può essere usato l’Identity
Service (keystone) come servizio di autenticazione
separato (come nel caso dell’infrastruttura pilota).
Formazione MCloud WP1 – Cloud Controller: descrizione, installazione e test
5
I componenti di Nova (2)
•  Lo Scheduler sceglie il Compute Node su cui lanciare
una istanza.
•  Il Compute Node fornisce risorse di calcolo e permette
l’istanziazione delle macchine virtuali.
•  Il Network Controller permette alle macchine virtuali di
interagire con i Compute Nodes e con la rete esterna.
•  Il Volume Controller fornisce uno storage veloce e
permanente per i Compute Nodes.
Formazione MCloud WP1 – Cloud Controller: descrizione, installazione e test
6
I componenti di Nova (3)
Formazione MCloud WP1 – Cloud Controller: descrizione, installazione e test
7
I componenti di Nova (4)
•  Per capire come i componenti appena citati lavorano
essieme, seguiamo il flusso di lavoro causato dalla
richiesta di istanziazione di una macchina virtuale:
§  Il server API riceve il comando di lanciare una nuova istanza
§  Il server API controlla se l’utente è autorizzato (interrogando
l’authorization manager) e manda la richiesta al Cloud Controller (1)
§  Il Cloud Controller manda la richiesta allo Scheduler (2)
§  Lo scheduler designa un Compute Node e gli comunica di avviare una
nuova istanza (3,4)
§  Il Compute Node ha bisogno di un IP per lanciare la nuova istanza, quindi
manda un messaggio al Network Controller (5,6,7,8)
§  Il Compute Node conclude l’istanziazione della nuova macchina virtuale
Formazione MCloud WP1 – Cloud Controller: descrizione, installazione e test
8
I servizi di Nova (1)
•  nova-api: accetta e risponde alle richieste di computazione da parte degli
utenti. Supporta le API Compute di OpenStack, EC2 di Amazon e delle
speciali API Admin per permettere ad utenti privilegiati di effettuare
operazioni di amministrazione.
•  nova-compute: è principalmente un demone che crea e termina le istanze di
macchine virtuali attraverso le API dell’hypervisor (XenAPI per XenServer/
XCP, libvirt per KVM o QEMU, VMwareAPI per VMware, ecc...). Preleva i
task da una coda, esegue i comandi di sistema relativi al task prelevato
(come lanciare una istanza KVM) ed aggiorna nel database lo stato delle
operazioni effettuate.
•  nova-network: questo demone è simile a nova-compute. Preleva da una coda
i task riguardanti la rete ed esegue i comandi di sistema necessari (come
creare un’interfaccia di rete virtuale oppure modificare le regole di iptables).
Queste funzionalità è stata migrata in Quantum, un nuovo componente di
OpenStack.
Formazione MCloud WP1 – Cloud Controller: descrizione, installazione e test
9
I servizi di Nova (2)
•  nova-schedule: preleva da una coda una richiesta di creazione di una macchina
virtuale e determina quale hypervisor deve svolgere l’operazione.
•  nova-volume: preleva da una coda le richieste relative ai volumi (creazione,
eliminazione, associazione o deassociazone) ed esegue le operazioni
necessarie.
•  qpid: implementa le code, ovvero fornisce un hub centrale per lo scambio di
messaggi tra i demoni di OpenStack. In alternativa a qpid può essere usato
RabbitMQ o ZeroMQ.
•  MySQL: contiene tutte le informazioni riguardo lo stato attuale dei componenti
OpenStack, ovvero informazioni riguardo le istanze, le reti, i progetti, ecc…
Nova supporta tutti i tipi di database supportati da SQL-Alchemy.
•  Nova inoltre fornisce servizi per permettere all’utente di accedere alla propria
macchina virtuale attraverso un proxy. Questo meccanismo coinvolge diversi
demoni (nova-console, nova-novncproxy e nova-consoleauth).
Formazione MCloud WP1 – Cloud Controller: descrizione, installazione e test
10
Rapporto tra componenti e
servizi
Cloud Controller
Compute Node
Network Controller
Scheduler
Volume Controller
à
à
à
à
à
qpid
nova-compute
nova-network
nova-schedule
nova-volume
•  Come Authorization Manager useremo Keystone, chè è già stato
installato e configurato per Nova.
•  Il database MySQL è comune a tutti i servizi Nova, può esserci un
database condiviso oppure un database per singolo servizio.
Formazione MCloud WP1 – Cloud Controller: descrizione, installazione e test
11
Distribuzione dei componenti
•  Come già anticipato, i componenti di OpenStack sono
stati pensati per poter essere installati ciascuno su un
server differente.
•  Questo permette sia un’alta flessibilità e scalabilità.
•  Solitamente i Compute Node vengono posti su server
dedicati, ovvero server il cui unico scopo è quello di
essere degli hypervisors.
•  I restanti componenti possono essere posti su un unico
server oppure distribuiti su più server.
Formazione MCloud WP1 – Cloud Controller: descrizione, installazione e test
12
Architettura dell’infrastruttura
per la formazione
•  Avendo a disposizione due server (di cui uno virtuale), i
componenti della parte Compute verranno installati come
segue:
§  Tutti i componenti, eccetto il Compute Node, sul primo server
(dove sono stati installati anche Keystone e Glance)
§  Il Compute Node sul secondo server (che funge solamente da
hypervisor)
§  Come database verrà utilizzato il database mysql installato per
Keystone e già usato anche da Glance
Formazione MCloud WP1 – Cloud Controller: descrizione, installazione e test
13
Iniziamo con l’installazione
Formazione MCloud WP1 – Cloud Controller: descrizione, installazione e test
14
Configurazione del database
•  Collegarsi a MySQL da linea di comando con:
# mysql -u root -p
E digitare 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.
Formazione MCloud WP1 – Cloud Controller: descrizione, installazione e test
15
Installazione dei servizi
•  Installare il server di messaging queue. 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
Formazione MCloud WP1 – Cloud Controller: descrizione, installazione e test
16
Disabilitazione servizi e
cambio owner di nova
•  Il servizio openstack-nova-metadata-api va in conflitto con il servizio openstack-novaapi , 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
[...]
•  Cambiare il proprietario della cartella nova:
# chown -R nova:nova /etc/nova
Formazione MCloud WP1 – Cloud Controller: descrizione, installazione e test
17
Modifiche file nova.conf (1)
•  Sostituire il contenuto del file /etc/nova/nova.conf con:
[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
# authentication
auth_strategy = keystone
Formazione MCloud WP1 – Cloud Controller: descrizione, installazione e test
18
Modifiche file nova.conf (2)
# 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 = <PRIVATE_NETWORK>
public_interface = eth0
flat_network_bridge = virbr0
flat_interface = eth0
multi_host = True
auto_assign_floating_ip = False
injected_network_template = /usr/share/nova/interfaces.template
allow_same_net_traffic=true
Formazione MCloud WP1 – Cloud Controller: descrizione, installazione e test
19
Modifiche file nova.conf (3)
# sql
sql_connection = mysql://
nova:<PASSWORD_UTENTE_DB_NOVA>@<DB_SERVER_IP>/nova
# no vnc console
vnc_enabled = True
vncserver_listen = 0.0.0.0
vncserver_proxyclient_address = <THIS_SERVER_IP>
novncproxy_base_url=http://<VNC_SERVER_IP>:6080/vnc_auto.html
xvpvncproxy_base_url=http://<VNC_SERVER_IP>:6081/console
# qpid
qpid_hostname = <QPID_SERVER_IP>
rpc_backend = nova.rpc.impl_qpid
# volumes
volume_group = nova-volumes
iscsi_helper = tgtadm
Formazione MCloud WP1 – Cloud Controller: descrizione, installazione e test
20
Modifiche file nova.conf (4)
# glance
image_service=nova.image.glance.GlanceImageService
glance_api_servers=<GLANCE_SERVER_IP>: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
Formazione MCloud WP1 – Cloud Controller: descrizione, installazione e test
21
Modifiche file nova.conf (5)
•  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
§  <DB_SERVER_IP> è l’IP del server che ospita il database
§  <VNC_SERVER_IP> è l’IP del server che ospita il servizio VNC
§  <QPID_SERVER_IP> è l’IP del server che ospita il servizio qpid
§  <GLANCE_SERVER_IP> è l’IP del server che ospita il servizio Glance
§  <PRIVATE_NETWORK> è la rete i cui IP che possono essere assegnati alle
macchine virtuali (192.168.121.0/24 oppure 192.168.122.0/24, in base al gruppo)
§  nel parametro flat_network_bridge "virbr0" è l'interfaccia di rete virtuale del server
che si sta configurando e si appoggia all'interfaccia fisica eth0 (specificata nel
parametro flat_interface)
§  Nel parametro public_interface “eth0” è l’interfaccia di rete su cui stanno gli IP
pubblici (floating IP)
Formazione MCloud WP1 – Cloud Controller: descrizione, installazione e test
22
Modifiche file api-paste.ini
•  Modificare la parte finale del file /etc/nova/api-paste.ini con:
[filter:authtoken]
paste.filter_factory = keystone.middleware.auth_token:filter_factory
service_protocol = http
service_host = <KEYSTONE_SERVER_IP>
service_port = 5000
auth_host = <KEYSTONE_SERVER_IP>
auth_port = 35357
auth_protocol = http
auth_uri = http://<KEYSTONE_SERVER_IP>:5000/
admin_tenant_name = service
admin_user = nova
admin_password = <NOVA_PASS>
•  Dove:
§  <KEYSTONE_SERVER_IP> è l’IP del server che ospita il servizio Keystone
§  <NOVA_PASS> è la password associata all'utente del servizio Nova in Keystone
Formazione MCloud WP1 – Cloud Controller: descrizione, installazione e test
23
Avvio automatico servizi e
sincronizzazione del DB
•  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
Formazione MCloud WP1 – Cloud Controller: descrizione, installazione e test
24
Bug fix eliminazione volumi
•  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 da un singolo processo 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 al file /etc/sudoers la
riga:
nova ALL = (root) NOPASSWD: /bin/dd
Formazione MCloud WP1 – Cloud Controller: descrizione, installazione e test
25
Installazione servizio iscsi
•  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
Formazione MCloud WP1 – Cloud Controller: descrizione, installazione e test
26
Test dell’installazione
•  La verifica vera e propria dell’installazione dei componenti
relativi alla parte Compute di OpenStack verrà fatta al termine
dell’installazione del Compute Node.
•  Per il momento si può controllare che i servizi installati nel
Cloud Controller siano running:
# for s in `ls /etc/init.d/openstack-nova-*`; do $s status ; done
# service tgtd start
Verificando l’output di tali comandi.
Formazione MCloud WP1 – Cloud Controller: descrizione, installazione e test
27
Domande?
Formazione MCloud WP1 – Cloud Controller: descrizione, installazione e test
28
Fonti
•  Guida Mcloud: installazione Cloud Controller
https://wiki.italiangrid.it/twiki/bin/view/MarcheCloud/
InstallingAndConfiguringCloudController
•  Guida Ufficiale installazione di OpenStack su RedHat
http://docs.openstack.org/folsom/openstack-compute/
install/yum/content/
Formazione MCloud WP1 – Descrizione dei principali casi d’uso di OpenStack in Mcloud
29