# OpenStack

OpenStack (a volte indicato come O~S) è una suite software per l'allestimento e la gestione di piattaforme cloud IaaS.
È un software libero open source rilasciato sotto licenza Apache che integra il codice dalla piattaforma della NASA Nebula e dalla piattaforma Rackspace. A oggi oltre 500 società si sono unite al progetto tra cui Arista Networks, AT&T, AMD, Avaya, Brocade Communications Systems, Canonical, Cisco Systems, Dell, EMC, Ericsson, F5 Networks, Groupe Bull, Hewlett-Packard, IBM, Inktank, Intel, NEC, NetApp, Nexenta, Rackspace Hosting, Red Hat, VMware, Oracle e Yahoo!.

## Componenti

L'architettura di Openstack è suddivisa nei seguenti moduli:
* OpenStack Compute (nome in codice Nova)
* OpenStack Object Storage (nome in codice Swift)
* OpenStack Image Service (nome in codice Glance)
* OpenStack Identity (nome in codice Keystone)
* OpenStack Dashboard (nome in codice Horizon)
* OpenStack Networking (nome in codice Neutron, precedentemente Quantum)
* OpenStack Block Storage (nome in codice Cinder)

### Compute (Nova)

OpenStack Compute (Nova) è un controller per il cloud computing (la parte principale di un sistema IaaS). È scritto in Python e usa molte librerie esterne quali Eventlet (per la programmazione concorrente), Kombu (per la comunicazione AMQP), e SQLAlchemy (per l'accesso al database).
L'architettura di Compute è progettata per scalare orizzontalmente su hardware standard senza particolari requisiti software o hardware proprietari e di fornire la capacità di integrarsi con i sistemi legacy e tecnologie di terze parti. È stato progettato per gestire e automatizzare il pool di risorse del computer e può funzionare con tecnologie di virtualizzazione ampiamente utilizzate, come pure in configurazioni bare-metal e high-performance computing (HPC). Ad esempio KVM e XenServer sono scelte disponibili come hypervisor.

### Object Storage (Swift)

OpenStack Object Storage (Swift) è un sistema di storage scalabile e ridondante. Gli oggetti e i file sono memorizzati su diversi dischi distribuiti su diversi server nel centro di calcolo. OpenStack si fa carico del compito di assicurare la replica e l'integrità dei dati all'interno del cluster. Il cluster di storage può scalare orizzontalmente semplicemente aggiungendo nuovi server. In caso di guasto ad un server o ad un disco, OpenStack replica i contenuti dai nodi ancora attivi in altri dischi e/o server, al fine di mantenere il livello di affidabilità e ridondanza configurati. Dato che OpenStack effettua le operazioni di replica e distribuzione dei dati sulle differenti unità via software, si può utilizzare hardware commerciale senza dover ricorrere a costose soluzioni proprietarie.

### Block Storage (Cinder)

OpenStack Block Storage (Cinder) fornisce uno storage persistente a livello di dispositivi a blocchi per il loro utilizzo da parte delle istanze di OpenStack Compute. Il sistema di storage a blocchi gestisce la creazione, il collegamento e lo scollegamento dei dispositivi a blocchi ai server. I volumi del block storage sono pienamente integrati con OpenStack Compute e con la Dashboard, permettendo agli utenti di gestire i loro dispositivi di storage. In aggiunta ai sistemi locali di storage usuali di Linux, Cinder può utilizzare piattaforme di storage quali Ceph, CloudByte, Coraid, EMC (ScaleIO, VMAX e VNX), GlusterFS, Hitachi Data Systems, IBM Storage (Storwize family, SAN Volume Controller, XIV Storage System, e GPFS), Linux LIO, NetApp, Nexenta, Scality, SolidFire, HPE (StoreVirtual e 3PAR StoreServ families) e Pure Storage. Block Storage è particolarmente indicato per ottenere buone performance in casi quali lo storage di database, file system espandibili o per fornire ai server un accesso a storage raw block level. La gestione delle snapshot fornisce funzionalità per il backup dei dati memorizzati su volumi su block storage. Le snapshot possono essere ripristinate o utilizzate per creare nuovi volumi di storage a blocchi.

### Networking (Neutron)

OpenStack Networking (Neutron, in precedenza Quantum) è un sistema per la gestione delle reti e degli indirizzi IP. OpenStack Networking assicura che la rete non sarà il collo di bottiglia o fattore limitante in un cloud e offre agli utenti una reale gestione self-service anche delle loro configurazioni di rete.
OpenStack Networking fornisce differenti modelli di rete per le diverse applicazioni o i gruppi utente. I modelli standard includono flat networks o VLAN per la separazione del traffico. OpenStack Networking gestisce gli indirizzi IP, consentendo l'assegnazione di indirizzi IP statici dedicati oppure tramite DHCP.
I floating IP sono indirizzi che consentono di reindirizzare il traffico in modo dinamico a qualsiasi risorsa di calcolo gestita da OpenStack, questa caratteristica può essere utile in caso di manutenzione programmata o in caso di guasto. Gli utenti possono creare le proprie reti, controllare il traffico e collegare server e dispositivi per una o più reti.
Gli amministratori possono sfruttare la tecnologia SDN come OpenFlow per consentire elevati livelli di multi-tenancy e massive scale. OpenStack Networking ha un extension framework che consente la messa in campo e la gestione di servizi di rete aggiuntivi, come IDS, bilanciamento del carico, firewall e VPN.

### Dashboard (Horizon)

OpenStack Dashboard (Horizon) fornisce un'interfaccia grafica, sia per gli amministratori che per gli utenti, per l'accesso e la gestione delle risorse fornita dalla cloud. Horizon può integrarsi con prodotti e servizi di terze parti utili per la fatturazione, il monitoraggio e altri strumenti di gestione. La dashboard si può modificare nell'aspetto, funzionalità particolarmente utile per i fornitori di servizio e operatori commerciali che forniscono istanze di OpenStack. Horizon è solo uno dei vari metodi con cui si può interagire con le risorse fornite da OpenStack. Gli sviluppatori possono automatizzare l'accesso o realizzare strumenti per la gestione delle risorse usando la API native di OpenStack o la API per la compatibilità con EC2.