Come rendere le applicazioni più performanti e scalabili? La logica Cloud Native non può fare a meno dei container e della loro orchestrazione: ecco come funziona e quali sono i vantaggi di Kubernetes.
Per capire il concetto di orchestrazione dei container, dobbiamo partire da una definizione di questi ultimi.
I container sono virtualizzazioni dell'ambiente di runtime basati su distribuzioni molto leggere di Linux. Sono diventati la più diffusa, sviluppata e affidabile tra le varie soluzioni di virtualizzazione a livello di sistema operativo.
Possiamo considerarli come macchine virtuali molto più leggere, svincolate dall'infrastruttura sottostante. Per le applicazioni all'interno del container sono disponibili tutte le risorse della macchina; il sistema operativo invece fa vedere loro solo le risorse allocate ed eventualmente gli altri applicativi eseguiti in altri container. Con questo "inganno" è possibile creare facilmente più contenitori che eseguano uno o più programmi, ciascuno dei quali ha a disposizione un sottoinsieme delle risorse complessive del computer. Le applicazioni possono essere eseguite in maniera separata o contemporanea e interagire tra loro oppure no.
Siccome ogni container contiene un singolo software , o più spesso un microservizio, è facile che in breve tempo ci si trovi ad operare centinaia di container, magari anche su cloud diversi.
Questo rende impossibile gestirli manualmente e richiede forme di automazione per tutto il ciclo di vita dei container. La soluzione è un processo chiamato orchestrazione, che permette di semplificare le operazioni, aumentare la resilienza della soluzione, migliorare la sicurezza complessiva e quindi raggiungere gli obiettivi di business.
LEGGI ANCHE: Containerizzazione delle applicazioni: cosa devi sapere
La virtualizzazione non è una conquista recente dell'informatica. Anzi, già i mainframe negli anni Sessanta utilizzavano la virtualizzazione come metodo per dividere dal punto di vista logico le risorse di sistema tra applicazioni differenti. Uno stesso mainframe molto potente poteva eseguire istanze multiple di uno o più sistemi operativi per far girare applicazioni diverse come se stessero funzionando su computer fisicamente diversi, consolidando così i costi e alcune delle complessità gestionali di più sistemi. Dentro un'unica macchina host funzionavano più pseudo-macchine guest.
Le più moderne forme di virtualizzazione software e hardware possono supportare un ambiente virtuale completo. Questo approccio è molto utile per consolidare server più piccoli in un unico hardware di classe superiore, riducendo costi e complessità.
Le macchine virtuali facilitano anche la gestione, la sicurezza e la replicabilità delle installazioni. Inoltre riducono notevolmente la difficoltà di trasferimento di un’installazione da un sito all'altro o in scenari di disaster recovery. Tuttavia, anche le macchine virtuali hanno numerosi limiti sia di complessità sia di consumi energetici e di tipi di carico di lavoro possibili. E questi limiti vengono amplificati nel cloud, soprattutto in quello pubblico.
Per questo sono nate soluzioni che isolano ogni singolo software in un container. Il container abilita la costruzione di cluster caratterizzati da facilità di deployment, sicurezza, affidabilità, scalabilità e automazione.
I container accelerano lo sviluppo del software perché permettono di scrivere codice in maniera coerente: dall'ambiente locale al cloud pubblico, i programmatori lavorano in maniera continua e senza differenze. Infine, essendo leggeri e facilmente spegnibili, i container permettono di ottimizzare l'utilizzo delle risorse.
È chiaro che la gestione di un ambiente di questo tipo è complessa e lo diventa sempre di più all'aumentare del numero dei container e delle applicazioni in esecuzione. C'è però anche un'altra importante distinzione da fare. A differenza di un ambiente tradizionale, nel quale la stabilità dei programmi e delle installazioni si misura nella durata complessiva del loro uptime, l'utilità maggiore dei container sta nella gestione dinamica di carichi di lavoro che cambiano rapidamente. I container sono tanto più utili quanto più velocemente (e automaticamente) possono essere istanziati e poi terminati.
Il processo di orchestrazione si avvale di strumenti software per automatizzare e gestire la configurazione, il coordinamento e il ciclo di vita dei container. Lo scopo dell'orchestrazione è quello di poter gestire un’architettura service-oriented o a microservizi che consenta di coniugare gli obiettivi di business con la tecnologia a disposizione: applicazioni, data e infrastruttura.
In qualsiasi ambiente vengano utilizzati i container, è sempre applicabile un metodo di orchestrazione che permetta di semplificare sia il lavoro di distribuzione dei software che la gestione di tutti gli aspetti del servizio, incluso lo storage, la rete e la sicurezza.
Se guardiamo da una prospettiva diversa, l'orchestrazione gestisce il ciclo di vita dei container. Questo ha importanti implicazioni per i team di lavoro che utilizzano un approccio DevOps e flussi di lavoro CI/CD. L'orchestrazione e i container, insomma, sono due degli elementi più importanti per la creazione delle applicazioni di tipo Cloud Native.
Esistono vari strumenti per eseguire l'orchestrazione. Il più famoso e standard de facto è sicuramente Kubernetes (o K8s), ma ci sono anche altri due progetti che possiamo citare: Docker Swarm (di proprietà di Docker, la piattaforma per la costruzione dei container) e Apache Mesos.
Tutti e tre hanno la capacità di gestire:
Inoltre, possono gestire la configurazione dei software contenuti nei singoli container e la gestione (e protezione) delle interazioni tra container.
Kubernetes ha una serie di funzionalità in più che lo rendono particolarmente adatto alla gestione dell'hosting di software cloud nativo. In particolare, è molto importante la scalabilità anche orizzontale (Horizontal Pod Autoscaler) tra cluster di host su cloud pubblico, privato o ibrido perché consente la portabilità dei carichi di lavoro e la semplificazione del loro bilanciamento.
Creato da Google come progetto open source per l'orchestrazione dei container interna ai Googleplex, dal 2015 Kubernetes è stato ceduto alla Cloud Native Computing Foundation, nata all'interno della Linux Foundation. Questa scelta strategica colloca Kubernetes in un ambiente di sviluppo vitale e reattivo, ma soprattutto capace di indirizzare la crescita delle tecnologie Cloud Native e definire gli standard tecnologici aperti dei prossimi anni.
Kubernetes ottimizza l’uso delle risorse IT con conseguenti vantaggi dal punto di vista di tempi e costi. Sviluppo, rilascio e distribuzione diventano più semplici e rapidi grazie a questo orchestratore, mentre l’allocazione dinamica delle risorse permette di ridurre gli sprechi e i costi. Lo scale-down automatico infatti evita l’utilizzo di risorse non necessarie. Non solo: in caso di picchi di traffico l’autoscaling aumenta la disponibilità e migliora quindi il servizio.
Inoltre Kubernetes si rivela uno strumento indispensabile per trarre il massimo beneficio dalle soluzioni multi o hybrid cloud poiché garantisce il funzionamento delle applicazioni in qualsiasi ambiente pubblico e privato, senza perdite funzionali o di performance.
Da ultimo, le infrastrutture containerizzate e gestite con Kubernetes offrono anche un tasso di affidabilità molto elevato.
PER APPROFONDIRE: Tutti i vantaggi di Kubernetes
I container sono una forma di virtualizzazione che permette di costruire, impacchettare e fare deployment delle applicazioni. La presenza di tutto il codice dell'applicazione e di tutto quello che serve a farla funzionare all’interno del container permette di spostare i container in maniera semplice tra server di tipo diverso.
La complessità derivante dalla suddivisione in container può essere gestita tramite processi di orchestrazione: il tool più adottato a tal scopo è Kubernetes, che garantisce numerosi vantaggi su sistemi e ambienti molto differenti.
La containerizzazione e l’orchestrazione sono due soluzioni da valutare se vuoi rendere le tue applicazioni scalabili, affidabili e performanti, in piena logica Cloud Native.