Seleziona una pagina

Cloud Containers: breve introduzione

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:

cloud containers adoption

Da VM a Cloud Containers: l’evoluzione

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:

cloud containers

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.

cloud containers

Cloud Containers: cosa sono e come sono fatti

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:

cloud containers

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:

  1. Isolamento: Ogni container funziona come un’entità separata, garantendo che non ci siano interferenze tra container diversi.
  2. Portabilità: Poiché un container include tutto ciò di cui ha bisogno per funzionare, può essere spostato da un ambiente all’altro con facilità.
  3. Leggerezza: I container condividono il kernel del sistema operativo sottostante, il che li rende più leggeri delle macchine virtuali tradizionali.

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: cos’è e cosa fa…

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:

  • Orchestrazione:Docker offre soluzioni per gestire e orchestrare multipli container come servizi interdipendenti.
  • Layering e caching: Docker permette di riutilizzare parti comuni tra diversi container, riducendo lo spazio richiesto e velocizzando il processo di costruzione.
  • Networking: Docker fornisce capacità di networking che permettono ai container di comunicare tra loro e con l’esterno.
  • Sicurezza: Docker fornisce funzionalità per isolare e per limitare le risorse dei container.

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...

Kubernetes: cos’è e cosa fa

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:

  • Orchestrazione di Container: Kubernetes è progettato per coordinare e gestire il ciclo di vita dei container o cluster di containers.
  • Bilanciamento del carico tra diversi container Se il traffico verso un container è alto, Kubernetes può distribuire il traffico su più container in modo che il servizio rimanga stabile.
  • Autoscaling: Kubernetes può automaticamente scalare il numero di container in base alle esigenze di traffico, utilizzando metriche come l’utilizzo della CPU o del traffico di rete.
  • Fail over: bilanciando il carico tra diversi container, il traffico viene sempre diretto su di un container operante.
  • Gestione delle risorse Kubernetes riserva la giusta quantità di CPU e RAM di cui ha bisogno ogni singolo container per lavorare al meglio.
  • Self-healing: Kubernetes riavvia i containers che si bloccano, sostituisce containers, termina i containers che non rispondono.
  • Estensibilità: Kubernetes è altamente modulare e progettato in modo che sia facilmente estendibile per soddisfare diverse esigenze con l’aggiunta di plugins

Cloud containers: ambiti di applicazione

Cloud, Hybrid e Multicloud.

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).

Cloud Native vs. legacy

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.

Applicazioni serverless

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.

Hai una mezz’ora?

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…