Det här exempelscenariot visar ett exempel på en befintlig arbetsbelastning som ursprungligen utformades för att köras på Kubernetes kan i stället köras i Azure Container Apps. Azure Container Apps passar bra för brownfield-arbetsbelastningar där teamen vill förenkla komplex infrastruktur och containerorkestrering. Exempelarbetsbelastningen kör ett program för containerbaserade mikrotjänster.
Exemplet tar den arbetsbelastning som används i Mikrotjänstarkitektur i Azure Kubernetes Service och byter värd till den i Azure Container Apps som programplattform.
Dricks
Arkitekturen backas upp av ett exempelimplementering som illustrerar några designval som beskrivs i den här artikeln.
Arkitektur
Ladda ned en Visio-fil med den här arkitekturen.
I det här scenariot kommer containeravbildningarna från Azure Container Registry och distribueras till en Container Apps-miljö.
Tjänsterna som delar samma miljö drar nytta av följande:
- Intern ingress- och tjänstidentifiering
- En enda Log Analytics-arbetsyta för körningsloggning
- Säker hantering av hemligheter och certifikat
Containerappen för arbetsflödestjänsten körs i enkelt revisionsläge. En containerapp som körs i enkelt revisionsläge har en enskild revision som backas upp av noll-många repliker. En replik består av programcontainern och alla nödvändiga sidovagnscontainrar. Det här exemplet använder inte sidovagnscontainrar, därför representerar varje containerappreplik en enda container. Eftersom det här exemplet inte använder skalning kommer det bara att finnas en replik som körs för varje containerapp.
Arbetsflödet använder en hybridmetod för att hantera hemligheter. Hanterade identiteter används i de tjänster där sådan implementering inte krävde några kodändringar. Tjänsterna Drone Scheduler och Delivery använder användartilldelade hanterade identiteter för att autentisera med Azure Key Vault för att få åtkomst till hemligheterna som lagras där. De återstående tjänsterna lagrar hemligheter via Container Apps-tjänsten på programnivå.
Det här diagrammet illustrerar körningsarkitekturen för lösningen.
Ladda ned en Visio-fil med den här arkitekturen.
Dataflöde
- Inmatningstjänst: Tar emot klientbegäranden, buffrar dem och skickar dem via Azure Service Bus till arbetsflödestjänsten.
- Arbetsflödestjänst: Förbrukar meddelanden från Azure Service Bus och skickar dem till underliggande tjänster.
- Pakettjänst: Hanterar paket.
- Drone Scheduler Service: Schemalägger drönare och övervakar drönare under flygning.
- Leveranstjänst: Hanterar leveranser som är schemalagda eller under överföring.
Komponenter
Drönarleveranstjänsten använder en serie Azure-tjänster tillsammans med varandra.
Azure Container Apps
Azure Container Apps är den primära komponenten.
Många av komplexiteterna i den tidigare AKS-arkitekturen ersätts av följande funktioner:
- Inbyggd tjänstidentifiering
- Fullständigt hanterade HTTP- och HTTP/2-slutpunkter
- Integrerad belastningsutjämning
- Loggning och övervakning
- Autoskalning baserat på HTTP-trafik eller händelser som drivs av KEDA
- Programuppgraderingar och versionshantering
Extern lagring och andra komponenter
Azure Key Vault-tjänsten för säker lagring och åtkomst till hemligheter, till exempel API-nycklar, lösenord och certifikat.
Azure Container Registry lagrar privata containeravbildningar. Du kan också använda andra containerregister som Docker Hub.
Azure Cosmos DB lagrar data med hjälp av Azure Cosmos DB med öppen källkod för MongoDB. Mikrotjänster är vanligtvis tillståndslösa och skriver sitt tillstånd till externa datalager. Azure Cosmos DB är en NoSQL-databas med API:er med öppen källkod för MongoDB och Cassandra.
Azure Service Bus erbjuder tillförlitliga molnmeddelanden som en tjänst och enkel hybridintegrering. Service Bus stöder asynkrona meddelandemönster som är vanliga med mikrotjänstprogram.
Azure Cache for Redis lägger till ett cachelagringslager i programarkitekturen för att förbättra hastighet och prestanda för tung trafikbelastning.
Azure Monitor samlar in och lagrar mått och loggar från programmet. Använd dessa data för att övervaka programmet, konfigurera aviseringar och instrumentpaneler och utföra rotorsaksanalys av fel. Det här scenariot använder en Log Analytics-arbetsyta för omfattande övervakning av infrastrukturen och programmet.
Application Insights tillhandahåller utökningsbar programprestandahantering (APM) och övervakning för tjänsterna. Varje tjänst instrumenteras med Application Insights SDK för att övervaka appen och dirigera data till Azure Monitor.
Bicep-mallar för att konfigurera och distribuera programmen.
Alternativ
Ett annat scenario i det här exemplet är Fabrikam Drone Delivery-programmet med Kubernetes, som är tillgängligt på GitHub i Azure Kubernetes Service (AKS) Fabrikam Drone Delivery-lagringsplatsen .
Information om scenario
Ditt företag kan förenkla distributionen och hanteringen av mikrotjänstcontainrar med hjälp av Azure Container Apps. Container Apps tillhandahåller en fullständigt hanterad serverlös miljö för att skapa och distribuera moderna program.
Fabrikam, Inc. (ett fiktivt företag) har implementerat ett drönarleveransprogram där användare kan begära en drönare för att hämta varor för leverans. När en kund schemalägger en hämtning tilldelar ett serverdelsystem en drönare och meddelar användaren en uppskattad leveranstid.
Mikrotjänstprogrammet distribuerades till ett AKS-kluster (Azure Kubernetes Service). Men Fabrikam-teamet utnyttjade inte de avancerade eller plattformsspecifika AKS-funktionerna. De migrerade så småningom programmet till Azure Container Apps utan större omkostnader. Genom att portera lösningen till Azure Container Apps kunde Fabrikam:
- Migrera programmet nästan som det är: Mycket minimala kodändringar krävdes när programmet flyttades från AKS till Azure Container Apps.
- Distribuera både infrastrukturen och arbetsbelastningen med Bicep-mallar: Inga Kubernetes YAML-manifest behövdes för att distribuera sina programcontainrar.
- Exponera programmet via hanterad ingress: Inbyggt stöd för extern, https-baserad ingress för att exponera inmatningstjänsten har tagit bort behovet av att konfigurera sin egen ingress.
- Hämta containeravbildningar från ACR: Azure Container Apps kräver ingen specifik basavbildning eller ett specifikt register.
- Hantera programmets livscykel: Revisionsfunktionen stöder körning av flera revisioner av en viss containerapp och trafikdelning mellan dem för A/B-testning eller blå/gröna distributionsscenarier.
- Använd hanterad identitet: Fabrikam-teamet kunde använda en hanterad identitet för att autentisera med Azure Key Vault och Azure Container Registry.
Potentiella användningsfall
- Distribuera ett brownfield-mikrotjänstbaserat program till en PaaS-tjänst (plattform som en tjänst) för att undvika driftkomplexiteten att hantera en containerorkestrerare.
- Optimera åtgärder och hantering genom att migrera containerbaserade tjänster till en plattform som stöder intern skalning till noll.
- Kör en tidskrävande bakgrundsprocess, till exempel arbetsflödestjänsten i enkelt revisionsläge.
Andra vanliga användningsområden för Container Apps är:
- Köra containerbaserade arbetsbelastningar på en serverlös, förbrukningsbaserad plattform.
- Autoskalningsprogram baserat på HTTP/HTTPS-trafik och/eller händelsedrivna utlösare som stöds av KEDA
- Minimera underhållskostnader för containerbaserade program
- Distribuera API-slutpunkter
- Vara värd för program för bearbetning i bakgrunden
- Hantera händelsedriven bearbetning
Att tänka på
Dessa överväganden implementerar grundpelarna i Azure Well-Architected Framework, som är en uppsättning vägledande grundsatser som kan användas för att förbättra kvaliteten på en arbetsbelastning. Mer information finns i Microsoft Azure Well-Architected Framework.
Tillgänglighet
Med Container Apps kan du enklare distribuera, hantera, underhålla och övervaka programmen. Tillgänglighet kan säkerställas med följande viktiga funktioner:
- Revisioner hjälper dig att distribuera programuppdateringar utan driftstopp. Du kan använda revisioner för att hantera distributionen av programuppdateringar och dela trafik mellan revisionerna för att stödja blå/gröna distributioner och A/B-testning (används för närvarande inte i den här exempelarbetsbelastningen).
- Med funktioner för slutpunkt till slutpunkt-observabilitet i Container Apps har du en holistisk vy över dina program som körs. Container Apps är integrerat med Azure Monitor och Log Analytics, vilket gör att du kan spåra körning av containerappar och ställa in aviseringar baserat på mått och händelser.
- När en app oväntat avslutas startar Container Apps-tjänsten om den automatiskt.
- Du kan aktivera regler för automatisk skalning för att möta efterfrågan när trafiken och arbetsbelastningarna ökar.
- Prestanda optimeras av funktionerna för dynamisk belastningsutjämning i Container Apps (används för närvarande inte i den här exempelarbetsbelastningen).
Driftsäkerhet
Driftskvalitet omfattar de driftsprocesser som distribuerar ett program och håller det igång i produktion. Mer information finns i Översikt över grundpelare för driftskvalitet.
Container Apps-tjänsten erbjuder följande funktioner för att uppnå driftseffektivitet:
- GitHub Actions-integrering för att konfigurera automatiserade CI/CD-distributioner.
- Läge för flera revisioner med trafikdelning för att testa ändringar i programkoden och skalningsregler.
- Integrering med Azure Monitor och Log Analytics för att ge insikter om ditt containerbaserade program.
Prestandaeffektivitet
Prestandaeffektivitet handlar om att effektivt skala arbetsbelastningen baserat på användarnas behov. Mer information finns i Översikt över grundpelare för prestandaeffektivitet.
Prestandaöverväganden i den här lösningen:
- Arbetsbelastningen distribueras mellan flera mikrotjänstprogram.
- Varje mikrotjänst är oberoende och delar ingenting med de andra mikrotjänsterna, så att de kan skalas separat.
- Autoskalning kan aktiveras när arbetsbelastningen ökar.
- Begäranden lastbalanseras dynamiskt.
- Mått, inklusive processor- och minnesanvändning, bandbreddsinformation och lagringsanvändning, är tillgängliga via Azure Monitor.
- Log Analytics tillhandahåller loggaggregering för att samla in information i varje Container Apps-miljö.
Tillförlitlighet
Tillförlitlighet säkerställer att ditt program kan uppfylla de åtaganden du gör gentemot dina kunder. Mer information finns i Översikt över tillförlitlighetspelare.
Container Apps försöker starta om containrar som misslyckas och avlägsnar maskinvara från användare. Tillfälliga fel och hög tillgänglighet för säkerhetskopiering av beräkningsresurser hanteras av Microsoft.
Med prestandaövervakning via Log Analytics och Azure Monitor kan du utvärdera programmet under belastning. Mått och loggningsinformation ger dig de data som behövs för att identifiera trender för att förhindra fel och utföra rotorsaksanalys av fel när de inträffar.
Säkerhet
Säkerhet ger garantier mot avsiktliga attacker och missbruk av dina värdefulla data och system. Mer information finns i Översikt över säkerhetspelare.
Hemligheter
- Containerappen kan lagra och hämta känsliga värden som hemligheter. När en hemlighet har definierats för containerappen är den tillgänglig för användning av programmet och eventuella associerade skalningsregler. Om du kör i läget för flera revisioner delar alla revisioner samma hemligheter. Eftersom hemligheter anses vara en ändring av programomfattningen skapas ingen ny revision om du ändrar värdet för en hemlighet. Men för att eventuella revisioner som körs ska kunna läsa in det nya hemliga värdet måste du starta om dem. I det här scenariot används värden för program- och miljövariabler.
- Miljövariabler: känsliga värden kan lagras på ett säkert sätt på programnivå. När miljövariabler ändras skapar containerappen en ny revision.
Nätverkssäkerhet
- Ingress: För att begränsa den externa åtkomsten är endast inmatningstjänsten konfigurerad för extern ingress. Serverdelstjänsterna är endast tillgängliga via det interna virtuella nätverket i Container Apps-miljön. Exponera endast tjänster till Internet där det behövs. Eftersom den här arkitekturen använder den inbyggda externa ingressfunktionen erbjuder den här lösningen inte möjligheten att helt placera ingresspunkten bakom en brandvägg för webbprogram (WAF) eller inkludera den i DDoS Protection-planer. Alla webbanslutna arbetsbelastningar ska frontas med en brandvägg för webbprogram.
- Virtuellt nätverk: När du skapar en miljö kan du ange ett anpassat virtuellt nätverk. Annars genereras och hanteras ett virtuellt nätverk automatiskt av Microsoft. Du kan inte ändra det här Microsoft-hanterade virtuella nätverket, till exempel genom att lägga till nätverkssäkerhetsgrupper (NSG:er) eller tvinga tunneltrafik till en utgående brandvägg. I det här exemplet används ett automatiskt genererat virtuellt nätverk.
Fler alternativ för nätverkstopologi finns i Nätverksarkitektur i Azure Container Apps.
Arbetsbelastningsidentiteter
- Container Apps stöder Microsoft Entra-hanterade identiteter som gör att din app kan autentisera sig till andra resurser som skyddas av Microsoft Entra-ID, till exempel Azure Key Vault, utan att hantera autentiseringsuppgifter i containerappen. En containerapp kan använda systemtilldelade, användartilldelade eller båda typerna av hanterade identiteter. För tjänster som inte stöder AD-autentisering bör du lagra hemligheter i Azure Key Vault och använda en hanterad identitet för att komma åt hemligheterna.
- Använd hanterade identiteter för Åtkomst till Azure Container Registry. Azure Container Apps stöder användning av en annan hanterad identitet för arbetsbelastningen än åtkomst till containerregistret, vilket rekommenderas när du vill uppnå detaljerade åtkomstkontroller för dina hanterade identiteter.
Kostnadsoptimering
- I avsnittet Kostnad i Microsoft Azure Well-Architected Framework beskrivs kostnadsöverväganden. Använd Priskalkylatorn för Azure för att beräkna kostnaderna för ditt specifika scenario.
- Azure Container Apps har en förbrukningsbaserad prismodell.
- Azure Container Apps stöder skalning till noll. När en containerapp skalas till noll debiteras ingen kostnad.
- I det här scenariot är Azure Cosmos DB och Azure Cache for Redis de viktigaste kostnadsdrivrutinerna.
Distribuera det här scenariot
Följ stegen i README.md i exempellagringsplatsen för Azure Container Apps-scenariot för att distribuera det här scenariot.
Deltagare
Den här artikeln underhålls av Microsoft. Det har ursprungligen skrivits av följande medarbetare.
Huvudförfattare:
- Catherine Bundy | Teknisk författare
Nästa steg
- Dokumentation om Azure Container Apps
- Azure Kubernetes Service (AKS) Fabrikam Drone Delivery GitHub-lagringsplats