Metoder för hållbar programvaruutveckling i Azure Kubernetes Service (AKS)
Principerna för hållbar programvaruutveckling är en uppsättning kompetenser som hjälper dig att definiera, bygga och köra hållbara program. Det övergripande målet är att minska koldioxidavtrycket i alla aspekter av ditt program. Vägledningen för Azure Well-Architected Framework för hållbarhet överensstämmer med principerna för hållbar programvaruutveckling från Green Software Foundation och ger en översikt över principerna för hållbar programvaruutveckling.
Hållbar programvaruutveckling är en förändring i prioriteringar och fokus. I många fall är det sätt som de flesta program är utformade och kör högdagrar snabba prestanda och låg svarstid. Hållbar programvaruteknik fokuserar på att minska så mycket koldioxidutsläpp som möjligt.
- Om du tillämpar principer för hållbar programvaruutveckling kan du få snabbare prestanda eller kortare svarstid, till exempel att minska den totala nätverksbläddringen.
- Att minska koldioxidutsläppen kan orsaka långsammare prestanda eller ökad svarstid, till exempel fördröjning av arbetsbelastningar med låg prioritet.
Följande vägledning fokuserar på tjänster som du skapar eller arbetar med i Azure med Azure Kubernetes Service (AKS). Den här artikeln innehåller checklistor för design och konfiguration, rekommenderade designmetoder och konfigurationsalternativ. Innan du tillämpar principer för hållbar programvaruutveckling i ditt program bör du granska programmets prioriteringar, behov och kompromisser.
Förutsättningar
- Genom att förstå hållbarhetsvägledningen för well-architected Framework kan du skapa en högkvalitativ, stabil och effektiv molnarkitektur. Vi rekommenderar att du börjar med att läsa mer om hållbara arbetsbelastningar och granska din arbetsbelastning med hjälp av utvärdering av Microsoft Azure Well-Architected Review .
- Det är viktigt att du har tydligt definierade affärskrav när du skapar program, eftersom de kan ha en direkt inverkan på både kluster- och arbetsbelastningsarkitekturer och konfigurationer. När du skapar eller uppdaterar befintliga program granskar du hållbarhetsdesignområdena för well-Architected Framework, tillsammans med programmets holistiska livscykel.
Förstå modellen för delat ansvar
Hållbarhet är ett delat ansvar mellan molnleverantören och kunden eller partnern som utformar och distribuerar AKS-kluster på plattformen. Att distribuera AKS gör det inte automatiskt hållbart, även om datacenter är optimerade för hållbarhet. Program som inte är korrekt optimerade kan fortfarande generera mer koldioxid än nödvändigt.
Läs mer om modellen med delat ansvar för hållbarhet.
Designprinciper
Koldioxideffektivitet: Avge minsta möjliga mängd koldioxid.
Ett koldioxideffektivt molnprogram är ett som är optimerat, och utgångspunkten är kostnadsoptimeringen.
Energieffektivitet: Använd minsta möjliga mängd energi.
Ett sätt att öka energieffektiviteten är att köra programmet på så få servrar som möjligt med servrarna som körs med högsta användningshastighet, vilket också ökar maskinvarueffektiviteten.
Maskinvarueffektivitet: Använd minsta möjliga mängd inbäddad koldioxid.
Det finns två huvudsakliga metoder för maskinvarueffektivitet:
- För slutanvändarenheter utökas maskinvarulivslängden.
- För molnbaserad databehandling ökar resursanvändningen.
Koldioxidmedvetenhet: Gör mer när elen är renare och gör mindre när elen är smutsigare.
Att vara koldioxidmedveten innebär att reagera på förändringar i koldioxidintensiteten genom att öka eller minska din efterfrågan.
Designmönster och metoder
Innan du granskar de detaljerade rekommendationerna i vart och ett av designområdena rekommenderar vi att du noga överväger följande designmönster för att skapa hållbara arbetsbelastningar i AKS:
Programdesign
Utforska det här avsnittet om du vill veta mer om hur du optimerar dina program för en mer hållbar programdesign.
Design för oberoende skalning av logiska komponenter
En mikrotjänstarkitektur kan minska de beräkningsresurser som krävs, eftersom den möjliggör oberoende skalning av dess logiska komponenter och säkerställer att de skalas efter behov.
- Överväg att använda Dapr Framework eller andra CNCF-projekt för att hjälpa dig att separera dina programfunktioner i olika mikrotjänster och för att tillåta oberoende skalning av dess logiska komponenter.
Design för händelsedriven skalning
När du skalar din arbetsbelastning baserat på relevanta affärsmått, till exempel HTTP-begäranden, kölängd och molnhändelser, kan du minska resursanvändningen och koldioxidutsläppen.
- Använd Keda när du skapar händelsedrivna program för att tillåta nedskalning till noll när det inte finns någon efterfrågan.
Sikta på tillståndslös design
Om du tar bort tillstånd från din design minskar mängden minnesintern eller på diskdata som krävs av arbetsbelastningen för att fungera.
- Överväg tillståndslös design för att minska onödig nätverksbelastning, databearbetning och beräkningsresurser.
Programplattform
Utforska det här avsnittet för att lära dig hur du fattar bättre välgrundade plattformsrelaterade beslut kring hållbarhet.
Aktivera automatisk uppdatering av kluster och noder
Ett uppdaterat kluster undviker onödiga prestandaproblem och ser till att du drar nytta av de senaste prestandaförbättringarna och beräkningsoptimeringarna.
- Aktivera autouppgradering av kluster och tillämpa säkerhetsuppdateringar på noder automatiskt med GitHub Actions för att säkerställa att klustret har de senaste förbättringarna.
Installera tillägg som stöds
Tillägg och tillägg som omfattas av AKS-supportpolicyn ger ytterligare funktioner som stöds i klustret, samtidigt som du kan dra nytta av de senaste prestandaförbättringarna och energioptimeringarna under hela klusterlivscykeln.
- Installera KEDA som ett tillägg.
- Installera GitOps och Dapr som tillägg.
Containerisera din arbetsbelastning där det är tillämpligt
Containrar gör det möjligt att minska onödig resursallokering och utnyttja de resurser som distribueras på ett bättre sätt, eftersom de möjliggör paketering av lagerplatser och kräver mindre beräkningsresurser än virtuella datorer.
- Använd Draft för att förenkla programcontaineriseringen genom att generera Dockerfiles- och Kubernetes-manifest.
Använda energieffektiv maskinvara
Ampere:s molnbaserade processorer är unikt utformade för att uppfylla både molnets höga prestanda- och energieffektivitetsbehov.
- Utvärdera om noder med Ampere Altra Arm-baserade processorer är ett bra alternativ för dina arbetsbelastningar.
Matcha skalbarhetsbehoven och använd funktioner för automatisk skalning och bursting
Ett överdimensionerat kluster maximerar inte användningen av beräkningsresurser och kan leda till slöseri med energi. Avgränsa dina program i olika nodpooler för att tillåta klusterrätt storleksändring och oberoende skalning enligt programkraven. När kapaciteten i AKS-klustret tar slut växer du från AKS till ACI för att skala ut extra poddar till serverlösa noder och se till att din arbetsbelastning använder alla allokerade resurser effektivt.
- Ändra storleken på klustret så att det matchar programmets skalbarhetsbehov. Använd autoskalning av kluster med virtuella noder för att snabbt skala och maximera beräkningsresursanvändningen.
- Du kan också framtvinga resurskvoter på namnområdesnivå och skala användarnodpooler till noll när det inte finns någon efterfrågan.
Inaktivera arbetsbelastningar och nodpooler utanför kontorstid
Arbetsbelastningar kanske inte behöver köras kontinuerligt och kan stängas av för att minska energiavfallet och koldioxidutsläppen. Du kan helt stänga av (stoppa) dina nodpooler i AKS-klustret, så att du även kan spara på beräkningskostnader.
- Använd nodpoolens stopp/start för att inaktivera nodpoolerna utanför kontorstid.
- Använd KEDA CRON-skalningsappen för att skala ned dina arbetsbelastningar (poddar) baserat på tid.
Operativa procedurer
Utforska det här avsnittet för att konfigurera din miljö för att mäta och kontinuerligt förbättra dina arbetsbelastningskostnader och koldioxideffektivitet.
Ta bort resurser som inte används
Du bör identifiera och ta bort oanvända resurser, till exempel orefererade bilder och lagringsresurser, eftersom de har en direkt inverkan på maskinvara och energieffektivitet. För att säkerställa kontinuerlig energioptimering måste du behandla identifiering och borttagning av oanvända resurser som en process i stället för en punkt-i-tid-aktivitet.
- Använd Azure Advisor för att identifiera oanvända resurser.
- Använd ImageCleaner för att rensa inaktuella bilder och ta bort ett riskområde i klustret.
Tagga dina resurser
Att få rätt information och insikter vid rätt tidpunkt är viktigt för att skapa rapporter om prestanda och resursanvändning.
- Ange Azure-taggar i klustret för att aktivera övervakning av dina arbetsbelastningar.
Storage
Utforska det här avsnittet om du vill lära dig hur du utformar en mer hållbar datalagringsarkitektur och optimerar befintliga distributioner.
Optimera lagringsanvändning
Datahämtnings- och datalagringsåtgärderna kan ha en betydande inverkan på både energi- och maskinvarueffektiviteten. Att utforma lösningar med rätt dataåtkomstmönster kan minska energiförbrukningen och inbäddad koldioxid.
- Förstå programmets behov av att välja lämplig lagring och definiera den med hjälp av lagringsklasser för att undvika underutnyttjande av lagring.
- Överväg att etablera volymer dynamiskt för att automatiskt skala antalet lagringsresurser.
Nätverk och anslutning
Utforska det här avsnittet om du vill lära dig hur du förbättrar och optimerar nätverkseffektiviteten för att minska onödiga koldioxidutsläpp.
Välj en region som är närmast användarna
Avståndet från ett datacenter till användare har en betydande inverkan på energiförbrukning och koldioxidutsläpp. Om du förkortar avståndet för ett nätverkspaket förbättras både din energi- och koldioxideffektivitet.
- Granska dina programkrav och Azure-geografiska områden för att välja en region som är närmast den plats där de flesta nätverkspaket är på väg.
Minska nätverksbläddering mellan noder
Om du placerar noder i en enda region eller i en enda tillgänglighetszon minskar det fysiska avståndet mellan instanserna. För affärskritiska arbetsbelastningar måste du dock se till att klustret är utspritt över flera tillgänglighetszoner, vilket kan leda till mer nätverksbläddering och ökad koldioxidavtryck.
- Överväg att distribuera noderna i en närhetsplaceringsgrupp för att minska nätverksbläddring genom att se till att dina beräkningsresurser finns fysiskt nära varandra.
- För kritiska arbetsbelastningar konfigurerar du närhetsplaceringsgrupper med tillgänglighetszoner.
Utvärdera med hjälp av ett tjänstnät
Ett servicenät distribuerar extra containrar för kommunikation, vanligtvis i ett sidovagnsmönster, för att ge fler operativa funktioner, vilket leder till en ökning av CPU-användning och nätverkstrafik. Ändå kan du frikoppla ditt program från dessa funktioner när det flyttar ut dem från programskiktet och ned till infrastrukturlagret.
- Överväg noggrant ökningen av CPU-användning och nätverkstrafik som genereras av service mesh-kommunikationskomponenter innan du fattar beslutet att använda en.
Optimera loggsamling
Att skicka och lagra alla loggar från alla möjliga källor (arbetsbelastningar, tjänster, diagnostik och plattformsaktivitet) kan öka lagrings- och nätverkstrafiken, vilket påverkar kostnader och koldioxidutsläpp.
- Se till att du samlar in och behåller endast nödvändiga loggdata för att stödja dina krav. Konfigurera datainsamlingsregler för dina AKS-arbetsbelastningar och implementera designöverväganden för att optimera dina Log Analytics-kostnader.
Cachelagrade statiska data
Att använda Content Delivery Network (CDN) är en hållbar metod för att optimera nätverkstrafiken eftersom det minskar dataflytten i ett nätverk. Den minimerar svarstiden genom att lagra statiska data som ofta läses närmare användarna och minskar nätverkstrafiken och serverbelastningen.
- Se till att du följer metodtipsen för CDN.
- Överväg att använda Azure CDN för att sänka den förbrukade bandbredden och hålla kostnaderna nere.
Säkerhet
Utforska det här avsnittet om du vill veta mer om rekommendationerna som leder till en hållbar säkerhetsstatus i rätt storlek.
Utvärdera om TLS-avslutning ska användas
Transport Layer Security (TLS) säkerställer att alla data som skickas mellan webbservern och webbläsare förblir privata och krypterade. Att avsluta och återupprätta TLS ökar dock processoranvändningen och kan vara onödigt i vissa arkitekturer. En balanserad säkerhetsnivå kan erbjuda en mer hållbar och energieffektiv arbetsbelastning, medan en högre säkerhetsnivå kan öka kraven på beräkningsresurser.
- Granska informationen om TLS-avslutning när du använder Application Gateway eller Azure Front Door. Avgör om du kan avsluta TLS vid din gränsgateway och fortsätta med icke-TLS till lastbalanseraren och arbetsbelastningen för arbetsbelastningen.
Använda molnbaserade nätverkssäkerhetsverktyg och -kontroller
Azure Front Door och Application Gateway hjälper till att hantera trafik från webbprogram, medan Azure Web Application Firewall ger skydd mot OWASP:s 10 främsta attacker och belastningsutgjutning av dåliga robotar vid nätverksgränsen. Dessa funktioner hjälper till att ta bort onödig dataöverföring och minska belastningen på molninfrastrukturen med lägre bandbredd och färre infrastrukturkrav.
- Använd Application Gateway Ingress Controller (AGIC) i AKS för att filtrera och avlasta trafik vid nätverksgränsen från att nå ditt ursprung för att minska energiförbrukningen och koldioxidutsläppen.
Sök efter sårbarheter
Många attacker mot molninfrastrukturen syftar till att missbruka distribuerade resurser för angriparens direkta vinst, vilket leder till en onödig ökning av användning och kostnader. Verktyg för sårbarhetsgenomsökning hjälper till att minimera möjligheterna för angripare och minimera eventuell skadlig användning av resurser.
- Följ rekommendationerna från Microsoft Defender för molnet.
- Kör automatiserade verktyg för sårbarhetsgenomsökning, till exempel Defender för containrar, för att undvika onödig resursanvändning. De här verktygen hjälper dig att identifiera sårbarheter i dina bilder och minimera fönstret med möjligheter för angripare.
Nästa steg
Azure Kubernetes Service