Docker è una piat­ta­for­ma per la con­tai­ne­riz­za­zio­ne delle ap­pli­ca­zio­ni, mentre Ku­ber­ne­tes è un sistema di or­che­stra­zio­ne che gestisce e scala più container Docker. Docker consente di creare, con­fe­zio­na­re ed eseguire ap­pli­ca­zio­ni nei container, mentre Ku­ber­ne­tes si occupa di au­to­ma­tiz­za­re la loro di­stri­bu­zio­ne e or­ga­niz­za­zio­ne.

Ku­ber­ne­tes e Docker: quali sono le dif­fe­ren­ze?

Docker ha compiuto una piccola ri­vo­lu­zio­ne con lo sviluppo della tec­no­lo­gia dei container. Per il lavoro nello sviluppo software, la vir­tua­liz­za­zio­ne con pacchetti au­to­suf­fi­cien­ti (i container) offre nuove pos­si­bi­li­tà. Gli svi­lup­pa­to­ri e le svi­lup­pa­tri­ci possono così rag­grup­pa­re fa­cil­men­te le ap­pli­ca­zio­ni e le loro di­pen­den­ze nei container, con­sen­ten­do la vir­tua­liz­za­zio­ne a livello di processo. Sebbene esistano diverse al­ter­na­ti­ve a Docker, la soluzione open source Docker rimane ancora la piat­ta­for­ma più popolare per la creazione di container.

Ku­ber­ne­tes è invece un’ap­pli­ca­zio­ne per l’or­che­stra­zio­ne (cioè la gestione) dei container; il programma non crea però container. Il software di or­che­stra­zio­ne utilizza gli strumenti per container esistenti e li integra nel proprio flusso di lavoro. In questo modo, puoi integrare fa­cil­men­te in Ku­ber­ne­tes i container creati con Docker o un altro strumento. Suc­ces­si­va­men­te, puoi uti­liz­za­re l’or­che­stra­zio­ne per gestire, scalare e spostare i container. Ku­ber­ne­tes ga­ran­ti­sce dunque che tutto funzioni come previsto e provvede a so­sti­tui­re eventuali nodi che dovessero guastarsi.

Managed Ku­ber­ne­tes
Or­che­stra­zio­ne sicura dei carichi di lavoro dei container
  • Con­fi­gu­ra­zio­ne au­to­ma­ti­ca dei cluster Ku­ber­ne­tes
  • Ar­chi­via­zio­ne per­si­sten­te com­ple­ta­men­te integrata
  • As­si­sten­za clienti 24/7

Ap­pli­ca­zio­ni di Docker e Ku­ber­ne­tes

Nel confronto tra Docker e Ku­ber­ne­tes si nota che i due strumenti dif­fe­ri­sco­no per i loro campi di ap­pli­ca­zio­ne, ma lavorano a stretto contatto. Per capire le diverse funzioni di Docker e Ku­ber­ne­tes, esa­mi­nia­mo un esempio.

La maggior parte delle ap­pli­ca­zio­ni oggi è or­ga­niz­za­ta con le co­sid­det­te ar­chi­tet­tu­re a mi­cro­ser­vi­zi, poiché questa struttura consente una migliore sca­la­bi­li­tà, fles­si­bi­li­tà e ma­nu­te­ni­bi­li­tà, sud­di­vi­den­do sistemi complessi in servizi più piccoli e in­di­pen­den­ti.

Primo passaggio: pro­gram­ma­zio­ne di mi­cro­ser­vi­zi e creazione di container

Nel primo passaggio, l’ap­pli­ca­zio­ne deve essere pro­gram­ma­ta; il team sviluppa i singoli mi­cro­ser­vi­zi che com­pon­go­no l’app. Ogni mi­cro­ser­vi­zio viene scritto come un’unità autonoma e dispone di un’API definita per la co­mu­ni­ca­zio­ne con altri servizi. Una volta com­ple­ta­to lo sviluppo di un mi­cro­ser­vi­zio, viene con­tai­ne­riz­za­to con Docker. Docker permette di con­fe­zio­na­re i mi­cro­ser­vi­zi in piccoli container isolati, che con­ten­go­no tutte le di­pen­den­ze e le con­fi­gu­ra­zio­ni ne­ces­sa­rie. Questi container possono quindi essere eseguiti in qualsiasi ambiente, senza com­pli­ca­zio­ni dovute a con­fi­gu­ra­zio­ni di sistema diverse.

Secondo passaggio: con­fi­gu­ra­zio­ne dell’or­che­stra­zio­ne con Ku­ber­ne­tes

Dopo che i mi­cro­ser­vi­zi sono stati con­tai­ne­riz­za­ti con successo, entra in gioco Ku­ber­ne­tes. Nel passo suc­ces­si­vo, il team crea quindi file di con­fi­gu­ra­zio­ne Ku­ber­ne­tes, che sta­bi­li­sco­no come i container (nel gergo di Ku­ber­ne­tes, sono chiamati anche pod) devono essere di­stri­bui­ti su diversi server. I file includono, tra le altre cose, quante istanze di un de­ter­mi­na­to pod devono essere eseguite, quali im­po­sta­zio­ni di rete sono ne­ces­sa­rie e come funziona la co­mu­ni­ca­zio­ne tra i mi­cro­ser­vi­zi.

Ku­ber­ne­tes si occupa della gestione au­to­ma­ti­ca di questi container. Se un mi­cro­ser­vi­zio si blocca o un container si arresta, Ku­ber­ne­tes ga­ran­ti­sce che il container venga riavviato au­to­ma­ti­ca­men­te, per­met­ten­do all’ap­pli­ca­zio­ne di fun­zio­na­re senza in­ter­ru­zio­ni di sistema. Inoltre, può assolvere la funzione di load balancer e di­stri­bui­re i container su più server per garantire un migliore utilizzo e una maggiore sca­la­bi­li­tà. Se il traffico per l’ap­pli­ca­zio­ne aumenta, Ku­ber­ne­tes può avviare au­to­ma­ti­ca­men­te nuovi pod.

Terzo passaggio: ag­gior­na­men­ti

Con Ku­ber­ne­tes non solo si sem­pli­fi­ca la di­stri­bu­zio­ne dei container, ma anche la gestione degli ag­gior­na­men­ti. Se le pro­gram­ma­tri­ci e i pro­gram­ma­to­ri vogliono mettere in pro­du­zio­ne nuovo codice, Ku­ber­ne­tes può so­sti­tui­re gra­dual­men­te i container con la nuova versione, senza causare tempi di inat­ti­vi­tà. In questo modo l’ap­pli­ca­zio­ne rimane sempre di­spo­ni­bi­le, mentre si im­ple­men­ta­no nuove fun­zio­na­li­tà o cor­re­zio­ni di bug.

Confronto diretto: Ku­ber­ne­tes vs Docker

Ku­ber­ne­tes Docker
Scopo Or­che­stra­zio­ne e gestione dei container Con­tai­ne­riz­za­zio­ne delle ap­pli­ca­zio­ni
Funzione Au­to­ma­zio­ne della gestione, di­stri­bu­zio­ne e sca­la­bi­li­tà dei container in un cluster Creazione, gestione ed ese­cu­zio­ne dei container
Com­po­nen­ti Piano di controllo con nodi master e diversi nodi di lavoro Docker Client, Docker Images, Docker Registry, Container
Sca­la­bi­li­tà Su più server I container vengono eseguiti su un solo server
Gestione Gestione dei container su più host Gestione dei container su un solo host
Bi­lan­cia­men­to del carico Integrato Deve essere con­fi­gu­ra­to ester­na­men­te
Utilizzo Gestione di grandi cluster di container e ar­chi­tet­tu­re a mi­cro­ser­vi­zi Utilizzo di container su un server

Docker Swarm: l’al­ter­na­ti­va a Ku­ber­ne­tes

Anche se Ku­ber­ne­tes e Docker lavorano me­ra­vi­glio­sa­men­te insieme, lo strumento di or­che­stra­zio­ne ha con­cor­ren­za: Docker Swarm in com­bi­na­zio­ne con Docker Compose. Docker funziona con entrambe le soluzioni e può persino passare da una all’altra; tuttavia, Docker Swarm e Ku­ber­ne­tes non possono essere combinati. Pertanto, gli utenti si trovano spesso di fronte alla domanda se optare per il molto popolare Ku­ber­ne­tes o uti­liz­za­re Swarm, che ap­par­tie­ne a Docker.

La struttura dei due strumenti è fon­da­men­tal­men­te molto simile, cambiano solo i nomi dei singoli com­po­nen­ti. Anche lo scopo ap­pli­ca­ti­vo è identico: gestire i container in modo ef­fi­cien­te e garantire un uso ot­ti­miz­za­to delle risorse at­tra­ver­so la sca­la­bi­li­tà in­tel­li­gen­te.

Swarm presenta vantaggi nell’in­stal­la­zio­ne: poiché lo strumento è parte in­te­gran­te di Docker, il passaggio risulta molto facile. Mentre con Ku­ber­ne­tes bisogna prima con­fi­gu­ra­re l’or­che­stra­zio­ne, che non risulta par­ti­co­lar­men­te complessa, in Swarm tutto è già presente. Poiché nella pratica pro­ba­bil­men­te si lavora già con Docker, non è ne­ces­sa­rio imparare le par­ti­co­la­ri­tà di un nuovo programma.

In cambio, Ku­ber­ne­tes si con­trad­di­stin­gue per la sua GUI: tramite la dashboard associata all’ap­pli­ca­zio­ne si ha non solo un’ottima pa­no­ra­mi­ca di tutti gli aspetti del progetto, ma si possono svolgere anche numerosi compiti. Docker Swarm, invece, offre tale comodità solo tramite programmi ag­giun­ti­vi. Ku­ber­ne­tes vince anche per le fun­zio­na­li­tà: mentre Swarm necessita di ulteriori strumenti per il mo­ni­to­rag­gio e la re­gi­stra­zio­ne di un log, questi compiti sono già previsti in Ku­ber­ne­tes e le relative funzioni sono già incluse per im­po­sta­zio­ne pre­de­fi­ni­ta.

Il prin­ci­pa­le vantaggio dei due programmi consiste nella sca­la­bi­li­tà e nell’as­si­cu­ra­re la di­spo­ni­bi­li­tà. Si dice che Docker Swarm sia ge­ne­ral­men­te migliore in termini di sca­la­bi­li­tà. Il motivo è la com­ples­si­tà di Ku­ber­ne­tes, che porta a una certa lentezza. Tuttavia, il sistema complesso assicura che il ri­di­men­sio­na­men­to au­to­ma­ti­co sia migliore con Ku­ber­ne­tes. Inoltre, un grande vantaggio di Ku­ber­ne­tes è che monitora con­ti­nua­men­te lo stato dei container e compensa im­me­dia­ta­men­te un eventuale guasto.

Invece, Swarm si comporta meglio nel load balancing: la di­stri­bu­zio­ne uniforme del carico è una ca­rat­te­ri­sti­ca scontata in Swarm. In Ku­ber­ne­tes, è ne­ces­sa­rio scendere a un piccolo com­pro­mes­so. Infatti, bisogna tra­sfor­ma­re i de­ploy­ment in servizi per poter sfruttare la funzione di bi­lan­cia­men­to del carico.

Vai al menu prin­ci­pa­le