Il tema è complesso e, se non siete sviluppatori, apparentemente cervellotico. Anche per molti sviluppatori, in realtà si tratta di un argomento molto di nicchia. Ma in realtà è centrale allo sviluppo delle tecnologie di rete perché quando si parla di cloud sempre meno si parla di macchine virtuali e sempre più invece si parla di container. Proprio in questo settore Red Hat, l’azienda americana specializzata nei servizi sopra e attorno a Linux e al software open source, sta per segnare un colpo molto importante: comprare CoreOS. Sul tavolo ci sono 250 milioni di dollari, l’accordo si concluderà probabilmente senza problemi e nel futuro di RedHat c’è la possibilità di avere la tecnologia open source Kubernetes come risorsa da contribuire in maniera determinante a sviluppare e quindi influenzare oltre a capire e integrare nei propri prodotti (come ad esempio OpenShift).
Di cosa parliamo quando parliamo di cloud
Cominciamo dal cloud: il sistema di erogazione di risorse informatiche a distanza (calcolo, archiviazione, rete) è basato sull’idea di virtualizzazione. Quando si accede a un servizio via cloud, sia esso di infrastruttura come servizio, piattaforma come servizio o software come servizio, non si va a toccare un singolo computer dall’altra parte, bensì una macchina virtuale che viene fatta girare all’interno di un centro di calcolo e magari richiede più di un server fisico (o solo una porzione della potenza di un server fisico) per funzionare, o può essere migrata da un centro di calcolo all’altro, oppure può essere clonata, riprodotta, salvata e preservata, spostata fuori dal cloud in un centro di calcolo aziendale (on premises). Insomma, il cloud è una grandissima invenzione, concettualizzata da Amazon prima di tutti, ma dobbiamo alla sottostante tecnologia della virtualizzazione se esiste e funziona. Cioè, se la mettiamo in un altro modo, la virtualizzazione è la materia, la grana del tessuto di cui è fatto il cloud.
Il punto è che adesso questo tessuto ha cominciato a mutare e si utilizza invece un altro tipo di materia per creare i servizi cloud. Anziché virtualizzare un intero sistema operativo per poi attivare sostanzialmente un singolo servizio al suo vertice, seguendo un approccio che deriva ed è legato a una visione server-centrica del software, nel tempo è stata sviluppata una alternativa più semplice e snella, che richiede molte meno risorse e che si basa sulla possibilità di sfruttare delle caratteristiche del kernel di Linux.
L’era dei container
Intanto, la virtualizzazione può essere software o hardware. A giocare una carta importante, con i lavoro fatto da Intel, in passato sono stati gli ipervisori hardware nei processori di Intel, che permettono di dividere l’uso delle risorse tra macchina fisica e macchine logiche in maniera molto semplice e diretta. Questo però ha creato problemi anche di compatibilità e portabilità delle soluzioni di virtualizzazione, con aumento dei costi. Per questo l’idea di un ipervisore software ha preso sempre più piede. Linux nel suo kernel ha la possibilità di partizionare l’accesso alle risorse della macchina fisica sottostante in maniera molto precisa e articolata grazie alle tecnologie “cgroups” e “namespace”. La virtualizzazione software non crea le tradizionali macchine virtuali ma dei sistemi più semplici ritagliati attorno a una singola applicazione che viene fatta girare in modalità virtualizzata rispetto al resto delle attività della macchina fisica Linux. Si parla in questo caso di containerizzazione, e cioè di container, anziché di macchina virtuale, perché non è necessario creare e fare deployment di un sistema operativo virtuale da utilizzare come base per il funzionamento del carico di lavoro.
CoreOS è una azienda che ha realizzato una distribuzione Linux ultraleggera orientata semplicemente a far funzionare dei server e a far girare dei container. Si spoglia tutto quel che è eredità del “vecchio” mondo dei Pc-server, con decine e decine di servizi e parti del sistema operativo inutili alla finalità del lavoro sui container. Questi ultimi sono semplici applicazioni “chiuse” all’interno di una serie di specifiche software che vengono salvate come file e caricate nella parte chiamata userspace blindata per l’esecuzione di un solo carico di lavoro con determinate risorse di CPU, memoria, disco e I/O a disposizione. I container permettono così di generare molto rapidamente e con pochissimo carico di lavoro per il server migliaia se non milioni di istante di lavoro con specifici compiti.
Se vogliamo fare un paragone per cercare di capire la differenza, anziché costruire un aeroplano di linea con tutte le complessità ingegneristiche e poi di costi e manutenzione, per spostare una semplice scatolina, si costruisce un piccolo ma potente drone che ha il vantaggio di costare pochissimi e poter essere riprodotto in un numero virtualmente infinito di copie, per trasportare sempre più scatoline sino a fare quanto e più di quel che si potrebbe fare con un aeroplano di linea.
L’importanza di un Kubernetes
Un possibile utilizzo dei container è per esempio nelle transazioni economiche: ogni volta che un utente accede al database della sua banca che contiene il suo conto corrente, ad esempio, per fare un pagamento o magari solo vedere il saldo contabile, si può avviare un container che contiene tutto il necessario a creare la relazione tra utente e database, azzerando i rischi ed eliminando il container una volta finito. Stesso discorso per la gestione della posta elettronica, oppure per l’attivazione di una singola risorsa di un sistema di ecommerce, ad esempio creando un minisito web ad hoc per autenticare un utente. E questi sono alcuni degli esempi di alto livello, ma in realtà il lavoro dei container è su moltissimi fronti diversi e con differenti livelli di astrazione.
Serve un coordinamento, un modo per dirigere l’orchestra composta da migliaia e migliaia, in alcuni casi anche milioni di container che vengono creati, fatti funzionare e poi cancellati quando non servono più o quando hanno problemi. Per questo si utilizzano software di orchestrazione e il mondo dell’open source ha prodotto differenti alternative. Kubernetes è una delle migliori e consente di gestire e coordinare i container. La tecnologia open source creata e coordinata da CoreOS è considerata una delle chiavi, assieme alla distribuzione minialista di Linux che viene utilizzata dall’azienda, per dominare la materia del cloud di oggi e di domani.
Arriva Red Hat
L’azienda fondata nel 1993 da Bob Young e Marc Ewing a Raleigh, in Carolina del Nord, è nata con l’ambizione di dimostrare che il codice aperto può produrre valore: non tanto nella sua vendita – che non è possibile – quanto nei servizi connessi. Scommessa che finora su larga scala è stata vinta, anche se sostanzialmente solo da Red Hat, e che però richiede costanti investimenti perché anche altre aziende sfruttano il valore del codice open, come ad esempio Ibm (che utilizza Linux come motore “gratuito” per i suoi server) oppure Google (che usa Linux nei server per ricerca e gli altri servizi ma anche come base per Android). Red Hat invece cerca un modo per controllare la possibilità di generare valore per le aziende fornendo quell’assistenza e quelle tecnologie che il sistema aziendalmente anarchico del software libero non consente.
L’acquisizione di CoreOs si inquadra in questa strategia e serve a dare armi più affilate a Red Hat e una integrazione tecnologica sempre più profonda e potente. Come la distribuzione Linux che Red Hat produce (con componenti sviluppate internamente, ad esempio quelle per desktop Fedora) e come Ansible, l’azienda che si occupa di automazione dei datacenter acquisita due anni fa per cento milioni di dollari, Red Hat mira alla realizzazione di un portafoglio di prodotti sempre più grande e integrato con le tecnologie di base delle quali vuole avere quanto più possibile il controllo per riuscire a portare al livello di maturazione nella direzione voluta dall’azienda quel che ritiene strategico per sé e per lo sviluppo in generale. In questo quadro l’acquisizione di CoreOS e delle sue tecnologie è strategica.