Kubernetes vs Docker: comprendere i contenitori e l'orchestrazione

Se sei al passo con le ultime tendenze nello sviluppo del software, ci sono due termini che hai indubbiamente incontrato più e più volte: Docker e Kubernetes, che sono essenzialmente scorciatoie per  contenitori  e  orchestrazione .

I container Docker hanno contribuito a semplificare il processo di spostamento delle applicazioni attraverso lo sviluppo e il test e nella produzione, mentre Docker e Kubernetes hanno contribuito a reinventare il modo in cui le applicazioni vengono create e distribuite, come raccolte di microservizi anziché stack monolitici.

Perché Docker e Kubernetes sono importanti, come stanno cambiando lo sviluppo del software e quale ruolo gioca ciascuno nel processo? Cercherò di rispondere a queste domande di seguito.

Docker e contenitori

I contenitori, supportati in Linux, Windows e altri sistemi operativi moderni, consentono l'esecuzione del software in mini ambienti autonomi isolati dal resto del sistema. I container sono stati paragonati alle VM, ma non sono VM: sono molto più snelle, più veloci da avviare e arrestare e molto più flessibili e portabili. Poiché i contenitori possono essere ingranditi o ridotti o ridimensionati o ridimensionati in pochi secondi, semplificano l'esecuzione delle app in ambienti elastici come il cloud. 

Linux e altri sistemi operativi supportano le app containerizzate da molti anni, ma lavorare con i container non era esattamente user-friendly. Docker, sia nella sua versione open source che in quella commerciale, è un software che rende i container un prodotto facile da usare e di facile sviluppo. Docker fornisce un set comune di strumenti e metafore per i contenitori in modo da poter creare pacchetti di app in immagini di contenitori che possono essere facilmente distribuite e riutilizzate nella tua organizzazione o altrove.

In breve, Docker semplifica la creazione di immagini container, le versioni, la condivisione, lo spostamento e la distribuzione su host compatibili con Docker come contenitori in esecuzione.

Quando utilizzo Docker e contenitori?

Docker e container sono più adatti per quando hai a che fare con carichi di lavoro che devono avere una o più delle seguenti qualità:

  • Scalabilità elastica.  Non sai quante istanze di un'app dovrai eseguire per soddisfare la domanda. Un'app o un servizio containerizzato può essere ridimensionato per soddisfare la domanda distribuendo un numero minore o maggiore di istanze dei suoi container.
  • Isolamento.  Non vuoi che l'app interferisca con altre app. Forse eseguirai più versioni dell'app fianco a fianco per soddisfare diverse revisioni di un'API. O forse vuoi mantenere pulito il sistema sottostante (sempre una buona idea).
  • Portabilità.  È necessario eseguire questa app in una varietà di ambienti e ogni configurazione deve essere riproducibile. I contenitori ti consentono di impacchettare l'intero ambiente di runtime della tua applicazione, rendendo l'app facile da distribuire ovunque trovi un host compatibile con Docker: un desktop per sviluppatori, una macchina di test del controllo di qualità, ferro locale o cloud remoto.

Ulteriori informazioni su Docker e contenitori

  • Cos'è Docker? La scintilla per la rivoluzione dei container
  • Perché dovresti usare Docker e contenitori
  • Inizia con Docker
  • I vantaggi nascosti di Docker per QA
  • 12 strumenti open source che migliorano Docker
  • Altre notizie, analisi, procedure, recensioni e consigli Docker

Kubernetes e orchestrazione dei contenitori

I contenitori sono progettati principalmente per isolare processi o applicazioni l'uno dall'altro e dal sistema sottostante. Creare e distribuire singoli contenitori è facile. Ma cosa succede se si desidera assemblare più contenitori, ad esempio un database, un front-end Web, un back-end computazionale, in una grande applicazione che può essere gestita come un'unità, senza doversi preoccupare di distribuire, connettere, gestire, e ridimensionare ciascuno di quei contenitori separatamente? Hai bisogno di un modo per  orchestrare  tutte le parti in un insieme funzionale.

Questo è il lavoro che Kubernetes assume. Se i container sono passeggeri di una crociera, Kubernetes è il direttore della crociera.

Kubernetes, basato su progetti creati in Google, fornisce un modo per automatizzare la distribuzione e la gestione di applicazioni multi-container su più host, senza dover gestire direttamente ogni container. Lo sviluppatore descrive il layout dell'applicazione su più contenitori, inclusi dettagli come il modo in cui ogni contenitore utilizza la rete e l'archiviazione. Kubernetes gestisce il resto in fase di esecuzione. Gestisce anche la gestione di dettagli poco pratici come segreti e configurazioni delle app.

Kubernetes richiede una certa esperienza per essere utilizzato bene, sebbene sia molto più una soluzione chiavi in ​​mano di quanto non lo fosse in passato. Alcuni progressi nella facilità d'uso sono dovuti a ricette prontamente disponibili per applicazioni comuni (grafici Helm); alcuni sono dovuti a una vasta gamma di distribuzioni Kubernetes prodotte da aziende di marca (Red Hat, Canonical, Docker) che lavorano mano nella mano con stack di applicazioni e framework di sviluppo popolari.

Quando utilizzo Kubernetes e l'orchestrazione dei contenitori?

Le app containerizzate semplici che servono un numero limitato di utenti in genere non richiedono orchestrazione, per non parlare di Kubernetes. Ma se un'app ha più di un banale livello di funzionalità o un banale numero di utenti, diventa difficile non reinventare la ruota fornita dai sistemi di orchestrazione. Ecco alcune regole pratiche per determinare quando l'orchestrazione dovrebbe entrare nell'immagine.

  • Le tue app sono complesse.  Qualsiasi applicazione che coinvolge più di due contenitori probabilmente si adatta al conto. Detto questo, le app modeste che servono solo un piccolo numero di utenti potrebbero essere orchestrate attraverso una soluzione più minimale come la modalità Swarm Docker piuttosto che Kubernetes.
  • Le tue app hanno elevate esigenze di scalabilità e resilienza.  Kubernetes e altri agenti di orchestrazione consentono di bilanciare i carichi e di avviare i contenitori per soddisfare la domanda in modo dichiarativo, descrivendo lo stato desiderato del sistema invece di codificare manualmente le reazioni alle mutevoli condizioni.
  • Vuoi sfruttare al massimo le moderne tecniche CI / CD.  I sistemi di orchestrazione supportano i modelli di distribuzione per le app che utilizzano la distribuzione blu / verde o gli aggiornamenti in sequenza.

Potrebbe venire un giorno in cui Docker e Kubernetes saranno eclissati da astrazioni ancora più amichevoli e lasceranno il posto a modi più eleganti per creare e gestire i contenitori. Per ora, tuttavia, Docker e Kubernetes sono fondamentali da conoscere e comprendere.

Ulteriori informazioni su Kubernetes e l'orchestrazione

  • Cos'è Kubernetes? La tua prossima piattaforma applicativa
  • 4 motivi per cui dovresti usare Kubernetes
  • 10 distribuzioni Kubernetes che guidano la rivoluzione dei container
  • Kubernetes gestito: AWS vs Azure vs Google Cloud
  • Ciao MicroK8s: un Kubernetes più semplice
  • Novità di Kubernetes
  • Altre notizie, procedure, recensioni, consigli e analisi su Kubernetes