Procedure di progettazione del software sostenibile nel servizio Azure Kubernetes (AKS)
I principi di ingegneria del software sostenibile sono un set di competenze che consentono di definire, creare ed eseguire applicazioni sostenibili. L'obiettivo generale è ridurre l'impronta di carbonio in ogni aspetto dell'applicazione. Le linee guida di Azure Well-Architected Framework per la sostenibilità si allineano ai Principi di ingegneria del software sostenibile di Green Software Foundation e forniscono una panoramica dei principi di ingegneria del software sostenibile.
L'ingegneria del software sostenibile è un cambiamento di priorità e attenzione. In molti casi, il modo in cui la maggior parte del software è progettata ed eseguita evidenzia prestazioni veloci e bassa latenza. L'ingegneria del software sostenibile è incentrata sulla riduzione del maggior numero possibile di emissioni di carbonio.
- L'applicazione di principi di progettazione software sostenibile può offrire prestazioni più veloci o una latenza inferiore, ad esempio ridurre l'attraversamento totale della rete.
- La riduzione delle emissioni di carbonio può causare prestazioni più lente o una maggiore latenza, ad esempio ritardare i carichi di lavoro con priorità bassa.
Le indicazioni seguenti sono incentrate sui servizi che si stanno creando o operando in Azure con il servizio Azure Kubernetes (AKS). Questo articolo include elenchi di controllo di progettazione e configurazione, procedure di progettazione consigliate e opzioni di configurazione. Prima di applicare principi di progettazione software sostenibile all'applicazione, esaminare le priorità, le esigenze e i compromessi dell'applicazione.
Prerequisiti
- Riconoscere le linee guida per la sostenibilità di Well-Architected Framework consente di produrre un'architettura cloud di alta qualità, stabile ed efficiente. È consigliabile iniziare leggendo altre informazioni sui carichi di lavoro sostenibili ed esaminando il carico di lavoro usando la valutazione di revisione di Microsoft Azure Well-Architected.
- È fondamentale definire chiaramente i requisiti aziendali durante la compilazione di applicazioni, in quanto potrebbero avere un impatto diretto sulle architetture e sulle configurazioni dei carichi di lavoro e del cluster. Durante la compilazione o l'aggiornamento di applicazioni esistenti, esaminare le aree di progettazione della sostenibilità di Well-Architected Framework insieme al ciclo di vita olistico dell'applicazione.
Riconosere il modello di responsabilità condivisa
La sostenibilità è una responsabilità condivisa tra il provider di servizi cloud e il cliente o il partner che progetta e distribuisce cluster del servizio Azure Kubernetes nella piattaforma. La distribuzione del servizio Azure Kubernetes non rende automaticamente sostenibile, anche se i data center sono ottimizzati per la sostenibilità. Le applicazioni non ottimizzate correttamente possono comunque generare più carbonio del necessario.
Altre informazioni sul modello di responsabilità condivisa per la sostenibilità.
Principi di progettazione
Efficienza del carbonio: emetti la quantità minima di carbonio possibile.
Un'applicazione cloud efficiente in termini di emissioni di carbonio è una soluzione ottimizzata e il punto di partenza è l'ottimizzazione dei costi.
Efficienza energetica: utilizzare la quantità minima di energia possibile.
Un modo per aumentare l'efficienza energetica consiste nell'eseguire l'applicazione nel minor numero possibile di server con i server in esecuzione al tasso di utilizzo più elevato, aumentando anche l'efficienza hardware.
Efficienza hardware: usare la quantità minima di carbonio incorporato possibile.
Esistono due approcci principali all'efficienza hardware:
- Per i dispositivi degli utenti finali, estende la durata dell'hardware.
- Per il cloud computing, aumenta l'utilizzo delle risorse.
Consapevolezza del carbonio: fare di più quando l'elettricità è più pulita e fare meno quando l'elettricità è più sporca.
Essere a conoscenza del carbonio significa rispondere ai cambiamenti nell'intensità di carbonio aumentando o riducendo la domanda.
Modelli e procedure di progettazione
Prima di esaminare le raccomandazioni dettagliate in ognuna delle aree di progettazione, è consigliabile considerare attentamente i modelli di progettazione seguenti per la creazione di carichi di lavoro sostenibili nel servizio Azure Kubernetes:
Progettazione di applicazioni
Esplorare questa sezione per altre informazioni su come ottimizzare le applicazioni per una progettazione di applicazioni più sostenibile.
Progettare per il ridimensionamento indipendente dei componenti logici
Un'architettura di microservizio può ridurre le risorse di calcolo necessarie, in quanto consente il ridimensionamento indipendente dei relativi componenti logici e garantisce che vengano ridimensionate in base alla domanda.
- È consigliabile usare Dapr Framework o altri progetti DPIF per separare le funzionalità dell'applicazione in microservizi diversi e consentire il ridimensionamento indipendente dei relativi componenti logici.
Progettare per il ridimensionamento basato su eventi
Quando si ridimensiona il carico di lavoro in base alle metriche aziendali pertinenti, ad esempio richieste HTTP, lunghezza della coda ed eventi cloud, è possibile ridurre l'utilizzo delle risorse e le emissioni di carbonio.
- Usare Keda quando si creano applicazioni basate su eventi per consentire il ridimensionamento a zero quando non è richiesta alcuna richiesta.
Obiettivo della progettazione senza stato
La rimozione dello stato dalla progettazione riduce i dati in memoria o su disco necessari per il funzionamento del carico di lavoro.
- Prendere in considerazione la progettazione senza stato per ridurre il carico di rete, l'elaborazione dei dati e le risorse di calcolo non necessarie.
Piattaforma applicativa
Esplora questa sezione per informazioni su come prendere decisioni più informate relative alla piattaforma in relazione alla sostenibilità.
Abilitare gli aggiornamenti automatici del cluster e dei nodi
Un cluster aggiornato evita problemi di prestazioni non necessari e garantisce il vantaggio dei miglioramenti delle prestazioni e delle ottimizzazioni di calcolo più recenti.
- Abilitare l’aggiornamento automatico del cluster e applicare automaticamente gli aggiornamenti della sicurezza ai nodi usando GitHub Actions per assicurarsi che il cluster abbia i miglioramenti più recenti.
Installare componenti aggiuntivi ed estensioni supportati
I componenti aggiuntivi e le estensioni coperti dai criteri di supporto del servizio Azure Kubernetes offrono altre funzionalità supportate al cluster, consentendo al contempo di trarre vantaggio dai miglioramenti più recenti delle prestazioni e dalle ottimizzazioni dell'energia per tutto il ciclo di vita del cluster.
- Installare KEDA come componente aggiuntivo.
- Installare GitOps e Dapr come estensioni.
Containerizzare il carico di lavoro, se applicabile
I contenitori consentono di ridurre l'allocazione di risorse non necessarie e di usare meglio le risorse distribuite perché consentono la compressione dei contenitori e richiedono meno risorse di calcolo rispetto alle macchine virtuali.
- Usare Draft per semplificare la containerizzazione delle applicazioni generando manifesti Dockerfile e Kubernetes.
Usare hardware efficiente per l'energia
I processori nativi cloud di Ampere sono progettati in modo univoco per soddisfare sia le prestazioni elevate che le esigenze di efficienza energetica del cloud.
- Valutare se i nodi con processori basati su Arm di Ampere Altra rappresentano un'ottima opzione per i carichi di lavoro.
Soddisfare le esigenze di scalabilità e usare funzionalità di scalabilità automatica e bursting
Un cluster sovradimensionato non ottimizza l'utilizzo delle risorse di calcolo e può causare uno spreco di energia. Separare le applicazioni in pool di nodi diversi per consentire il ridimensionamento corretto del cluster e il ridimensionamento indipendente in base ai requisiti dell'applicazione. Man mano che si esaurisce la capacità nel cluster del servizio Azure Kubernetes, passare dal servizio Azure Kubernetes al servizio Azure Container per aumentare il numero di pod in nodi serverless e assicurarsi che il carico di lavoro usi tutte le risorse allocate in modo efficiente.
- Ridimensionare il cluster in base alle esigenze di scalabilità dell'applicazione. Usare il ridimensionamento automatico del cluster con nodi virtuali per ridimensionare rapidamente e ottimizzare l'utilizzo delle risorse di calcolo.
- È anche possibile applicare quote di risorse a livello di spazio dei nomi e ridimensionare i pool di nodi utente a zero quando non è richiesta.
Disattivare carichi di lavoro e pool di nodi al di fuori dell'orario di ufficio
I carichi di lavoro potrebbero non dover essere eseguiti continuamente e potrebbero essere disattivati per ridurre gli sprechi energetici e le emissioni di carbonio. È possibile disattivare (arrestare) completamente i pool di nodi nel cluster AKS, consentendo di risparmiare sui costi di calcolo.
- Usare l'arresto o l'avvio del pool di nodi per disattivare i pool di nodi al di fuori dell'orario di ufficio.
- Usare lo strumento di ridimensionamento automatico CRON KEDA per ridurre i carichi di lavoro (pod) in base al tempo.
Procedure operative
Esplorare questa sezione per configurare l'ambiente per misurare e migliorare continuamente i costi dei carichi di lavoro e l'efficienza in termini di carbonio.
Eliminare le risorse inutilizzate
È consigliabile identificare ed eliminare eventuali risorse inutilizzate, ad esempio immagini e risorse di archiviazione non referenziate, in quanto hanno un impatto diretto sull'hardware e sull'efficienza energetica. Per garantire l'ottimizzazione continua dell'energia, è necessario considerare l'identificazione e l'eliminazione di risorse inutilizzate come processo anziché come attività temporizzato.
- Usare Azure Advisor per identificare le risorse inutilizzate.
- Usare ImageCleaner per pulire le immagini non aggiornate e rimuovere un'area di rischio nel cluster.
Contrassegna le risorse
Ottenere le informazioni e le informazioni dettagliate corrette al momento giusto è importante per produrre report sulle prestazioni e sull'utilizzo delle risorse.
- Impostare itag di Azure nel cluster per abilitare il monitoraggio dei carichi di lavoro.
Storage
Esplorare questa sezione per informazioni su come progettare un'architettura di archiviazione dei dati più sostenibile e ottimizzare le distribuzioni esistenti.
Ottimizzare l'utilizzo dello spazio di archiviazione
Le operazioni di recupero e archiviazione dei dati possono avere un impatto significativo sull'efficienza energetica e hardware. La progettazione di soluzioni con il modello di accesso ai dati corretto può ridurre il consumo energetico e il carbonio incorporato.
- Riconoscere le esigenze dell'applicazione per scegliere l'archiviazione appropriata e definirla usando le classi di archiviazione per evitare sottoutilizzo dello spazio di archiviazione.
- Prendere in considerazione ilprovisioning di volumi in modo dinamico per ridimensionare automaticamente il numero di risorse di archiviazione.
Rete e connettività
Esplorare questa sezione per informazioni su come migliorare e ottimizzare l'efficienza della rete per ridurre le emissioni di carbonio non necessarie.
Scegliere un'area più vicina agli utenti
La distanza tra un data center e gli utenti ha un impatto significativo sul consumo energetico e sulle emissioni di carbonio. L'abbreviamento della distanza di un viaggio di pacchetti di rete migliora sia l'energia che l'efficienza di carbonio.
- Esaminare i requisiti dell'applicazione e le aree geografiche di Azure per scegliere un'area più vicina alla posizione in cui si trovano la maggior parte dei pacchetti di rete.
Ridurre l'attraversamento della rete tra nodi
L'inserimento di nodi in una singola area o in una singola zona di disponibilità riduce la distanza fisica tra le istanze. Tuttavia, per i carichi di lavoro business critical, è necessario assicurarsi che il cluster sia distribuito in più zone di disponibilità, con conseguente maggiore attraversamento della rete e aumento dell'impronta di carbonio.
- Valutare la possibilità di distribuire i nodi all'interno di un gruppo di posizionamento di prossimità per ridurre l'attraversamento della rete assicurando che le risorse di calcolo si trovino fisicamente vicine l'una all'altra.
- Per i carichi di lavoro critici, configurare gruppi di posizionamento di prossimità con zone di disponibilità.
Valutare l'uso di una mesh di servizi
Una mesh di servizi distribuisce contenitori aggiuntivi per la comunicazione, in genere in un modello sidecar, per offrire funzionalità più operative, che comportano un aumento dell'utilizzo della CPU e del traffico di rete. Tuttavia, consente di separare l'applicazione da queste funzionalità man mano che le sposta dal livello dell'applicazione al livello dell'infrastruttura.
- Considerare attentamente l'aumento dell'utilizzo della CPU e del traffico di rete generato dai componenti di comunicazione mesh del servizio prima di prendere la decisione di usarne uno.
Ottimizzare la raccolta di log
L'invio e l'archiviazione di tutti i log da tutte le possibili origini (carichi di lavoro, servizi, diagnostica e attività della piattaforma) possono aumentare il traffico di archiviazione e di rete, che influisce sui costi e sulle emissioni di carbonio.
- Assicurarsi di raccogliere e conservare solo i dati di log necessari per supportare i requisiti. Configurare le regole di raccolta dati per i carichi di lavoro del servizio Azure Kubernetes e implementare considerazioni di progettazione per ottimizzare i costi di Log Analytics.
Memorizzare nella cache i dati statici
L'uso della rete per la distribuzione di contenuti (CDN) è un approccio sostenibile per ottimizzare il traffico di rete perché riduce lo spostamento dei dati in una rete. Riduce al minimo la latenza tramite l'archiviazione di dati statici letti di frequente più vicino agli utenti e consente di ridurre il traffico di rete e il carico del server.
- Assicurarsi di seguire le procedure consigliate per la rete CDN.
- Prendere in considerazione l'uso della rete CDN di Azure per ridurre la larghezza di banda usata e ridurre i costi.
Sicurezza
Esplorare questa sezione per altre informazioni sulle raccomandazioni che portano a un comportamento di sicurezza sostenibile e di dimensioni corrette.
Valutare se usare la terminazione TLS
Transport Layer Security (TLS) garantisce che tutti i dati passati tra il server Web e i Web browser rimangano privati e crittografati. Tuttavia, la terminazione e la ridestinazione di TLS aumentano l'utilizzo della CPU e potrebbero non essere necessarie in determinate architetture. Un livello di sicurezza bilanciato può offrire un carico di lavoro più sostenibile ed efficiente per l'energia, mentre un livello più elevato di sicurezza può aumentare i requisiti di risorse di calcolo.
- Esaminare le informazioni sulla terminazione TLS quando si usa il gateway applicazione o frontdoor di Azure. Determinare se è possibile terminare TLS nel gateway di confine e continuare con il servizio di bilanciamento del carico di lavoro e il carico di lavoro non TLS.
Usare strumenti e controlli di sicurezza di rete nativi del cloud
Frontdoor di Azure e gateway applicazione consentono di gestire il traffico dalle applicazioni Web, mentre Web application firewall di Azure offre protezione dagli attacchi OWASP principali 10 e il caricamento di bot danneggiati nella rete perimetrale. Queste funzionalità consentono di rimuovere la trasmissione dei dati non necessaria e ridurre il carico sull'infrastruttura cloud con una larghezza di banda inferiore e un minor numero di requisiti di infrastruttura.
- Usare il controller di ingresso del gateway applicazione (AGIC) nel servizio Azure Kubernetes per filtrare e scaricare il traffico nella rete perimetrale dal raggiungimento dell'origine per ridurre il consumo di energia e le emissioni di carbonio.
Individuare le vulnerabilità
Molti attacchi all'infrastruttura cloud cercano di usare in modo improprio le risorse distribuite per il guadagno diretto dell'utente malintenzionato, causando un picco non necessario di utilizzo e costi. Gli strumenti di analisi delle vulnerabilità consentono di ridurre al minimo la finestra di opportunità per gli utenti malintenzionati e attenuare eventuali potenziali utilizzi dannosi delle risorse.
- Seguire le raccomandazioni di Microsoft Defender per il Cloud.
- Eseguire strumenti di analisi automatizzata delle vulnerabilità, ad esempio Defender per contenitori, per evitare l'utilizzo di risorse non necessarie. Questi strumenti consentono di identificare le vulnerabilità nelle immagini e ridurre al minimo la finestra di opportunità per gli utenti malintenzionati.
Passaggi successivi
Azure Kubernetes Service