La diffusione dei container ha permesso di ripensare il modo in cui le persone lavorano allo sviluppo, all’implementazione e alla manutenzione del software. I container infatti offrono la possibilità di astrarre direttamente a livello applicativo anziché a livello di hardware, come avviene nel classico approccio a macchine virtuali.

Rispetto alle macchine virtuali basate su hypervisor, i container lavorano ad un livello più alto, condividendo il kernel del sistema operativo, permettendo di creare ambienti isolati in cui includere pacchetti e dipendenze relative ad una determinata applicazione. Questo approccio garantisce di mantenere la sicurezza e l’affidabilità dovuta all’isolamento delle risorse, e allo stesso tempo una flessibilità nettamente maggiore nella distribuzione dell’applicativo.

COSA SI INTENDE CON IL TERMINE CONTAINER?

Container image is a lightweight, stand-alone, executable package of a piece of software that includes everything needed to run it: code, runtime, system tools, system libraries, settings.

Containerized software will always run the same, regardless of the environment. Containers isolate software from its surroundings, for example differences between development and staging environments and help reduce conflicts between teams running different software on the same infrastructure.

I container sono così leggeri e flessibili che hanno dato vita ad una nuova modalità per lo sviluppo di nuove architetture applicative: si raggruppano i diversi servizi che costituiscono un’applicazione in container separati e si distribuiscono tali container attraverso un cluster di macchine fisiche o virtuali. Questo sistema ha fatto emergere la necessità di orchestrare i container con una modalità in grado di automatizzare la distribuzione, la gestione, il ridimensionamento, il networking e la disponibilità di applicazioni basate su container.

Per questo è nato Kubernetes, un progetto open source realizzato da Google che automatizza il processo di distribuzione e gestione di applicazioni multi-container su vasta scala. Kubernetes può funzionare con qualsiasi sistema di container conforme agli standard OCI (Open Container Initiative),  è open source e possiede poche restrizioni di utilizzo, dunque chiunque voglia ricorrere ai container lo può usare.

Cosa fa Kubernetes?

  1. Distribuisce applicazioni multi-container. Molte applicazioni non risiedono in un solo container, ma sono costituite da diversi container. Anche le applicazioni a microservizi sono costruiti in questo modo, tipicamente separando database e backend in molteplici componenti, utilizzando protocolli web e API per legare insieme i servizi. Anche se ci sono vantaggi a lungo termine nella creazione di app come microservizi, nel breve termine il lavoro da compiere è notevole.
  2. Riduce la quantità di lavoro umano. Kubernetes è in grado di mantenere sincronizzati e in esecuzioni i singoli elementi che compongono un’applicazione: è sufficiente stabilire come comporre un’app partendo da un set di container e Kubernetes si occuperà di tutto il resto.
  3. Scala le app in container. Le applicazioni web devono essere in grado di adattarsi alla variabilità delle richieste in ingresso per funzionare anche in condizioni di utilizzo intensivo, bilanciare il carico in entrata e utilizzare meglio le risorse fisiche. Kubernetes ha precise disposizioni per fare tutte queste cose in modo automatico e senza complicazioni.
  4. Distribuisce nuove versioni di app senza tempi di inattività. Kubernetes ha meccanismi tali da consentire aggiornamenti dei container senza interruzione dei servizi, compresi i rollback se qualcosa non va come previsto.
  5. Fornisce networking, individuazione dei servizi e archiviazione. Kubernetes consente ai container di parlare tra loro, gestisce l’individuazione dei servizi e fornisce uno spazio di archiviazione persistente al container

Kubernetes non è legato a uno specifico ambiente o tecnologia cloud. Può essere eseguito ovunque ci sia il supporto per i container, il che significa che cloud pubblici, cloud privati, hardware virtuale e fisico e un laptop per singolo sviluppatore sono tutti ambienti in cui è possibile utilizzare Kubernetes. I cluster di Kubernetes possono anche funzionare con qualsiasi combinazione di questi ambienti.

Quali sono i profitti a lungo termine nell’utilizzo di Kubernetes?

Ecco alcuni dei modi specifici in cui Kubernetes facilità l’esecuzione delle app.

  1. Kubernetes gestisce l’integrità delle app, la replica, il bilanciamento del carico e l’allocazione delle risorse hardware.
  2. Le app di Kubernetes possono essere eseguite in ambienti ibridi e multi-cloud. Uno degli obiettivi più ambiziosi e agognati del cloud computing è la possibilità di eseguire qualsiasi app in qualsiasi ambiente cloud o qualsiasi combinazione di cloud pubblici o privati: questo consente di sfruttare le funzionalità specifiche dei singoli ambienti cloud. Kubernetes fornisce un set di primitive, noto come federation, per mantenere sincronizzati più cluster tra più regioni e cloud. Ad esempio, una determinata distribuzione dell’applicazione può essere mantenuta coerente tra più cluster, e cluster diversi possono condividere l’individuazione del servizio in modo che sia possibile accedere a una risorsa back-end da qualsiasi cluster. La federation può anche essere utilizzata per creare distribuzioni Kubernetes ad alta disponibilità o fault-tolerant, indipendentemente dal fatto che ci si stia muovendo in più ambienti cloud.

Rivivi il Cloud OnAir di Google Cloud per scoprire di più su Kubernetes

Desideri approfondire le potenzialità di KUBERNETES e GOOGLE CLOUD PLATFORM?