Kubernetes e Docker a confronto
Docker costruisce applicazioni in immagini containerizzate e può eseguirle come container. Kubernetes non può fare nessuna di queste operazioni. Infatti, si posiziona a un livello superiore e orchestra le operazioni.
Consideriamo il seguente esempio: abbiamo un cluster Kubernetes con 10 nodi per eseguire le applicazioni in produzione.
Il primo passo è che i team di sviluppo utilizzino Docker per impacchettare le loro applicazioni come container. Una volta fatto ciò, i team consegnano queste app containerizzate a Kubernetes per l’esecuzione.
Kubernetes prende decisioni di orchestrazione ad alto livello, ad esempio quali nodi dovrebbero eseguire i container, ma Kubernetes stesso non può avviare o fermare container.
In passato, ogni nodo del cluster Kubernetes eseguiva una copia di Docker che avviava e fermava i container.
In questo modello, gli strumenti di build di Docker vengono usati per impacchettare le applicazioni come container, Kubernetes prende decisioni di scheduling e orchestrazione, e il runtime dei container di Docker esegue il compito a basso livello di far girare i container.
Dall’esterno sembrava tutto a posto. Tuttavia, osservando più da vicino, il runtime di Docker risulta pesante e eccessivo per le necessità di Kubernetes.
Di conseguenza, il progetto Kubernetes ha iniziato a lavorare per rendere il livello di runtime dei container pluggable, in modo che gli utenti potessero scegliere il runtime dei container migliore per le proprie esigenze.
Nel 2016 Kubernetes ha introdotto l’interfaccia di runtime dei container (CRI). Da allora, sono stati sviluppati molti runtime per container diversi per Kubernetes.
Nel 2020 Kubernetes ha deprecato il runtime Docker, che è un modo per indicare che smetterà di funzionare in una versione futura.
Al momento della scrittura, containerd ha sostituito Docker come runtime dei container predefinito nella maggior parte dei cluster Kubernetes.
Tuttavia, containerd è una versione ridotta di Docker, ottimizzata per Kubernetes. Pertanto, tutte le immagini container create con Docker continueranno a funzionare su Kubernetes.
Di fatto, sia Docker che Kubernetes lavorano con container che supportano la specifica Open Containers Initiative (OCI). Nel 2022 Docker rappresenta ancora il modo più popolare e diffuso per creare app containerizzate che girano su Kubernetes.
I team di sviluppo possono usare Docker per costruire le loro immagini, e i team di operations possono usare Kubernetes per eseguirle.
Tutto questo è interessante, ma quello che è importante sapere è che indipendentemente dal runtime dei container che utilizzi, i normali comandi e pattern di Kubernetes funzioneranno come di consueto.