Le possibilità offerte da Azure per l’esecuzione dei container

La forte tendenza nello sviluppo di applicazioni che prevedono architetture basate su microservizi rendono i container perfetti per eseguire il deployment del software in modo efficiente ed operare su larga scala. I container sono in grado di funzionare su sistemi operativi Windows, Linux e Mac, su macchine virtuali oppure bare metal, in data center on-premise e, ovviamente, nel cloud pubblico. Microsoft è certamente uno dei principali provider che consente l’esecuzione di container a livello enterprise nel cloud pubblico. In questo articolo viene riportata una panoramica delle principali soluzioni che è possibile adottare per l’esecuzione di container in ambiente Microsoft Azure.

Macchine virtuali

Le macchine virtuali IaaS in ambiente Azure sono in grado di fornire la massima flessibilità per eseguire container Docker. Infatti, su macchine virtuali Windows e Linux è possibile installare il runtime Docker e grazie alla disponibilità di diverse combinazioni di CPU e RAM si può disporre delle risorse necessarie per eseguire uno o più container. Questo approccio è tipicamente consigliato in ambienti di Dev\Test, in quanto l’onere di configurazione e manutenzione della macchina virtuale non è comunque trascurabile.

Approcci serverless

Azure Container Instances (ACI)

Azure Container Instances (ACI) è il metodo più semplice e rapido in Azure per l’esecuzione di container on-demand in un ambiente serverless gestito. Il tutto viene reso possibile senza dover attivare macchine virtuali specifiche e la manutenzione necessaria è pressoché trascurabile. La soluzione Azure Container Instances è idonea in scenari che richiedono container isolati, senza la necessità di adottare un sistema complesso di orchestrazione. ACI è infatti in grado di fornire solo alcune funzionalità di schedulazione di base offerte delle piattaforme di orchestrazione e, sebbene non copra i servizi di valore forniti da tali piattaforme, può essere visto come una soluzione complementare.

Le risorse di primo livello in Azure Container Instances sono i Container group, una raccolta di container che vengono schedulati sulla stessa macchina host. I container all’interno di un Container group condividono il lifecycle, le risorse, la rete locale ed i volumi di archiviazione. Il concetto di Container group è simile a quello del pod in ambiente Kubernetes.

Figura 1 – Esempio di container group in Azure Container Instances

Il servizio Azure Container Instances comporta dei costi che dipendono dal numero di vCPU e di GBs di memoria allocati al secondo. Per maggiori dettagli sui costi è possibile consultare la relativa pagina ufficiale Microsoft.

Azure Web App for Containers

Per carichi di lavoro web-based esiste la possibilità di far eseguire i container dagli Azure App Service, la piattaforma Azure di web hosting, utilizzando il servizio Azure Web App for Containers, con il vantaggio di poter sfruttare le metodologie di distribuzione, scalabilità e monitor intrinseche nella soluzione.

Azure Batch e container

Se i workload prevedono la necessità di scalare con più job batch è possibile inserirli in container e gestire lo scaling tramite Azure Batch. In questo scenario la combinazione tra Azure Batch e container risulta vincente. Azure Batch consente l’esecuzione ed il ridimensionare di un numero elevato di processi di elaborazione batch in Azure, mentre i container forniscono un metodo semplice per eseguire le attività Batch, senza dover gestire l’ambiente e le relative dipendenze, necessarie per l’esecuzione delle applicazioni. In questi scenari è possibile prevedere l’adozione delle low-priority VMs con Azure Batch per ridurre i costi.

Orchestrazione dei container

I task di automazione e gestione di un numero elevato di container e le modalità con le quali questi interagiscono applicativamente tra di loro è noto come orchestrazione. Nel caso quindi ci sia la necessità di orchestrare più containers è necessario adottare soluzioni più sofisticate come: Azure Kubernetes Service (AKS) oppure Azure Service Fabric.

Azure Kubernetes Service (AKS)

Azure Kubernetes Service (AKS) è il servizio Azure completamente gestito che permette l’attivazione di un cluster Kubernetes.

Kubernetes, conosciuto anche come “k8s”, provvede all’orchestrazione automatizzata dei container, migliorandone l’affidabilità e riducendo il tempo e le risorse necessarie in ambito DevOps. Kubernetes tende a semplificare i deployment, permettendo di eseguire automaticamente le implementazioni ed i rollback. Inoltre, permette di migliorare la gestione delle applicazioni e di monitorare lo stato dei servizi per evitare errori in fase di implementazione. Tra le varie funzionalità sono previsti controlli di integrità dei servizi, con la possibilità di riavviare i container che non sono in esecuzione oppure che risultano bloccati, permettendo di annunciare ai client solo i servizi correttamente avviati. Kubernetes permette inoltre di scalare automaticamente in base all’utilizzo ed esattamente come i container, permette di gestire in maniera dichiarativa l’ambiente cluster, consentendo una configurazione controllata a livello di versione e facilmente replicabile.

Figura 2 – Esempio di architettura a microservizi basata su Azure Kubernetes Service (AKS)

Azure Service Fabric

Un’altra possibilità per orchestrare i container è l’adozione dell’affidabile e flessibile piattaforma Azure Service Fabric. Si tratta dell’orchestratore di container di Microsoft che permette il deployment e la gestione dei microservizi in ambienti cluster ad elevata intensità e con tempi di deployment molto rapidi. Con questa soluzione si ha la possibilità, per la stessa applicazione, di unire servizi che risiedono in processi e servizi all’interno di container. L’architettura unica e scalabile di Service Fabric consente di eseguire analisi dei dati pressoché in tempo reale, calcoli computazionali in memoria, transazioni parallele ed elaborazione di eventi nelle applicazioni. Service Fabric offre un runtime sofisticato e leggero che supporta microservizi stateless e stateful. Un elemento chiave di differenziazione di Service Fabric è il suo robusto supporto per la creazione di servizi stateful, adottando modelli di programmazione built-in di Service Fabric oppure servizi stateful containerizzati. Per maggiori informazioni sugli scenari applicativi che possono trarre vantaggio dai servizi stateful di Service Fabric è possibile consultare questo documento.

Figura 3 – Panoramica di Azure Service Fabric

Azure Service Fabric può vantare di ospitare molti servizi Microsoft, tra i quali Azure SQL Database, Azure Cosmos DB, Cortana, Microsoft Power BI, Microsoft Intune, Azure Event Hubs, Azure IoT Hub, Dynamics 365, Skype for Business, e molti servizi core di Azure.

Conclusioni

Microsoft offre un ventaglio di opzioni per l’esecuzione dei container nel proprio cloud pubblico. La scelta della soluzione più adatta alle proprie esigenze tra tutte quelle offerte, nonostante richieda una attenta valutazione, permette di avere una elevata flessibilità. Dall’adozione di approcci serverless, alla gestione di ambienti cluster per l’orchestrazione, fino alla creazione di una propria infrastruttura basata su macchine virtuali è possibile trovare la soluzione ideale per eseguire i container in ambiente Microsoft Azure.