Questo articolo illustra come concettualizzare, architettare, compilare e distribuire un'applicazione che usa progetti di Cloud Native Computing Foundation (CNCF) dopo la distribuzione del servizio Azure Kubernetes. L'architettura descrive l'app CNCF Projects su GitHub. Le istruzioni di configurazione nel respository indicano i passaggi per la distribuzione dell'architettura.
Architettura
Scaricare un file di Visio di questa architettura.
Il carico di lavoro è una semplice applicazione Web che i dipendenti possono usare per inviare e visualizzare le note spese. Quando un dipendente invia una nota spese, il manager del dipendente riceve un messaggio di posta elettronica.
Workflow
Flusso applicazione
1. Il dipendente accede a un'app Web tramite NGINX Ingress per inviare le spese.
2. L'app Web chiama un'app per le API per recuperare il manager del dipendente.
3. L'app Web invia un messaggio generato per la creazione della nota spese a un broker Knative .
4. La nota spese viene salvata in MySQL.
5. Knative attiva la funzione Email Dispatcher con il messaggio di spesa come payload.
6. Email Dispatcher crea un messaggio SendGrid.
7. SendGrid invia un messaggio di posta elettronica al manager recuperato per la revisione.
Flusso DevOps
a. Gli sviluppatori scrivono o aggiornano il codice in Visual Studio Code.
b. Gli sviluppatori esegono il push del codice in GitHub dall'area di lavoro locale in Visual Studio Code.
c. GitHub Webhook attiva le pipeline di Tekton che clonano il codice GitHub.
d. Le pipeline compilano e inviano le immagini del container a un registro Harbor.
e. Tekton distribuisce l'app Web, l'app per le API e le applicazioni Email Dispatcher.
f. Prometheus acquisisce le metriche dell'applicazione.
g. I tecnici monitorano le metriche in una dashboard Grafana.
h. I tecnici DevOps monitorano la dashboard Grafana.
Infrastruttura
i. Cluster di AKS basato sull'infrastruttura presentata nella baseline AKS.
ii. Rook Ceph usato per l'archiviazione cluster.
iii. Mesh del servizio Linkerd.
iv. Jaeger per il tracciamento complessivo delle applicazioni sul cluster Kubernetes.
Operazioni del cluster
Può risultare utile gestire i cluster e il bootstrap del cluster usando la gestione GitOps. Flux è un operatore GitOps molto diffuso. È spesso abbinato a GitHub Actions per abilitare la convalida nei manifesti aggiornati e nei grafici Helm.
Componenti
Azure
- Servizio Azure Kubernetes. Fornisce l'infrastruttura del cluster gestito.
Software open source
- Kubernetes. CNCF. Automatizza la distribuzione, il ridimensionamento e la gestione delle applicazioni in contenitori.
- Flux. CNCF. Provider GitOps per la distribuzione dell'infrastruttura.
- Rook. CNCF. Fornisce la gestione dell'archiviazione per i cluster.
- Harbor. CNCF. Registro contenitori per le immagini.
- Linkerd. CNCF. Rete di servizi che si integra con OpenFaaS, NGINX, Prometheus e Jaeger.
- Prometheus. CNCF. Acquisisce le metriche dell'applicazione.
- Jaeger. CNCF. Fornisce il tracciamento complessivo delle applicazioni sul cluster Kubernetes.
- Knative. CNCF. Usato per compilare un'applicazione serverless ed basata su eventi. Distribuisce la funzione Email Dispatcher.
- MySQL. Database in cui sono archiviate le note spese.
- NGINX. Controller in ingresso Kubernetes che i dipendenti usano per accedere all'app Web per inviare le note spese.
- Tekton. Progetto Continuous Delivery Foundation usato per l'integrazione continua/distribuzione continua (CI/CD). Distribuisce l'app Web, l'app per le API e le applicazioni Email Dispatcher.
- Grafana. Dashboard per le metriche dell'applicazione.
- SendGrid. Servizio di posta elettronica esterno che invia posta elettronica al manager per la revisione della nota spese.
- GitHub. Repository di codice. Le pipeline di Tekton usano il codice GitHub.
- .NET Core. Usato per il front-end Web e l'API Web.
- Flux. Fornisce la gestione GitOps.
Alternative
Questo progetto usa progetti CNCF di livello Graduated e Incubated. Potrebbero essere disponibili più alternative per i servizi usati. Per le alternative, vedere il sito Web CNCF. Le risorse indicate di seguito ne descrivono alcune:
- Confronto tra le opzioni mesh di servizio
- Alternative Function-as-a-Service (serverless)
- Vitess: MySQL partizionato su Kubernetes
- Monitoraggio dei microservizi mediante Zipkin e OpenTracing
- GitOps con un'esperienza incentrata sugli sviluppatori
È possibile considerare vari servizi di Azure come alternative, Ad esempio, Routing di applicazioni Web, Registro Azure Container, Archiviazione contenitori di Azure, Monitoraggio di Azure, servizio gestito di Monitoraggio di Azure per Prometheus, Grafana gestito di Azure.
Microsoft supporta anche progetti software open source come progetti di componenti aggiuntivi gestiti/derivati nel servizio Azure Kubernetes, tra cui NGINX, Istio, Prometheus, Grafana e OpenEBS.
Dettagli dello scenario
È possibile distribuire questa architettura in qualsiasi cluster Kubernetes, non solo nel servizio Azure Kubernetes. Fornisce un esempio della flessibilità della piattaforma del servizio Azure Kubernetes. Semplifica la distribuzione di un cluster Kubernetes gestito in Azure.
Questo articolo fornisce informazioni utili per comprendere come distribuire un'applicazione tipica costituita principalmente da progetti CNCF.
Potenziali casi d'uso
Questi altri casi d'uso hanno schemi progettuali simili:
- Creazione di una pipeline CI/CD per carichi di lavoro basati su contenitori
- Uso di GitOps per il servizio Azure Kubernetes
Considerazioni
Queste considerazioni implementano i pilastri di Azure Well-Architected Framework, che è un set di principi guida che possono essere usati per migliorare la qualità di un carico di lavoro. Per altre informazioni, vedere Microsoft Azure Well-Architected Framework.
- Per il cluster Kubernetes, è necessario almeno un pool di nodi utente a 3 nodi con SKU della macchina virtuale DS2_v2 o superiore.
- I volumi che usano dischi gestiti di Azure non possono essere collegati in più zone. Devono trovarsi nella stessa zona.
- L'installazione di Rook può richiedere da 20 a 25 minuti. Assicurarsi che sia stato effettuato il provisioning completo del cluster Ceph prima di procedere al passaggio successivo.
- La configurazione di Jaeger richiede circa 5 minuti.
- La visualizzazione di Linkerd nella dashboard richiede circa 12 minuti.
Ottimizzazione dei costi
L'ottimizzazione dei costi riguarda l'analisi dei modi per ridurre le spese non necessarie e migliorare l'efficienza operativa. Per altre informazioni, vedere Panoramica del pilastro di ottimizzazione dei costi.
È possibile usare il calcolatore prezzi di Azure per stimare i costi. Di seguito sono riportate alcune considerazioni sui prezzi per l'esecuzione di questo progetto in Azure. Si applica un costo trascurabile per la larghezza di banda.
Set di scalabilità di macchine virtuali
Viene addebitato un costo per le macchine virtuali usate nei set di scalabilità di macchine virtuali di Azure per il cluster del servizio Azure Kubernetes. Per altre informazioni, vedere Prezzi dei set di scalabilità di macchine virtuali.
Storage
Vengono applicati costi di archiviazione per ogni disco dati richiesto dall'installazione di Rook. Per questo cluster del servizio Azure Kubernetes a 3 nodi, la configurazione di Rook usa due dischi dati per nodo: un disco da 1 GB e un disco da 200 GB. Per altre informazioni, vedere Prezzi per l'archiviazione.
Bilanciamento del carico
Il bilanciamento del carico associato a questo cluster del servizio Azure Kubernetes comporta un addebito. Per altre informazioni, vedere Prezzi di Bilanciamento del carico.
Rete virtuale
Per la rete virtuale usata dal cluster del servizio Azure Kubernetes è previsto un addebito. Per altre informazioni, vedere Prezzi di Rete virtuale.
Distribuire lo scenario
Distribuire questo scenario dal repository GitHub Azure/cloud-native-app. Seguire le istruzioni di configurazione nella sequenza specificata per distribuire l'app CNCF Projects nell'ambiente.
Questo repository è un progetto di community. Accetta e approva le richieste pull di miglioramenti e modifiche della community.
Passaggi successivi
- Avvio rapido: Distribuire un cluster del servizio Azure Kubernetes usando il portale di Azure
- Introduzione al servizio Azure Kubernetes