Docker e Kubernetes: passato, presente e futuro dei container

I container sono presenti nel panorama informatico delle aziende da parecchi anni e sono diventati, in molti casi, una tecnologia essenziale. La loro popolarità deriva dalla loro facilità di installazione, sicurezza e scalabilità, consentendo alle aziende di gestire i carichi di lavoro in modo altamente efficiente. Aiutano a semplificare, accelerare e orchestrare lo sviluppo e la distribuzione delle applicazioni.

I container sono inoltre un elemento chiave per favorire l’implementazione del framework DevOps all’interno dell’azienda: aiutano infatti a ridurre gli attriti tra sviluppatori e i team di operazioni IT, separando chiaramente le diverse aree di responsabilità. Gli sviluppatori possono in questo modo concentrarsi su applicazioni e software, mentre il team “Ops” gestisce l’infrastruttura.

Possiamo considerare i container come un’alternativa per distribuire ed eseguire le applicazioni, concettualmente simili a una grande cartella .zip che contiene tutti gli elementi necessari per l’installazione ed esecuzione dell’applicazione. Ad esempio, sullo smartphone, le applicazioni possono essere considerate come pacchetti di software indipendenti che contengono tutti gli elementi necessari per essere eseguiti su qualsiasi ambiente. In altre parole, i container sono unità software autonome che contengono tutto ciò di cui un’applicazione ha bisogno per essere eseguita, inclusi il codice, le librerie, le variabili di ambiente e le dipendenze. Possono quindi essere avviati e interrotti in modo rapido, affidabile e flessibile, gestendo anche le risorse in modo migliore e ottimizzando le prestazioni.

Ma che cosa riserva il futuro per i container? Che cosa sono e come si collocano Docker e Kubernetes nell’evoluzione dei container? 

“Container are chroot with a marketing budget
(fonte)

Che cos’è Docker

Nonostante il concetto di container nasceva già nel 1979 con lo sviluppo di Chroot, fu Docker a renderlo popolare con il suo debutto nel 2013. Docker si è presentato con un’interfaccia utente facile da usare e la capacità di “impacchettare”, distribuire ed eseguire i container: permetteva a  diverse applicazioni con requisiti di sistema operativo diversi di essere eseguite sullo stesso kernel tramite i container. Dopo un mese dal primo rilascio, Docker divenne il parco giochi di 10mila sviluppatori. Quando nel 2014, fu rilasciato Docker 1.0, il software era già stato scaricato 2.75 milioni di volte, che divennero 100 milioni un anno dopo. 

Docker crea i container: come accennato in precedenza , permette infatti di “impacchettare” un’applicazione insieme a tutte le sue dipendenze in un contenitore virtuale, che può essere eseguito su qualsiasi sistema operativo compatibile. Questo rende le applicazioni altamente portatili e riduce le differenze tra ambienti di sviluppo, test e produzione.

Per la seconda svolta nella tecnologia di containerizzazione dobbiamo però aspettare il 2017 quando aziende del calibro di AWS, Pivotal e persino Docker stesso cambiarono marcia per supportare Kubernetes, rendendolo di fatto la tecnologia standard per l’orchestrazione dei container.

Fun Fact: sapevi che la balena del logo di Docker si chiama Moby Dock?

docker
Docker e Kubernetes: passato, presente e futuro dei container

Che cos’è Kubernetes

Facciamo un passo indietro in un mondo senza container. In quel contesto, un’applicazione veniva installata su una macchina attraverso un software, il quale richiedeva il download di file, librerie e dipendenze aggiuntive. Questo approccio presentava problemi evidenti, come il tempo richiesto per l’installazione, che dipendeva dalla dimensione del software e dal numero di macchine coinvolte. Inoltre, c’era la sfida della compatibilità del software con diverse macchine. Anche se era possibile ridurre l’effort grazie a script di automazione o grazie a strumenti come Ansible, i problemi di base rimanevano irrisolti.

Poi arrivarono i container e dopo poco gli strumenti di orchestrazione, rivoluzionando la situazione: permettevano, infatti, la gestione, la scalabilità e la manutenzione dei container stessi. Riprendendo l’analogia del container come un grosso file .zip, lo strumento di orchestrazione si occupa di prendere il file e di eseguirlo su una serie di macchine per renderlo funzionale, scalabile e accessibile. Proprio come un direttore d’orchestra, che conosce le sequenze musicali dei vari strumenti e le gestisce nella sequenza appropriata, per creare una sinfonia armoniosa. 

Kubernetes (anche conosciuto come K8s) è lo standard de facto per l’orchestrazione dei container. È una piattaforma molto complessa, con numerose responsabilità e altrettanti vantaggi. Vediamone qualcuno: 

  • Semplifica il deployment delle applicazioni: grazie all’automazione dell’orchestrazione, gli sviluppatori possono concentrarsi solo sul far funzionare l’applicazione all’interno del container.
  • Self healing e replicazione: k8s permette di specificare quante repliche dei pod devono essere configurate nel  cluster. (un pod è il contenitore del container: tipicamente ogni container ha il suo pod, ma è possibile che un pod ospiti più container). Se un pod smette di funzionare, k8s lo sostituisce con una sua replica, garantendo la continuità operativa.
  • Scalabilità automatica: Kubernetes supporta  il bilanciamento dei carichi tra differenti istanze dell’applicazione containerizzata. È possibile definire le istanze iniziali e le regole di scalabilità, cioè i criteri secondo i quali  devono essere forniti più o meno pod o nodi (un nodo è il componente hardware più piccolo di Kubernetes). Avere più pod aiuta a distribuire equamente le richieste tra i pod disponibili, consentendo un bilanciamento del carico efficiente.
  • Utilizzo ottimale delle risorse hardware: è possibile definire quante macchine virtuali supportano il cluster kubernetes (i nodi mettono insieme le proprie risorse per formare una macchina più potente: il cluster). Kubernetes si occupa quindi di distribuire automaticamente il carico di lavoro tra i nodi, garantendo un utilizzo efficiente delle risorse.

Focus: stato della sicurezza dei container

Nonostante i numerosi vantaggi offerti dai container e da Kubernetes, la prima preoccupazione della comunità IT sembra essere la sicurezza: se prima dell’adozione di Kubernetes si esitava a causa della condivisione del kernel del sistema operativo e dalla mancanza di persistenza dei dati, i report più recenti mostrano un panorama quantomeno preoccupante.

  • Il “2022 Cloud-Native Security and Usage Report” di Sysdig ha rilevato che il 75% dei partecipanti stava eseguendo container con vulnerabilità elevate o critiche, mentre il 76% aveva container in esecuzione con privilegi di root, mettendo così  in pericolo la sicurezza dell’ecosistema IT. (fonte)
  • Il “2022 State of Kubernetes Security Report” di Red Hat mostra che il 93% degli intervistati ha subito almeno un incidente di sicurezza legato a Kubernetes negli ultimi 12 mesi e che il 31% di questi ha subito una perdita in termini di clienti o fatturato a seguito di tali incidenti. (fonte)
  • Nel rapporto  “The State of Kubernetes 2022″ di VMWare, il 36% dei partecipanti ha affermato che la sicurezza, la protezione e la crittografia dei dati sono gli strumenti e le capacità più importanti per l’utilizzo di Kubernetes in produzione. Quasi tutti gli intervistati (97%) hanno mostrato preoccupazioni riguardo alla sicurezza di Kubernetes, in particolare per le implementazioni multi-cluster e multi-cloud. (fonte)

Container: che cosa aspettarsi dal futuro

Il futuro dell’IT è volto verso una maggiore interazione, migliore integrazione, analisi predittive, automazione, decisioni prese grazie al machine learning, realtà virtuale e aumentata e altre tecnologie all’avanguardia. Tali applicazioni potranno esprimere appieno il loro potenziale solo se saranno ospitate in un ambiente in grado di fornire flessibilità e agilità. Le applicazioni cloud native e basate su container, orchestrate con Kubernetes, possono diventare i mattoncini fondamentali dell’infrastruttura IT moderna.

I container offrono numerosi vantaggi alle applicazioni distribuite, specialmente ai microservizi, permettendo a ogni servizio di essere contenuto e scalato in modo indipendente dagli altri attraverso strumenti come Kubernetes. In questo contesto, diversi cloud provider offrono servizi di container gestiti, spesso basati su Kubernetes, come ad esempio OpenShift, per semplificare, scalare ed agevolare l’esecuzione dei container per gli amministratori.

Molti container sono progettati già oggi per funzionare nativamente nel cloud, in modo da sfruttare al massimo le loro caratteristiche native, come l’auto-scaling e la distribuzione geografica. I fornitori di servizi cloud saranno quindi sempre più orientati a offrire soluzioni ottimizzate per l’esecuzione dei container, con funzionalità avanzate di orchestrazione, gestione semplificata delle risorse e integrazione con strumenti di monitoraggio e logging.

Tuttavia, a causa delle crescenti preoccupazioni riguardo alla sicurezza e alla crescente complessità della gestione dei container, così come di strumenti complessi come Kubernetes e OpenShift, molte aziende stanno optando per i servizi Kubernetes as a Service. Questi servizi, oltre a fornire una gestione avanzata della sicurezza, offrono anche strumenti di monitoraggio e allerta, con cui è possibile avere una visione approfondita delle prestazioni dei container e di Kubernetes, rilevando tempestivamente eventuali problemi o anomalie.

La gestione efficiente dei container e di Kubernetes richiede una pianificazione oculata e competenze specializzate. L’adozione di servizi gestiti in cloud può notevolmente semplificare queste sfide, consentendo di concentrarsi sullo sviluppo delle applicazioni e sfruttare al meglio il potenziale di Kubernetes. Inoltre, tali servizi offrono un supporto costante da parte di esperti del settore, che aiuteranno a gestire la sicurezza dei container e garantire un’operatività senza interruzioni dell’infrastruttura basata su Kubernetes.

> Scopri il nostro servizio di creazione e orchestrazione container 

La tecnologia container e l’orchestrazione con Kubernetes hanno rivoluzionato il modo in cui le applicazioni vengono sviluppate, distribuite e gestite nell’IT moderno. La loro agilità, portabilità e scalabilità hanno consentito alle aziende di affrontare le sfide dell’innovazione tecnologica e di adattarsi rapidamente alle mutevoli esigenze del mercato. Tuttavia, come evidenziato dai recenti rapporti sulla sicurezza dei container, è fondamentale affrontare le minacce in merito alla protezione dei dati e alla gestione dei rischi. La scelta di affidarsi a servizi gestiti di Kubernetes può rappresentare una soluzione strategica per affrontare tali sfide e concentrarsi sulle attività fondamentali di sviluppo e crescita aziendale, sfruttando al meglio il potenziale dei container nel panorama dell’IT di oggi.