Kubernetes vs. Docker: capire i container e la loro orchestrazione
Se avete tenuto il passo con le ultime tendenze nello sviluppo del software, ci sono due termini che avete sicuramente imparato a conoscere: Docker e Kubernetes, che sono essenzialmente sinonimo di container e orchestrazione.
I container Docker hanno contribuito a semplificare il processo di spostamento delle applicazioni attraverso lo sviluppo, i test e la produzione, mentre sia Docker, sia Kubernetes hanno contribuito a reinventare il modo in cui le applicazioni vengono costruite e distribuite, ovvero come raccolte di microservizi anziché come qualcosa di monolitico.
Perché Docker e Kubernetes sono importanti, come stanno cambiando lo sviluppo del software e quale ruolo svolgono in tale processo? Continuate e leggere per scoprirlo.
Docker e container
I container, supportati in Linux, Windows e altri moderni sistemi operativi, consentono al software di funzionare in mini-ambienti autonomi isolati dal resto del sistema. I container sono stati paragonati alle macchine virtuali, ma non sono macchine virtuali: sono molto più snelli, più veloci da avviare e arrestare e molto più flessibili e portatili. Poiché i container possono essere scalati in pochi secondi, semplificano l’esecuzione di app in ambienti elastici come il cloud.
Linux e altri sistemi operativi supportano app in container ormai da molti anni, ma lavorare con i container non è stato esattamente facile. Docker, nelle sue incarnazioni sia open source che commerciali, è un software che rende i container un prodotto facile da usare per gli sviluppatori. Docker fornisce infatti un set comune di strumenti per i container, in modo da poter impacchettare le app in immagini container che possono essere facilmente distribuite e riutilizzate nella propria organizzazione o altrove.
In breve, Docker semplifica la creazione di immagini container, la loro condivisione, il loro spostamento e la loro distribuzione su host compatibili con Docker.
Quando bisogna usare Docker e container?
Docker e container sono adatti per carichi di lavoro che devono avere una o più delle seguenti caratteristiche:
- Scalabilità elastica. Non sapete quante istanze di un’app dovrete eseguire per soddisfare la domanda. Un’app o un servizio containerizzati possono essere ridimensionati per soddisfare la domanda distribuendo un numero inferiore o maggiore di istanze dei suoi container.
- Isolamento. Non volete che l’app interferisca con altre app. Forse eseguirete più versioni affiancate per soddisfare diverse revisioni di un’API. O forse volete mantenere pulito il sistema sottostante (sempre una buona idea).
- Portabilità. È necessario eseguire questa app in diversi ambienti e è necessario che ogni configurazione sia riproducibile. I container consentono di impacchettare l’intero ambiente di runtime dell’applicazione, semplificando l’implementazione dell’app ovunque si trovi un host compatibile con Docker: un desktop per sviluppatori, una macchina di test QA o un cloud remoto.
Kubernetes e orchestrazione container
I container sono progettati principalmente per isolare processi o applicazioni l’uno dall’altro e dal sistema sottostante. La creazione e la distribuzione di singoli container è semplice. Ma cosa succede se si desidera assemblare più container, ad esempio un database, un front-end Web e un back-end computazionale, in una grande applicazione che possa essere gestita come un’unità, senza doversi preoccupare di distribuire, connettere, gestire, e ridimensionare ciascuno di quei container separatamente? È necessario un modo per orchestrare tutte le parti in un insieme funzionale.
Questo è il lavoro che svolge Kubernetes. Se i container sono dei passeggeri di una crociera, Kubernetes è il direttore della crociera.
Kubernetes, basato su progetti creati da Google, offre un modo per automatizzare la distribuzione e la gestione di applicazioni multi-container su più host, senza dover gestire direttamente ciascun container. Lo sviluppatore descrive il layout dell’applicazione su più container, inclusi dettagli come il modo in cui ciascun container utilizza la rete e l’archiviazione. Kubernetes gestisce il resto in fase di runtime. Si occupa anche della gestione di dettagli più complessi come i segreti e le configurazioni di un’app.
Kubernetes richiede una certa esperienza per essere usato bene, anche se oggi è molto più semplice di quanto non fosse in passato. Alcuni dei progressi nella facilità d’uso sono dovuti a “ricette” prontamente disponibili per applicazioni comuni (Helm), altri alla grande quantità di distribuzioni di Kubernetes prodotte da brand molto conosciuti (Red Hat, Canonical, Docker), che lavorano a stretto contatto con i più diffusi stack di applicazioni e framework di sviluppo.
Quando bisogna usare Kubernetes e l’orchestrazione dei container?
Le semplici app in container che servono un numero limitato di utenti in genere non richiedono l’orchestrazione e tanto meno Kubernetes. Ma se un’app ha più di un banale livello di funzionalità o è rivolta a un certo numero di utenti, le cose cambiano. Ecco alcune regole pratiche per determinare quando si deve ricorrere l’orchestrazione.
- Le vostre app sono complesse. Qualsiasi applicazione che coinvolga più di due container probabilmente si adatta all’orchestrazione. Detto questo, le app che servono solo un piccolo numero di utenti potrebbero essere orchestrate attraverso una soluzione più minimale come la modalità swarm di Docker piuttosto che Kubernetes.
- Le vostre app hanno elevate esigenze di ridimensionamento e resilienza. Kubernetes e altri orchestratori consentono di bilanciare i carichi per soddisfare la domanda, descrivendo lo stato desiderato del sistema anziché codificare manualmente le reazioni alle mutevoli condizioni.
- Volete sfruttare al meglio le moderne tecniche CI/CD. I sistemi di orchestrazione supportano modelli di distribuzione per app che utilizzano la distribuzione blu/verde o aggiornamenti continui.
Potrebbe arrivare un giorno in cui Docker e Kubernetes saranno eclissati da astrazioni ancora più semplici e immediate e lasceranno il posto a modi più eleganti per creare e gestire container. Per ora, tuttavia, Docker e Kubernetes sono strumenti che bisonga necessariamente conoscere e comprendere.