Forse non si tratta di una sorpresa in senso assoluto, ma vedere le competenze relative al cloud e ai container al primissimo posto del The 2021 Open Source Jobs Report di Linux Foundation fa un certo effetto. La container orchestration costituisce per molti aspetti il fulcro del discorso ed ha contribuito da protagonista assoluta ad un’impresa epocale: scalzare Linux dalla vetta delle competenze più richieste nel mondo open source.

Nel periodo tra il 2019 e il 2021 si è assistito ad un incremento della domanda di certificazioni per Kubernetes del 455%, con il 92% dei manager coinvolti che ha affermato di riscontrare un’enorme fatica nel reclutare talenti con una formazione specifica nell’open source, soprattutto per quanto concerne le competenze nell’ambito dello sviluppo cloud native, in cui i container costituiscono una tecnologia leader negli ambienti runtime in grado di supportare il ciclo di sviluppo delle applicazioni.

Per dirla in maniera più gergale, chi possiede competenze certificate in fatto di container orchestration (container, docker, kubernetes, ecc.) non dovrebbe avere grossi problemi a trovare un lavoro in grado di offrire obiettivi ambiziosi, stimoli importanti in termini di crescita professionale e un soddisfacente ritorno dal punto di vista economico.

La fortuna delle professioni legate allo sviluppo di applicazioni cloud native è stata agevolata dalla pandemia Covid-19, con il sensibile aumento del lavoro in remoto, che vede nel SaaS (Software as a Service) una soluzione più flessibile rispetto al tradizionale software legacy. A ciò si è aggiunto il generale incremento delle applicazioni cloud native, sostenuto dalla crescente trasformazione digitale delle aziende. Un fenomeno reso ancor più evidente dalle dinamiche di rilancio del cossidetto “new normal” che dovrebbe caratterizzare la ripresa dopo i devastanti effetti della pandemia.

L’era cloud native, che ha visto il progressivo passaggio dall’architettura monolitica verso le architetture orientate ai microservizi e ai container, non è mai stata al tempo stesso così semplice e così complessa da gestire, data la quantità e la varietà tecnologica da prendere in considerazione sia per i project manager che per i responsabili dell’IT governance aziendale.

Vediamo pertanto in cosa consiste la container orchestration e quali sono le principali piattaforme open source utilizzate per gestire i container nei progetti di sviluppo che li coinvolgono ormai come un vero e proprio standard di riferimento.

Cos’è la container orchestration

La container orchestration è un processo finalizzato ad automatizzare la gestione e la pianificazione operativa dei container, utilizzati per eseguire i microservizi in diversi ambienti e modalità di sviluppo.

La natura intrinseca dei microservizi prevede il disaccoppiamento dei vari moduli che compongono un’applicazioni. Il container virtualizza tutte le condizioni necessarie per rendere disponibile un ambiente di sviluppo per tutte le fasi di sviluppo, perfettamente compatibile con le logiche e le metodologie Agile e DevOps. Tale disaccoppiamento fa si che i container abbiano un’elevata autonomia tecnologica ed una natura estremamente portabile, con gli host che possono essere forniti da provider differenti.

Ogni modulo può ad esempio essere sviluppato con un differente linguaggio di programmazione e tale caratteristica viene esaltata dal fatto di eseguirlo in un container. I progetti software cloud native di una certa importanza possono coinvolgere diverse centinaia di container ed eseguirli in ambienti molto differenti, sfruttando i servizi offerti da differenti CSP (Cloud Service Provider).

Se lo sviluppo vede nell’architettura containerizzata la creazione di notevoli vantaggi nella scalabilità e nella flessibilità nell’implementazione, non si può negare una evidente frammentazione quando si tratta di dover rimettere insieme i vari componenti per eseguire l’applicazione nel suo insieme. Per fare fronte a questa complessità sono nate le tecnologie di orchestrazione dei container.

A cosa serve

La container orchestration ha l’obiettivo di migliorare la visibilità dei container in esecuzione sui differenti cloud attraverso l’automatizzazione delle procedure relative alla gestione e all’esecuzione, indispensabile per quelle aziende che hanno un catalogo cloud native piuttosto ampio, con migliaia di container attivi.

La container orchestration consente ai team di sviluppo DevOps di effettuare più facilmente i cicli CI/CD (Continous Integration / Continous Deployment) su cui si basa il ciclo di vita delle applicazioni cloud native, ma la lista delle funzioni che possono essere enormemente semplificate grazie all’automatizzazione comprende numerose voci, tra cui:

  • Configurazione e pianificazione dell’esecuzione dei container;
  • Assegnazione delle risorse richieste dai vari carichi di lavoro, per sfruttare appieno la scalabilità dei servizi in cloud, ivi compreso il bilanciamento dei carichi stessi e il conseguente routing del traffico;
  • Provisioning e deploy dei container;
  • Monitoraggio continuo dell’integrità dei container ed eventuale ripristino delle istanze compromesse, oltre all’eliminazione dei container di fatto inattivi, che non vengono utilizzati da molto tempo e consumerebbero altrimenti risorse destinabili altrove.

Come vedremo, esistono numerose piattaforme di container orchestration, che si basano prevalentemente su Kubernetes, tecnologia open source sviluppata originariamente da Google nel 2015, che ne ha successivamente ceduto gli effetti e la gestione in capo alla Cloud Native Computing Foundation, che sta continuando a coordinare il suo sviluppo grazie al supporto economico e tecnologico di centinaia di membri, tra cui figurano praticamente tutti i principali CSP presenti sul mercato.

Come funziona la container orchestration

Una piattaforma di container orchestration come Kubernetes è sostanzialmente basata sul funzionamento di un cluster, che equivale ad un gruppo di nodi dove vengono eseguite le applicazioni containerizzate. Oltre ai nodi, il cluster contiene anche un piano di controllo, che consiste in una raccolta di processi utili a monitorare e controllare i nodi stessi, consentendo a chi amministra il sistema di avere una visibilità in tempo reale per quanto concerne tutti i container attivi.

Gli altri componenti fondamentali di un sistema di container orchestration come Kubernetes sono i pod, le unità più elementari, formate da gruppi di uno o più container distribuiti su un singolo nodo, e il volume, che contiene i dati cui i container possono accedere, pur rimanendo del tutto separato ed indipendente in termini di ciclo di vita;

Per quanto riguarda il funzionamento dell’orchestration, i nodi ricevono le istruzioni grazie ad un file di configurazione manifest, generalmente un JSON o un YAML, che contiene le informazioni relative al tipo di applicazione e al numero di repliche da eseguire. A livello cluster invece i file di configurazione indicano dove trovare le immagini dei singoli container e tutte le informazioni relative alla rete e ai registri di sistema.

Quando il gestore del progetto programma il deploy di un container su un cluster, tendenzialmente sceglie in base ai requisiti del suo carico di lavoro, individuando, tra quelli disponibili, l’host più indicato a soddisfare tali esigenze. La piattaforma di orchestrazione consente di archiviare ed automatizzare tutte le disposizioni utili a governare l’intero ciclo di vita del container grazie ai file di configurazione.

Tale logica consente di gestire i container a prescindere dalla loro effettiva posizione, in quanto l’orchestratore è in grado di interfacciarsi con i vari CSP dove vengono eseguiti. Ciò garantisce la totale portabilità e la possibilità di riutilizzare i container nel contesto di più applicazioni, per sfruttare in maniera efficiente una delle principali caratteristiche dell’architettura a microservizi.

È inoltre opportuno sottolineare come la combinazione dell’automatizzazione dei processi di deploy e la loro portabilità dei container consente di sviluppare orchestratori dotati di funzionalità self service, tipiche degli strumenti di gestione dei servizi in cloud.

Gli strumenti e i tool utilizzati

Kubernetes costituisce, come già citato, la tecnologia di riferimento per quanto riguarda la container orchestration. Tuttavia, nella sua distribuzione open source nativa, risulta piuttosto ostico da gestire, in quanto manca delle interfacce utili a gestire in maniera diretta ed intuitiva i registri, le reti, la telemetria, la sicurezza, l’automazione e buona parte dei servizi.

Per colmare il gap costitutivo in termini di interfaccia e rendere Kubernetes più “friendly” per i sistemi di gestione IT a livello enterprise, i principali vendor hanno sviluppato soluzioni commerciali personalizzate, soprattutto orientate all’integrazione con gli altri servizi per gli ISV presenti sui loro ecosistemi cloud.

Tra le più celebri soluzioni di orchestrazione dei container basate su Kubernetes ritroviamo Red Hat Openshift, VMware Tanzu, Azure Kubernetes Service, Azure Service Fabric, Amazon Elastic Container Service, Google Kubernetes Engine, IBM Cloud Kubernetes Service, Oracle Container Engine for Kubernetes, Apache Mesos, Mirantis Kubernetes Engine e molti altri.

La loro scelta dipende da molti fattori, che spazia dalle funzionalità specifiche, che possono rispondere in maniera più o meno utile alle esigenze aziendali, piuttosto che alla valutazione dei costi di implementazione delle varie soluzioni, in funzione dei carichi di lavoro previsti. A questi criteri generali di valutazione si aggiungono tutti gli aspetti relativi alle integrazioni e alla sicurezza.

Docker e Kubernetes

I due nomi più ricorrenti quando si parla di tecnologie legate ai container sono con ogni probabilità Docker e Kubernetes. Docker è una piattaforma open source per il deploy dei container, che dispone di strumenti di orchestrazione (Docker Swarm), anche se nasce soprattutto per crearli e consentirne il regolare utilizzo.

Uno strumento specifico per la container orchestration è Kubernetes, piattaforma open source di cui abbiamo anticipato la genesi nel corso dei precedenti paragrafi. Spesso citati come se costituissero un’alternativa e pertanto confusi, Docker e Kubernetes sono invece caratterizzati da una differenza fondamentale: Kubernetes è progettato per l’esecuzione di un container in un cluster, mentre Docker viene eseguito in un singolo nodo. Da questa semplice osservazione risulta altrettanto semplice dedurre come Kubernetes, in fatto di orchestrazione, costituisca una soluzione decisamente più estesa e pertanto complementare con le funzionalità offerte dalla tecnologia Docker.

Tale evidenza appare rilevante soprattutto se ci riferiamo agli ambiti applicativi più ricorrenti, come l’implementazione di un progetto di sviluppo basato su una metodologia DevOps, che ha l’obiettivo di ottenere un’architettura di microservizi capace di consentire la distribuzione rapida e l’orchestrazione scalabile di applicazioni cloud native.

L’interoperabilità di Docker e Kubernetes in produzione consente infatti di migliorare la solidità complessiva dell’infrastruttura IT sufficientemente robusta da consentire una elevata disponibilità delle applicazioni supportate, anche qualora si verificasse il down di alcuni nodi. Al tempo stesso la combinazione di queste due tecnologie open source consente di sfruttare facilmente la scalabilità delle applicazioni cloud native in termini di disponibilità di risorse funzionali ai loro carichi di lavoro. Se i carichi aumentano, è possibile eseguire più container e aggiungere nodi al cluster Kubernetes che li gestisce. In caso contrario, le risorse vengono scalate in senso inverso.

Ai fini di orientarsi al meglio nell’ampia varietà delle soluzioni e delle tecnologie relative ai container e alla logo gestione, è decisamente auspicabile rivolgersi a consulenti dotati di un dimostrabile know how nell’integrazione di sistemi di container orchestration, con casi studio relativi a progetti completi e strutturati con successo lungo l’intero ciclo di vita delle applicazioni sviluppate.