Perché l'orchestrazione dei contenitori è importante?
In questa unità è possibile seguire il team di Tailspin mentre esplora le strategie per la distribuzione di una nuova direttiva dalla direzione. Il team esamina il modo in cui Kubernetes può assistere l'organizzazione nella transizione a un'architettura di microservizi.
Il futuro privilegia le piccole dimensioni
Le cose stanno migliorando a Tailspin. In una recente riunione fuori sede della direzione, Andy ha presentato i recenti risultati positivi ottenuti dal suo team con Azure DevOps, che sono stati valutati positivamente. Andy ha presentato anche una demo del progetto recente di modello di prova del team facendo uso dei contenitori Docker. Queste dimostrazioni hanno portato a una serie di conversazioni produttive sul futuro tecnico dell'organizzazione. Il giorno successivo Andy ha condiviso nuovamente le notizie con il web team di Space Game.
Andy: la presentazione di ieri fuori sede è andata molto bene. La direzione è rimasta piacevolmente sorpresa del lavoro che abbiamo fatto finora e ci ha dato un incarico speciale.
Tim: oh oh... Lavoro in questo settore da abbastanza tempo per vedere lontano un miglio l'arrivo di un problema.
Andy: no, questa è un'ottima opportunità per noi. La direzione ha apprezzato la nostra demo del contenitore Docker e vuole che valutiamo l'adozione di un'architettura di microservizi.
Amita: microservizi? Come le app per telefoni e orologi?
Andy: no, i microservizi sono app tipiche, come la nostra app Web. La differenza principale è che invece di compilare e distribuire una singola app, si esegue il refactoring di tutti i componenti la cui manutenzione e gestione verrà eseguita meglio in quanto servizi autonomi. Questi servizi vengono quindi compilati in modo da funzionare al meglio e vengono poi distribuiti per operare in modo indipendente.
Tim: continua a non convincermi. Ho già tantissimi servizi da seguire in tutti gli ambienti, non so se voglio averne altri.
Andy: si tratta di una preoccupazione comprensibile. Fortunatamente ci sono alcuni ottimi strumenti per la gestione di una vasta gamma di contenitori in un determinato ambiente. Ci è stato chiesto di creare una soluzione multi-contenitore per la nostra app Web orchestrata tramite Kubernetes. Il cliente desidera anche sapere in che modo inciderà sul processo DevOps.
Mara: mi sono informata su Kubernetes. Azure supporta ottimamente questa funzionalità attraverso il servizio Azure Kubernetes e so che è disponibile il supporto della pipeline in Azure DevOps.
Amita: con questo processo sembra che le cose si complichino. Quale sarà l'impatto sui test?
Mara: non dovrebbe essere un cambiamento rilevante. Kubernetes offre un modo per eseguire la distribuzione in spazi dei nomi diversi. In questo modo è possibile eseguire la partizione delle distribuzioni in modo da avere interi ambienti dedicati ai test e alla produzione. Poiché vengono tutti eseguiti nello stesso cluster e usano gli stessi contenitori, l'esperienza di test dovrebbe offrire ciò che ci si aspetta di trovare nell'ambiente di produzione.
Amita: sarà difficile tenere traccia delle posizioni dei diversi ambienti?
Mara: no, possiamo usare gli ambienti Azure DevOps allo scopo. Sarà possibile vedere dove si trova ogni servizio e come è arrivato in quella posizione usando il portale. È tutto automatizzato tramite la pipeline, pertanto non sarà necessario tenere traccia manualmente di niente. L'unica preoccupazione che ho è l'impatto che avrà sulla nostra esperienza di sviluppo per realizzare questa soluzione.
Andy: la buona notizia è che l'impatto è minimo. Supponendo che i progetti siano stati impostati per compilare contenitori Docker, è sufficiente distribuire in Kubernetes alcuni file manifesto che descrivono i servizi e le relative distribuzioni.
Mara: hai pensato a quale elemento sottoporre a refactoring per fungere da secondo contenitore? So che diversi team ci hanno chiesto di rendere disponibile il nostro tabellone punteggi tramite un'API Web.
Andy: ti ho anticipato; ieri sera ho creato una copia tramite fork del progetto Docker e ho effettuato il refactoring della funzionalità dei dati del tabellone nel suo microservizio. In questo modo rimane un contenitore per il sito Web e un altro contenitore per un'API del tabellone punteggi. Entrambi i contenitori sono configurati per avere i propri endpoint pubblici, che è possibile condividere con chiunque voglia usare il sito o l'API, indipendentemente dallo stack di tecnologie usato dall'app. Se il carico aumenta notevolmente per entrambi, è possibile ridimensionare i contenitori in modo indipendente.
Mara: questo progetto sembra fantastico! Iniziamo ad aggiornare la pipeline di versione.
Che cos'è Kubernetes?
Kubernetes è una piattaforma di orchestrazione di contenitori open source che automatizza la distribuzione, il dimensionamento e la gestione delle applicazioni in contenitori. Fornisce un framework per l'esecuzione di sistemi distribuiti in modo dichiarativo e reattivo e può eseguire contenitori in più host, garantendo l'uso efficiente delle risorse e maggiore affidabilità.
Il team di Tailspin ha selezionato Kubernetes per questo scenario perché soddisfa tutte le esigenze:
Complessità delle distribuzioni multicontenitore: Kubernetes è progettato, innanzitutto, per automatizzare i processi di distribuzione e gestione dei contenitori.
Coerenza tra ambienti e fasi: allo stesso modo in cui i contenitori garantiscono una distribuzione coerente per le app che contengono, Kubernetes assicura una distribuzione coerente per i contenitori gestiti da un cluster.
Supporto di Azure DevOps: Azure DevOps offre un supporto ottimale per l'uso di Kubernetes.
Facilità di distribuzione l'impatto di Kubernetes su un progetto di origine è paragonabile a quello dell'aggiunta del supporto di Docker, che è minimo e limitato alla configurazione dichiarativa.
L'adozione di Kubernetes semplifica drasticamente il processo di adozione di un'architettura di microservizi che usa più contenitori Docker.