Ku­ber­ne­tes è una piat­ta­for­ma open source per il de­ploy­ment, la sca­la­bi­li­tà e la gestione au­to­ma­tiz­za­ta di ap­pli­ca­zio­ni con­tai­ne­riz­za­te. Organizza i container in cluster e ga­ran­ti­sce che i servizi fun­zio­ni­no in modo af­fi­da­bi­le ed ef­fi­cien­te. Con fun­zio­na­li­tà come il bi­lan­cia­men­to del carico, l’au­to­ri­pa­ra­zio­ne e i rollout, Ku­ber­ne­tes sem­pli­fi­ca no­te­vol­men­te il fun­zio­na­men­to delle ap­pli­ca­zio­ni moderne.

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

Cos’è Ku­ber­ne­tes?

Ku­ber­ne­tes (K8s) è un sistema open source per l’or­che­stra­zio­ne dei container, svi­lup­pa­to ori­gi­na­ria­men­te da Google e ora gestito dalla Cloud Native Computing Foun­da­tion (CNCF). Gestisce ap­pli­ca­zio­ni con­tai­ne­riz­za­te in ambienti di­stri­bui­ti, au­to­ma­tiz­zan­do l’avvio, la sca­la­bi­li­tà, il mo­ni­to­rag­gio e la so­sti­tu­zio­ne dei container quando ne­ces­sa­rio.

L’ar­chi­tet­tu­ra scritta nel lin­guag­gio di pro­gram­ma­zio­ne Go si basa su un nodo prin­ci­pa­le (nodo master) e vari nodi la­vo­ra­to­ri (nodi worker), con com­po­nen­ti come lo scheduler in­ca­ri­ca­ti di compiti am­mi­ni­stra­ti­vi centrali. At­tra­ver­so con­fi­gu­ra­zio­ni di­chia­ra­ti­ve (ad esempio in file YAML) si de­fi­ni­sco­no stati de­si­de­ra­ti, che Ku­ber­ne­tes assicura con­ti­nua­men­te. Lo strumento mira sia all’uso nel cloud che all’impiego su computer locali o in data center on-premises.

Come funziona Ku­ber­ne­tes?

Ku­ber­ne­tes è un sistema di or­che­stra­zio­ne di container. Questo significa che il software non deve creare container, bensì gestirli. Per farlo, Ku­ber­ne­tes si affida all’au­to­ma­zio­ne dei processi, che rende le fasi di test, ma­nu­ten­zio­ne e pub­bli­ca­zio­ne di ap­pli­ca­zio­ni più facili per gli svi­lup­pa­to­ri e le svi­lup­pa­tri­ci. La sua ar­chi­tet­tu­ra consiste in una chiara gerarchia, composta da:

  • Container: un container contiene ap­pli­ca­zio­ni e ambienti software.
  • Pod: questa unità dell’ar­chi­tet­tu­ra Ku­ber­ne­tes raccoglie i container che devono lavorare insieme per un’ap­pli­ca­zio­ne.
  • Nodo: uno o più pod di Ku­ber­ne­tes operano su un nodo, che può essere una macchina virtuale o fisica.
  • Cluster: diversi nodi formano un cluster di Ku­ber­ne­tes.

L’ar­chi­tet­tu­ra Ku­ber­ne­tes si basa, inoltre, sul principio di nodi master e worker. Come nodi worker, ovvero le parti con­trol­la­te del sistema, vengono uti­liz­za­ti i nodi descritti., che sono sotto la gestione e il controllo del master di Ku­ber­ne­tes.

Uno dei compiti del master è quello di di­stri­bui­re i pod ai nodi. Il mo­ni­to­rag­gio costante permette al master di in­ter­ve­ni­re non appena un nodo incontra dei problemi e di du­pli­car­lo di­ret­ta­men­te per com­pen­sa­re il guasto. Le con­di­zio­ni attuali vengono sempre con­fron­ta­te con le con­di­zio­ni standard e, se ne­ces­sa­rio, adattate. Tali processi avvengono au­to­ma­ti­ca­men­te. Il master è anche il punto di accesso per gli am­mi­ni­stra­to­ri e le am­mi­ni­stra­tri­ci, che possono poi or­che­stra­re i container.

Nodo di Ku­ber­ne­tes

Il nodo worker è un server fisico o virtuale su cui sono attivi uno o più container. Il nodo contiene un ambiente runtime per i container. È attivo, inoltre, il co­sid­det­to Kubelet, ovvero un servizio che consente la co­mu­ni­ca­zio­ne con il master e avvia e arresta i container. Il cAdvisor è un servizio del Kubelet che registra l’utilizzo delle risorse ed è molto utile per eseguire delle analisi. Infine, c’è il Kube proxy, che funge da load balancer e abilita le con­nes­sio­ni di rete su TCP o altri pro­to­col­li.

Master di Ku­ber­ne­tes

Anche il master è un server. Per garantire il controllo e il mo­ni­to­rag­gio dei nodi, il Con­trol­ler Manager lavora sul master. Questo servizio, a sua volta, combina diversi processi:

  • Il Node Con­trol­ler controlla i nodi e reagisce in caso di guasti.
  • Il Re­pli­ca­tion Con­trol­ler assicura che il numero impostato di pod funzioni sempre con­tem­po­ra­nea­men­te. Nelle con­fi­gu­ra­zio­ni moderne è am­pia­men­te so­sti­tui­to da Re­pli­ca­Se­ts, che vengono so­li­ta­men­te gestiti tramite de­ploy­ment.
  • L’Endpoints Con­trol­ler si occupa dell’oggetto endpoint che è re­spon­sa­bi­le della con­nes­sio­ne di servizi e pod.
  • I Service Account e Token Con­trol­ler ge­sti­sco­no lo spazio dei nomi e creano token di accesso alle API.

Accanto al Con­trol­ler Manager viene eseguito un database chiamato etcd o database key-value, nel quale è me­mo­riz­za­ta la con­fi­gu­ra­zio­ne del cluster di cui è re­spon­sa­bi­le il master. Lo Scheduler consente al master di di­stri­bui­re au­to­ma­ti­ca­men­te i pod ai nodi. La con­nes­sio­ne al nodo funziona tramite il server API integrato nel master, che fornisce un’in­ter­fac­cia REST e scambia in­for­ma­zio­ni con il cluster tramite JSON. Questo permette ai diversi con­trol­ler, ad esempio, di accedere ai nodi.

Ku­ber­ne­tes e Docker sono con­cor­ren­ti?

La domanda su chi performa meglio nel confronto tra Ku­ber­ne­tes e Docker in realtà non si pone, poiché si uti­liz­za­no entrambi i programmi insieme. Docker (o un’altra piat­ta­for­ma di container come rkt) è re­spon­sa­bi­le anche in Ku­ber­ne­tes per l’as­sem­blag­gio e l’ese­cu­zio­ne dei container. Ku­ber­ne­tes accede a questi container e orchestra o au­to­ma­tiz­za i processi, ma non può creare au­to­no­ma­men­te dei container.

Esiste invece una certa con­cor­ren­za con Docker Swarm, uno strumento per l’or­che­stra­zio­ne di Docker. Anche questo strumento funziona con i cluster e offre funzioni simili a Ku­ber­ne­tes.

Quali sono i vantaggi di Ku­ber­ne­tes?

Ku­ber­ne­tes offre una varietà di vantaggi che mi­glio­ra­no sia la sca­la­bi­li­tà che la sicurezza operativa e l’ef­fi­cien­za.

Sca­la­bi­li­tà au­to­ma­tiz­za­ta: per ri­spar­mia­re sui costi, Ku­ber­ne­tes può sfruttare per­fet­ta­men­te le risorse. Invece di mantenere attive macchine non ne­ces­sa­rie, il sistema può ri­la­scia­re queste risorse e uti­liz­zar­le per altri compiti o sem­pli­ce­men­te non usarle affatto, ri­spar­mian­do così sui costi.

Elevata af­fi­da­bi­li­tà: grazie alla replica e al ri­pri­sti­no au­to­ma­ti­co, Ku­ber­ne­tes ga­ran­ti­sce che le ap­pli­ca­zio­ni con­ti­nui­no a fun­zio­na­re anche in caso di errori o guasti di singole com­po­nen­ti.

Or­che­stra­zio­ne ef­fi­cien­te delle risorse: pod e container vengono di­stri­bui­ti in modo in­tel­li­gen­te sui nodi di­spo­ni­bi­li, ot­ti­miz­zan­do così l’utilizzo della potenza di calcolo.

Facile di­stri­bu­zio­ne e rollback: le nuove versioni delle ap­pli­ca­zio­ni possono essere di­stri­bui­te con uno sforzo minimo. Se ne­ces­sa­rio, è anche possibile tornare ra­pi­da­men­te alle versioni pre­ce­den­ti.

In­di­pen­den­za dalla piat­ta­for­ma: Ku­ber­ne­tes funziona su server locali, nel cloud o in un cloud ibrido; i carichi di lavoro rimangono portabili.

Service Discovery e bi­lan­cia­men­to del carico: Ku­ber­ne­tes rileva au­to­ma­ti­ca­men­te i servizi all’interno del cluster e di­stri­bui­sce il traffico in modo uniforme, senza la necessità di bi­lan­cia­to­ri di carico esterni.

Gestione ef­fi­cien­te tramite API: tramite un’unica API centrale, è possibile gestire tutte le com­po­nen­ti del cluster e au­to­ma­tiz­zar­le anche at­tra­ver­so strumenti esterni e pipeline CI/CD.

Per cosa è adatto Ku­ber­ne­tes?

Nello sviluppo software, Ku­ber­ne­tes ha ormai un ruolo im­por­tan­te, so­prat­tut­to nei progetti agili. Il ciclo di sviluppo, test e de­ploy­ment (e tutti i possibili passaggi intermedi) è sem­pli­fi­ca­to dall’or­che­stra­zio­ne di container. Lo strumento di or­che­stra­zio­ne è par­ti­co­lar­men­te indicato quando le ap­pli­ca­zio­ni sono eseguite in container e si richiede un’in­fra­strut­tu­ra scalabile ad alta di­spo­ni­bi­li­tà. Inoltre, si possono iden­ti­fi­ca­re i seguenti casi d’uso:

  • Ar­chi­tet­tu­re a mi­cro­ser­vi­zi: nella pratica, K8s viene spesso uti­liz­za­to per il fun­zio­na­men­to di ar­chi­tet­tu­re a mi­cro­ser­vi­zi, in cui molti piccoli servizi vengono svi­lup­pa­ti, testati e ag­gior­na­ti in­di­pen­den­te­men­te l’uno dall’altro. Le aziende uti­liz­za­no Ku­ber­ne­tes per au­to­ma­tiz­za­re gli ambienti di sviluppo e pro­du­zio­ne e per ri­spon­de­re più ra­pi­da­men­te alle nuove esigenze.
  • CI/CD: Ku­ber­ne­tes viene usato anche nel campo della con­ti­nuous in­te­gra­tion e della con­ti­nuous delivery, poiché in questo modo si possono au­to­ma­tiz­za­re i de­ploy­ment e gestire le versioni in modo pulito.
  • Mul­ti­cloud e cloud ibrido: nelle strategie mul­ti­cloud o cloud ibrido, Ku­ber­ne­tes serve per di­stri­bui­re i carichi di lavoro in modo in­di­pen­den­te dalla piat­ta­for­ma e per spostarli in maniera fles­si­bi­le tra vari fornitori di cloud o data center.
  • Big Data: inoltre, Ku­ber­ne­tes è adatto anche per progetti di Big Data e ap­pren­di­men­to au­to­ma­ti­co che ri­chie­do­no l’ese­cu­zio­ne parallela di molti container di breve durata.
  • Grandi piat­ta­for­me: Ku­ber­ne­tes è in­di­spen­sa­bi­le anche per le grandi piat­ta­for­me con un elevato numero di utenti, per gestire au­to­ma­ti­ca­men­te i picchi di traffico e garantire la con­ti­nui­tà operativa.
Vai al menu prin­ci­pa­le