Orchestrare microservizi e applicazioni a più contenitori per la scalabilità e la disponibilità elevate

Suggerimento

Questo contenuto è un estratto dell'eBook "Microservizi .NET: Architettura per le applicazioni .NET incluse in contenitori", disponibile in .NET Docs o come PDF scaricabile gratuitamente e da poter leggere offline.

Architettura di microservizi .NET per le applicazioni .NET incluse in contenitori dell’anteprima della copertina dell'eBook.

L'uso di agenti di orchestrazione per applicazioni pronte per la produzione è essenziale se l'applicazione è basata su microservizi o semplicemente suddivisa tra più contenitori. Come illustrato in precedenza, in un approccio basato su microservizi ogni microservizio è proprietario dei rispettivi modelli e dati, quindi sarà autonomo dal punto di vista dello sviluppo e della distribuzione. Anche se è disponibile un'applicazione più tradizionale costituita da più servizi, ad esempio SOA, saranno comunque disponibili più contenitori o servizi che comprendono una singola applicazione aziendale da distribuire come sistema distribuito. Il ridimensionamento e la gestione di questi tipi di sistemi sono complessi ed è quindi assolutamente necessario un agente di orchestrazione se si vuole ottenere un'applicazione a più contenitori pronta per la produzione e ridimensionabile.

La figura 4-23 illustra la distribuzione in un cluster di un'applicazione costituita da più microservizi (contenitori).

Diagramma che mostra le applicazioni Docker composte in un cluster.

Figura 4-23. Cluster di contenitori

usare un contenitore per ogni istanza del servizio. I contenitori Docker sono "unità di distribuzione" e un contenitore è un'istanza di un'immagine Docker. Un host gestisce numerosi contenitori. Si tratta di un approccio apparentemente logico. Occorre tuttavia stabilire come vengono gestiti il bilanciamento del carico, il routing e l'orchestrazione di queste applicazioni.

Il semplice motore Docker in host Docker singoli soddisfa le esigenze di gestione di istanze singole per immagine su un host, ma non è sufficiente in caso di gestione di più contenitori distribuiti su più host per applicazioni distribuite più complesse. Nella maggior parte dei casi è necessaria una piattaforma di gestione in grado di avviare automaticamente i contenitori, aumentare il numero di istanze per immagine dei contenitori, sospenderli o arrestarli in caso di necessità e idealmente controllarne anche la modalità di accesso a risorse come la rete e l'archiviazione dati.

Per andare oltre la gestione di singoli contenitori o app composte semplici e passare ad applicazioni aziendali di dimensioni maggiori con microservizi, è necessario usare l'orchestrazione e le piattaforme di clustering.

Dal punto di vista dell'architettura e dello sviluppo, se si creano applicazioni aziendali composte di grandi dimensioni e basate su microservizi, è importante comprendere le piattaforme e i prodotti seguenti che supportano gli scenari avanzati:

Cluster e agenti di orchestrazione. Quando è necessario aumentare il numero di istanze delle applicazioni in molti host Docker, ad esempio nel caso di un'applicazione di grandi dimensioni basata su microservizi, è essenziale poter gestire tutti questi host come un singolo cluster tramite l'astrazione della complessità della piattaforma sottostante. I cluster di contenitori e gli agenti di orchestrazione offrono questo vantaggio. Kubernetes è un esempio di agente di orchestrazione disponibile in Azure tramite il servizio Azure Kubernetes.

Utilità di pianificazione. Per pianificazione si intende la possibilità per un amministratore di avviare contenitori in un cluster in modo che forniscano anche un'interfaccia utente. Un'utilità di pianificazione di cluster ha molte responsabilità, tra cui usare in modo efficiente le risorse del cluster, configurare i vincoli specificati dall'utente, bilanciare in modo efficiente il carico dei contenitori nei nodi e negli host e infine assicurare l'affidabilità in caso di errori, offrendo al tempo stesso una disponibilità elevata.

I concetti di cluster e utilità di pianificazione sono strettamente correlati, quindi i prodotti offerti da diversi fornitori includono spesso entrambi i set di funzionalità. L'elenco seguente mostra le opzioni più importanti a livello di piattaforma e software disponibili per i cluster e per le utilità di pianificazione. Questi agenti di orchestrazione sono in genere offerti in cloud pubblici quali Azure.

Piattaforme software per il clustering, l'orchestrazione e la pianificazione dei contenitori

Piattaforma Descrizione
Kubernetes
Immagine del logo Kubernetes.
Kubernetes è un prodotto open source che offre funzionalità per l'infrastruttura dei cluster, la pianificazione dei contenitori e l'orchestrazione. Consente di automatizzare la distribuzione, il ridimensionamento e la gestione di contenitori di applicazioni in cluster di host.

Kubernetes offre un'infrastruttura incentrata sui contenitori che raggruppa i contenitori di applicazioni in unità logiche per semplificarne la gestione e l'individuazione.

Kubernetes è maturo in Linux, meno maturo in Windows.
Servizio Azure Kubernetes (AKS)
Immagine del logo del servizio Azure Kubernetes.
Il servizio Azure Kubernetes è un servizio di orchestrazione dei contenitori Kubernetes gestito in Azure, che semplifica la gestione, la distribuzione e le operazioni del cluster Kubernetes.
App contenitore di Azure
Immagine del logo del servizio App Azure Container.
App contenitore di Azure è un servizio contenitore serverless gestito per la creazione e la distribuzione su larga scala di app moderne.

Uso degli agenti di orchestrazione basati su contenitori in Microsoft Azure

Alcuni fornitori cloud, tra cui Microsoft Azure, Amazon EC2 Container Service e Google Container Engine, offrono il supporto per contenitori Docker oltre al supporto per i contenitori e l'agente di orchestrazione Docker. Microsoft Azure offre il supporto per cluster e agente di orchestrazione Docker tramite il servizio Azure Kubernetes.

Servizio Azure Kubernetes

Un cluster Kubernetes crea più pool di host Docker e li espone come un singolo host Docker virtuale, per consentire di distribuire più contenitori nel cluster e scalare orizzontalmente qualsiasi numero di istanze contenitore. Il cluster gestirà tutte le operazioni di gestione complesse, ad esempio la scalabilità, l'integrità e così via.

Il servizio Azure Kubernetes consente di semplificare la creazione, la configurazione e la gestione in Azure di un cluster di macchine virtuali preconfigurate per l'esecuzione di applicazioni in contenitori. Usando una configurazione ottimizzata degli strumenti open source più diffusi per la pianificazione e l'orchestrazione, il servizio Azure Kubernetes consente di usare le competenze esistenti o di avvalersi delle vaste competenze in continua crescita della community per distribuire e gestire le applicazioni basate su contenitori in Microsoft Azure.

Il servizio Azure Kubernetes ottimizza la configurazione degli strumenti e delle tecnologie open source più diffusi per clustering Docker in modo specifico per Azure. Si ottiene una soluzione che offre la portabilità per la configurazione di contenitori e applicazioni. È sufficiente selezionare le dimensioni, il numero di host e gli strumenti dell'agente di orchestrazione. Il servizio Azure Kubernetes gestisce tutte le altre operazioni.

Diagramma che mostra una struttura del cluster Kubernetes.

Figura 4-24. Struttura semplificata e topologia del cluster Kubernetes

La figura 4-24 illustra la struttura di un cluster Kubernetes in cui un nodo master (VM) controlla la maggior parte del coordinamento del cluster ed è possibile distribuire i contenitori al resto dei nodi, che vengono gestiti come un singolo pool dal punto di vista dell'applicazione. La struttura consente la scalabilità fino a migliaia o persino decine di migliaia di contenitori.

Ambiente di sviluppo per Kubernetes

Nell'ambiente di sviluppo, Docker ha annunciato nel mese di luglio 2018 che Kubernetes può essere eseguito anche in un singolo computer di sviluppo (Windows 10 o macOS) intallando Docker Desktop. È possibile procedere in un secondo momento alla distribuzione nel cloud (servizio Azure Kubernetes) per altri test di integrazione, come illustrato nella figura 4-25.

Diagramma che mostra Kubernetes in un computer di sviluppo quindi distribuito nel servizio Azure Kubernetes

Figura 4-25. Esecuzione di Kubernetes in computer di sviluppo e nel cloud

Introduzione al servizio Azure Kubernetes

Per iniziare a usare il servizio Azure Kubernetes, distribuire un cluster del servizio Azure Kubernetes dal portale di Azure o tramite l'interfaccia della riga di comando. Per altre informazioni sulla distribuzione di un cluster Kubernetes in Azure, vedere Distribuire un cluster del servizio Azure Kubernetes.

Non sono previsti addebiti per il software installato per impostazione predefinita come parte del servizio Azure Kubernetes. Tutte le opzioni predefinite vengono implementate con software open source. Il servizio Azure Kubernetes è disponibile per più macchine virtuali in Azure. Vengono applicati addebiti solo per le istanze di ambiente di calcolo scelte, oltre che per le altre risorse di infrastruttura sottostanti usate, ad esempio per le risorse di archiviazione e di rete. Non sono previsti addebiti incrementali per il servizio Azure Kubernetes.

L'opzione di distribuzione di produzione predefinita per Kubernetes prevede l'utilizzo dei grafici Helm, che verranno presentati nella prossima sezione.

Distribuire con grafici Helm in cluster Kubernetes

Quando si distribuisce un'applicazione a un cluster Kubernetes, è possibile usare lo strumento dell'interfaccia della riga di comando kubectl.exe originale con i file di distribuzione basati sul formato nativo (file con estensione yaml), come già accennato nella sezione precedente. Per le applicazioni Kubernetes più complesse, ad esempio durante la distribuzione di applicazioni complesse basate su microservizi, è tuttavia consigliabile usare Helm.

I grafici Helm consentono di definire, controllare la versione, installare, condividere, aggiornare o ripristinare lo stato precedente anche dell'applicazione Kubernetes più complessa.

Inoltre l'uso di Helm è consigliabile perché anche altri ambienti Kubernetes in Azure, come Azure Dev Spaces sono basati sui grafici Helm.

Helm è gestito da Cloud Native Computing Foundation (CNCF), in collaborazione con Microsoft, Google, Bitnami e la community dei collaboratori di Helm.

Per altre informazioni sull'implementazione dei grafici Helm e Kubernetes, vedere il post che spiega come usare i grafici Helm per distribuire eShopOnContainers nel servizio Azure Kubernetes.

Risorse aggiuntive