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:

Schema progettuale Si applica al carico di lavoro Si applica al cluster
Progettare per il ridimensionamento indipendente dei componenti logici ✔️
Progettare per il ridimensionamento basato su eventi ✔️
Obiettivo della progettazione senza stato ✔️
Abilitare gli aggiornamenti automatici del cluster e dei nodi ✔️
Installare componenti aggiuntivi ed estensioni supportati ✔️ ✔️
Containerizzare il carico di lavoro, se applicabile ✔️
Usare hardware efficiente per l'energia ✔️
Soddisfare le esigenze di scalabilità e usare funzionalità di scalabilità automatica e bursting ✔️
Disattivare carichi di lavoro e pool di nodi al di fuori dell'orario di ufficio ✔️ ✔️
Eliminare le risorse inutilizzate ✔️ ✔️
Contrassegna le risorse ✔️ ✔️
Ottimizzare l'utilizzo dello spazio di archiviazione ✔️ ✔️
Scegliere un'area più vicina agli utenti ✔️
Ridurre l'attraversamento della rete tra nodi ✔️
Valutare l'uso di una mesh di servizi ✔️
Ottimizzare la raccolta di log ✔️ ✔️
Memorizzare nella cache i dati statici ✔️ ✔️
Valutare se usare la terminazione TLS ✔️ ✔️
Usare strumenti e controlli di sicurezza di rete nativi del cloud ✔️ ✔️
Analizzare le vulnerabilità ✔️ ✔️

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.

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.

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.

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.

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.

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.

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 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.

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.

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.

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