I cloud containers sono un mezzo moderno e veloce per sviluppare e distribuire applicazioni in qualsiasi ambiente, sia esso on premise che in cloud.
Come vedi, secondo l’ultimo rapporto Turbonomics, circa il 90% delle Aziende ripone attenzione nei containers, ed il 65% ritiene che questa tecnologia giocherà un ruolo strategico già nei prossimi 18 mesi:

Negli ultimi anni abbiamo assistito al progressivo affermarsi della virtualizzazione e del Cloud Computing.
Questo processo ha visto protagoniste le virtual machine, secondo il modello che conosciamo bene:

Questo modello, assoluto protagonista degli ultimi anni, pur essendo ancora oggi attuale ed affidabile, potrebbe avere oggi alcuni limiti e risultare troppo rigido in alcuni contesti.
Infatti, una virtual machine, per funzionare correttamente, ha bisogno di avere a bordo tutto il sistema operativo completo: ciò comporta che ci sia un ingente utilizzo di risorse, non sempre giustificato dall’effettivo utilizzo.
Utilizzare VM in cloud significa replicare lo stesso modello delle infrastrutture on prem basate su hypervisor, migrando l’attuale infrastruttura secondo un modello lift&shift, ne consegue che a volte le VM siano inutilmente voluminose: ciò comporta tempi lunghi e complessità nella gestione, spegnimento e riaccensione, e performance non sempre ottimali.
In questo modello inoltre, lo sviluppo delle applicazioni deve tenere conto dell’ambiente e del sistema operativo nel quale l’applicazione si troverà ad operare, ciò rende difficile ed onerosa la distribuzione dell’applicazione in ambienti diversi, necessari per scalare velocemente oppure per distribuirne il carico.
I containers nascono per superare questi problemi ed inefficienze, introducendo un ulteriore livello di astrazione e di virtualizzazione.
I containers ottimizzano l’uso delle risorse ed aumentano la velocità di esecuzione delle applicazioni, oltre a velocizzarne la creazione e la distribuzione.

Possiamo definire un container come un’unità di software standalone che include un’applicazione e tutto ciò che serve per farla funzionare: codice, runtime e librerie, senza bisogno di avere a bordo tutto il sistema operativo.
Ciò rende un container molto più leggero e semplice da gestire rispetto all’intera virtual machine.
L’ambiente nel quale i containers operano è quindi molto leggero, viene infatti condiviso il solo kernel di un unico sistema operativo:

Quando un’applicazione viene pacchettizzata in un container, avendo già a disposizione tutto ciò che gli serve per funzionare, può essere eseguita su ambienti diversi, sempre però con la certezza che verrà eseguita alla stessa maniera.
Un passaggio fondamentale è che l’applicazione può essere suddivisa e containerizzata in pezzi più piccoli e indipendenti (i cosiddetti microservizi), rendendo ancora più semplice la manutenzione, la velocità di esecuzione e la possibilità di scalare solo la componente necessaria, evitando di sprecare risorse.
Riepilogando, ecco le principali caratteristiche dei Containers:
Alcuni strumenti hanno reso ancora più facile la creazione, la distribuzione e la gestione dei cloud containers, sto parlando di Docker e di Kubernetes…
Docker è una piattaforma software che permette di creare, testare e pacchettizare in container un’applicazione e distribuirla con la massima rapidità.
Con Docker è possibile distribuire e ricalibrare le risorse per un’applicazione in qualsiasi ambiente, rendendo operativa la tua applicazione ovunque sia presente uno “strato” Docker:

Docker si interpone tra i container ed il resto dell’ambiente: sistema operativo, hypervisor ed hardware fisico.
Lo sviluppatore quindi non si cura di ciò che c’è “sotto”: grazie a Docker l’applicazione girerà senza problemi con sistemi operativi, hardware o storage diversi, che sia un singolo computer oppure un enorme e complesso public cloud.
Questo rende possibile anche distribuire un’applicazione in decine o centinaia di container diversi, per assicurare il fail over e la distribuzione del carico.
Ecco in sintesi cosa fa Docker:
In sostanza: tanti pacchettini leggeri, veloci, gestibili e duplicabili teoricamente all’infinito…tutto bellissimo ?
Certo, i vantaggi sono tangibili, ma la conseguenza è un aumento della complessità: nasce quindi l’esigenza di avere uno strumento per gestirla…
A questo pensa Kubernetes...

Prendo a prestito le definizione che da wikipedia (questo è il link):
Kubernetes (abbreviato K8s) è un sistema open-source di orchestrazione e gestione di container. Inizialmente sviluppato da Google, adesso è mantenuto da Cloud Native Computing Foundation. Funziona con molti sistemi di containerizzazione, compreso Docker.

Kubernetes (in greco significa pilota) è quindi un orchestratore per ambienti di container che si occupa di automatizzare diverse attività, cito le principali:
Sebbene, come detto prima, sia possibile abilitare container anche su di un PC oppure in infrastrutture on prem, è evidente che queste architetture nascono con l’intento di poter essere distribuite in ambienti scalabili e diffusi, in un parola: Cloud.
Potendo operare senza modifiche in ambienti cloud di diversi provider, i container sono perfetti per creare ambienti ibridi oppure multicloud, ed operare sia su cloud provider nazionali, oppure sui public cloud globali.
I principali cloud provider offrono servizi già pronti: FASTWEB ha da poco aggiornato la propria offerta Fastcloud includendo il supporto per container, AWS, all’interno della propria offerta, offre il servizio EKS (Elastic Kubernetes Service), in casa Microsoft è disponibile Azure Kubernetes Service (AKS).
AgID consiglia alle pubbliche amministrazione di ristrutturare i propri applicativi monolitici ed evolvere verso la logica dei microservizi per sfruttare tutti i vantaggi ciò di cui ho finora parlato.
Purtroppo un’applicazione legacy monolitica è quanto di più lontano dalla logica dei container, per questo tipo di applicazione oggi è ancora meglio pensare ad una logica “lift & shift” (solleva e sposta), e migrare tutta l’applicazione e relativo sistema operativo al cloud secondo la logica delle VM.
I container sono invece strettamente connessi alle applicazioni “cloud native”, cioè applicazioni moderne sviluppate in un’ottica di microservizi che possono sfruttare al massimo la potenza, l’agilità e la flessibilità dei container.
Come sai l’ecosistema IT richiede una sempre una sempre maggiore semplificazione ed automazione, e lo sviluppo delle tecnologia dei containers ha reso possibile un’ulteriore evoluzione: le applicazioni serverless, di cui ti parlo in questo articolo.
Grazie alla partnership con FASTWEB e con un ecosistema di aziende specializzate, possiamo assicurare il supporto alla creazione di applicazioni moderne e la distribuzione in container, siano essi in ambiente FastCloud che in ambiente AWS.
Se hai una mezz’ora possiamo parlarne…
[ninja_form id=2]