OpenStack: introduzione generale

openstack

Era il 19 Luglio del 2010 quando NASA, Rackspace ed altri enti presentavano al mondo un ambizioso progetto, il primo software in grado di consentire la progettazione di una piattaforma cloud: OpenStack. A distanza di sei anni è possibile affermare che il progetto open source è  un completo successo, con centinaia di aziende d’alto profilo coinvolte nel suo sviluppo (VMware, IBM, Cisco, DELL solo per citarne alcune) ed una delle community più grandi a livello globale.

La collaborazione tra la NASA e Rackspace, due enti profondamente diversi tra loro, avvenne per caso. Entrambe, senza che una fosse a conoscenza dell’operato dell’altra, avevano infatti iniziato a lavorare a delle applicazioni mirate alla costruzione di piattaforme cloud computing. La National Aeronautics and Space Administration era impegnata nello sviluppo di Nova, un “clone” di AWS EC2 sviluppato in Python ma sotto licenza Apache, condizione che lo metteva a disposizione di chiunque senza alcuna restrizione (open source). Rackspace stava invece lavorando a SWIFT, un progetto portato avanti sempre in Python e sostanzialmente in grado di emulare le funzioni di AWS Simple Storage Service (S3).

Una coincidenza volle che Rick Clark di Rackspace, che in quel periodo era coinvolto nello sviluppo di un’applicazione open source per il cloud, venisse a conoscenza del progetto NOVA, circostanza che lo convinse a chiedere un incontro con l’ente aerospazionale statunitense per un confronto diretto tra le parti – del resto sapere che la NASA stava lavorando ad un progetto simile destava più di una preoccupazione nei vertici aziendali.

Sorprendentemente si scoprì che Nova e SWIFT erano complementari: il primo si occupava infatti di fornire potenza computazionale e server virtuali mentre il secondo provvedeva allo storage. Dopo il primo positivo incontro i due team decisero in una riunione successiva di fondere i due progetti: il nome scelto per il nuovo progetto congiunto ed open source fu OpenStack.

L’architettura di OpenStack

OpenStack - servizi principali (Wikipedia)

OpenStack è un progetto che ha lo scopo di creare una piattaforma per ambienti cloud pubblico o privato ed in grado di offrire una scalabilità ottimale. Ogni major release viene identificata da uno specifico “nome in codice”: attualmente si è giunti alla tredicesima versione della piattaforma (“Mitaka”, pubblicata il 7 Aprile 2016). Con l’evoluzione del progetto e l’arrivo di nuove release si sono aggiunti componenti non presenti in “Austin” (prima versione di OpenStack e costituita esclusivamente dai moduli Nova e Swift): Glance (2011); Horizon, Keystone, Quantum, Cinder (2012); Heat, Ceilometer (2013); Trove, Sahara (2014); Ironic, Zaqar, Manila, Designate, Barbican, Searchlight (2015); Magnum (2016). Vediamo di presentare  i componenti presenti nello schema partendo da:

  • Nova (OpenStack Compute). Software che si occupa di orchestrare, gestire e mettere a disposizione macchine virtuali (VM). In generale Nova ha funzionalità e mansioni simili a quelle di AWS EC2 perchè permette di creare, gestire ed eliminare server virtuali basandosi su immagini di sistema proprie attraverso un’API programmabile. Nova è progettata come un’applicazione distribuita con molti componenti ma la maggioranza di questi sono demoni scritti in Python di due tipologie: applicazioni Web Server Gateway Interface (WSGI) che ricevono e mediano chiamate API ; Worker daemons per realizzare le operazioni di orchestrazione.
  • Swift (Object Storage). Lo scopo principale del software è quello di offrire un’archiviazione di oggetti scalabile e ridondante in maniera molto simile al servizio AWS S3. Per assicurare questa scalabilità e ridondanza, Swift scrive copie multiple di ogni oggetto per server di storage multipli, all’interno di zone separate. Le zone sono dei raggruppamenti logici di server storage che sono stati isolati l’uno dall’altro per prevenire guasti.
  • Glance (Image). Il suo debutto risale alla seconda versione “Bexar” (2011); lo scopo principale del componente è quello di fornire un servizio di catalogo per la memorizzazione e l’interrogazione di immagini di dischi. Glance può funzionare anche al di fuori di OpenStack (standalone) ma adoperato congiuntamente con Nova e Swift si rivela un utile strumento per la gestione di immagini disco nel cloud.
  • Horizon (Dashboard). L’approvigionamento e l’automatizzazione delle risorse cloud viene effettuato mediante il comodo software che consente di intervenire su vari aspetti mediante interfaccia.
  • Keystone (Identity). La risultante di vari progetti confluiti in un unico sistema di autenticazione. Il componente si occupa, come suggerisce il nome, di monitorare gli utenti ed i privilegi di accesso ai corrispettivi servizi. Sono supportate modalità multiple di autenticazione, dalla classica soluzione username / password fino ai sistemi token-based sul modello AWS.
  • Cinder (block storage). Termine che si riferisce ad una determinata modalità di archiviazione dati impiegata in ambienti SAN e nella quale i dati sono raggruppati in volumi o blocchi, che operano come se fossero degli hard drive. Per quanto riguarda il componente: è pensato per scenari di lavoro in cui sono necessarie performance di alto livello – database storage o file di sistema espandibili. Il sistema di block storage gestisce la creazione, eliminazione ed associazione dei dispositivi block storage ai server. Cinder è compatibile con un’ampia gamma di piattaforme storage: Coraid, IBM Storage, NetApp, Nexenta, HP, Pure Storage per citarne solo alcune.
  • Heat (Orchestration). Un servizio per l’orchestrazione di applicazioni cloud mediante template ed a mezzo di API (native OpenStack o QueryAPI compatibili con CloudFormation AWS).

OpenStack è naturalmente un argomento che non è possibile esaurire in poche righe e che attualmente conta online decine di migliaia di pagine di documentazione tra progetti e schematica varia. Per tutti coloro che fossero interessati ad approfondire ulteriormente consigliamo una serie di link: