In dit voorbeeldscenario ziet u een voorbeeld van een bestaande workload die oorspronkelijk is ontworpen voor uitvoering op Kubernetes, maar kan worden uitgevoerd in Azure Container Apps. Azure Container Apps is geschikt voor brownfield-workloads waarbij teams complexe infrastructuur en containerindeling willen vereenvoudigen. Met de voorbeeldworkload wordt een containertoepassing voor microservices uitgevoerd.
In het voorbeeld wordt de workload gebruikt in de microservicesarchitectuur in Azure Kubernetes Service en wordt deze opnieuw gehost in Azure Container Apps als toepassingsplatform.
Tip
De architectuur wordt ondersteund door een voorbeeld van een implementatie die enkele ontwerpopties illustreert die in dit artikel worden beschreven.
Architectuur
Een Visio-bestand van deze architectuur downloaden.
In dit scenario worden de containerinstallatiekopieën afkomstig van Azure Container Registry en geïmplementeerd in een Container Apps-omgeving.
De services die dezelfde omgeving delen, profiteren van:
- Interne toegangsbeheerobjecten en servicedetectie
- Eén Log Analytics-werkruimte voor runtimelogboekregistratie
- Veilig beheer van geheimen en certificaten
De container-app van de werkstroomservice wordt uitgevoerd in één revisiemodus. Een container-app die wordt uitgevoerd in de modus voor één revisie, heeft één revisie, ondersteund door nul-veel replica's. Een replica bestaat uit de toepassingscontainer en eventuele vereiste sidecarcontainers. In dit voorbeeld wordt geen gebruikgemaakt van sidecar-containers. Daarom vertegenwoordigt elke container-app-replica één container. Omdat in dit voorbeeld geen schaalaanpassing wordt gebruikt, wordt slechts één replica uitgevoerd voor elke container-app.
De werkstroom maakt gebruik van een hybride benadering voor het beheren van geheimen. Beheerde identiteiten worden gebruikt in de services waarbij voor een dergelijke implementatie geen codewijzigingen zijn vereist. De Drone Scheduler- en Delivery-services maken gebruik van door de gebruiker toegewezen beheerde identiteiten om te verifiëren met Azure Key Vault voor toegang tot de geheimen die daar zijn opgeslagen. De resterende services slaan geheimen op via de Container Apps-service op toepassingsniveau.
Dit diagram illustreert de runtime-architectuur voor de oplossing.
Een Visio-bestand van deze architectuur downloaden.
Gegevensstroom
- Opnameservice: ontvangt clientaanvragen, buffert deze en verzendt deze via Azure Service Bus naar de werkstroomservice.
- Werkstroomservice: verbruikt berichten van Azure Service Bus en verzendt deze naar onderliggende services.
- Pakketservice: beheert pakketten.
- Drone scheduler service: plant drones en bewaakt drones tijdens de vlucht.
- Leveringsservice: Beheert leveringen die gepland of in transit zijn gepland.
Onderdelen
De droneleveringsservice maakt gebruik van een reeks Azure-services in combinatie met elkaar.
Azure Container Apps
Azure Container Apps is het primaire onderdeel.
Deze functies vervangen veel van de complexiteit van de vorige AKS-architectuur:
- Ingebouwde servicedetectie
- Volledig beheerde HTTP- en HTTP/2-eindpunten
- Geïntegreerde taakverdeling
- Logboekregistratie en controle
- Automatisch schalen op basis van HTTP-verkeer of gebeurtenissen mogelijk gemaakt door KEDA (Op Kubernetes gebaseerde gebeurtenisgestuurde automatische schaalaanpassing)
- Toepassingsupgrades en versiebeheer
Externe opslag en andere onderdelen
Azure Key Vault-service voor het veilig opslaan en openen van geheimen, zoals API-sleutels, wachtwoorden en certificaten.
Azure Container Registry slaat privécontainerinstallatiekopieën op. U kunt ook andere containerregisters zoals Docker Hub gebruiken.
Azure Cosmos DB slaat gegevens op met behulp van de opensource Azure Cosmos DB voor MongoDB. Microservices zijn doorgaans staatloos en schrijven hun status naar externe gegevensarchieven. Azure Cosmos DB is een NoSQL-database met opensource-API's voor MongoDB en Cassandra.
Azure Service Bus biedt betrouwbare cloudberichten als een service en eenvoudige hybride integratie. Service Bus biedt ondersteuning voor asynchrone berichtpatronen die gebruikelijk zijn voor microservicestoepassingen.
Azure Cache voor Redis voegt een cachelaag toe aan de toepassingsarchitectuur om de snelheid en prestaties voor zware verkeersbelastingen te verbeteren.
Azure Monitor verzamelt en slaat metrische gegevens en logboeken van de toepassing op. Gebruik deze gegevens om de toepassing te bewaken, waarschuwingen en dashboards in te stellen en hoofdoorzaakanalyse van fouten uit te voeren. In dit scenario wordt een Log Analytics-werkruimte gebruikt voor uitgebreide bewaking van de infrastructuur en toepassing.
Application Insights biedt uitbreidbaar beheer van toepassingsprestaties (APM) en bewaking voor de services. Elke service wordt geïnstrueerd met de Application Insights SDK om de app te bewaken en de gegevens naar Azure Monitor te leiden.
Bicep-sjablonen voor het configureren en implementeren van de toepassingen.
Alternatieven
Een alternatief scenario van dit voorbeeld is de Fabrikam Drone Delivery-toepassing met behulp van Kubernetes, die beschikbaar is op GitHub in de Azure Kubernetes Service (AKS) Fabrikam Drone Delivery-opslagplaats .
Scenariodetails
Uw bedrijf kan de implementatie en het beheer van microservicecontainers vereenvoudigen met behulp van Azure Container Apps. Container Apps biedt een volledig beheerde serverloze omgeving voor het bouwen en implementeren van moderne toepassingen.
Fabrikam, Inc. (een fictief bedrijf) implementeert een toepassing voor het bezorgen van drones waarbij gebruikers een drone aanvragen om goederen op te halen voor levering. Wanneer een klant een datum en tijd opgeeft waarop het pakketje moet worden opgehaald, wordt er een drone toegewezen en de gebruiker op de hoogte gesteld van de geschatte levertijd.
De microservicestoepassing is geïmplementeerd in een AKS-cluster (Azure Kubernetes Service). Maar het Fabrikam-team profiteerde niet van de geavanceerde of platformspecifieke AKS-functies. Ze hebben de toepassing uiteindelijk zonder veel overhead gemigreerd naar Azure Container Apps. Door hun oplossing over te zetten naar Azure Container Apps, kon Fabrikam het volgende doen:
- Migreer de toepassing bijna als zodanig: er zijn zeer minimale codewijzigingen vereist bij het verplaatsen van hun toepassing van AKS naar Azure Container Apps.
- Implementeer zowel infrastructuur als de workload met Bicep-sjablonen: er waren geen Kubernetes YAML-manifesten nodig om hun toepassingscontainers te implementeren.
- De toepassing beschikbaar maken via beheerde toegangsbeheerobjecten: ingebouwde ondersteuning voor extern, https-toegangsbeheerobject om de opnameservice beschikbaar te maken, heeft de noodzaak voor het configureren van hun eigen inkomend verkeer verwijderd.
- Containerinstallatiekopieën ophalen uit ACR (Azure Container Registry): Voor Azure Container Apps is geen specifieke basisinstallatiekopie of -register vereist.
- Levenscyclus van toepassingen beheren: de revisiefunctie biedt ondersteuning voor het uitvoeren van meerdere revisies van een bepaalde container-app en het splitsen van verkeer voor A/B-tests of Blauw/Groen-implementatiescenario's.
- Beheerde identiteit gebruiken: het Fabrikam-team kan een beheerde identiteit gebruiken om te verifiëren met Azure Key Vault en Azure Container Registry.
Potentiële gebruikscases
- Implementeer een op brownfield microservice gebaseerde toepassing in een PaaS (Platform as a Service) om het beheer te vereenvoudigen en de complexiteit van het uitvoeren van een containerorchestrator te voorkomen.
- Optimaliseer bewerkingen en beheer door containerservices te migreren naar een platform dat systeemeigen schaal naar nul ondersteunt.
- Voer een langlopend achtergrondproces uit, zoals de werkstroomservice in één revisiemodus.
Andere veelgebruikte toepassingen van Container Apps zijn:
- Workloads in containers uitvoeren op een serverloos platform op basis van verbruik.
- Toepassingen automatisch schalen op basis van HTTP/HTTPS-verkeer en/of gebeurtenisgestuurde triggers die worden ondersteund door KEDA
- Minimale onderhoudsoverhead voor toepassingen in containers
- API-eindpunten implementeren
- Toepassingen voor achtergrondverwerking hosten
- Gebeurtenisgestuurde verwerking afhandelen
Overwegingen
Met deze overwegingen worden de pijlers van het Azure Well-Architected Framework geïmplementeerd. Dit is een set richtlijnen die kunnen worden gebruikt om de kwaliteit van een workload te verbeteren. Zie Microsoft Azure Well-Architected Framework voor meer informatie.
Beschikbaarheid
Met Container Apps kunt u de toepassingen eenvoudiger implementeren, beheren, onderhouden en bewaken. U kunt de beschikbaarheid garanderen via de volgende belangrijke functies:
- Met revisies kunt u toepassingsupdates implementeren zonder uitvaltijd. U kunt revisies gebruiken om de implementatie van toepassingsupdates te beheren en verkeer te splitsen tussen de revisies ter ondersteuning van blauw-groene implementaties en A/B-tests (momenteel niet gebruikt in deze voorbeeldworkload).
- Met end-to-end waarneembaarheidsfuncties van Container Apps hebt u een holistische weergave van uw actieve toepassingen. Container Apps is geïntegreerd met Azure Monitor en Log Analytics, waarmee u de uitvoering van container-apps kunt bijhouden en waarschuwingen kunt instellen op basis van metrische gegevens en gebeurtenissen.
- Wanneer een app onverwacht wordt beëindigd, wordt deze automatisch opnieuw gestart door de Container Apps-service.
- U kunt regels voor automatisch schalen inschakelen om te voldoen aan de vraag naarmate verkeer en workloads toenemen.
- De dynamische taakverdelingsfuncties van Container Apps optimaliseren de prestaties (hoewel ze niet worden gebruikt in deze voorbeeldworkload).
Operationele uitmuntendheid
Operationele uitmuntendheid omvat de operationele processen die een toepassing implementeren en deze in productie houden. Zie Overzicht van de operationele uitmuntendheidpijler voor meer informatie.
Voor operationele uitmuntendheid biedt de Container Apps-service de volgende functies:
- GitHub Actions-integratie voor het instellen van geautomatiseerde CI/CD-implementaties.
- Modus voor meerdere revisies met verkeer splitsen voor het testen van wijzigingen in uw toepassingscode en schaalregels.
- Integratie met Azure Monitor en Log Analytics om inzicht te bieden in uw containertoepassing.
Prestatie-efficiëntie
Prestatie-efficiëntie is de mogelijkheid om op efficiënte wijze uw werkbelasting te schalen om te voldoen aan de vereisten die gebruikers eraan stellen. Zie overzicht van de pijler Prestatie-efficiëntie voor meer informatie.
Prestatieoverwegingen in deze oplossing:
- De workload wordt verdeeld over meerdere microservicetoepassingen.
- Elke microservice is onafhankelijk en deelt niets met de andere microservices, zodat ze onafhankelijk kunnen worden geschaald.
- Automatisch schalen kan worden ingeschakeld wanneer de werkbelasting toeneemt.
- Aanvragen worden dynamisch verdeeld.
- Metrische gegevens, waaronder CPU- en geheugengebruik, bandbreedtegegevens en opslaggebruik, zijn beschikbaar via Azure Monitor.
- Log Analytics biedt logboekaggregatie om informatie te verzamelen in elke Container Apps-omgeving.
Betrouwbaarheid
Betrouwbaarheid zorgt ervoor dat uw toepassing kan voldoen aan de toezeggingen die u aan uw klanten hebt gedaan. Zie Overzicht van de betrouwbaarheidspijler voor meer informatie.
Container Apps probeert mislukte containers opnieuw op te starten en verwijdert hardware van gebruikers. Microsoft verwerkt tijdelijke fouten en zorgt voor hoge beschikbaarheid van back-upresources.
Met prestatiebewaking via Log Analytics en Azure Monitor kunt u de toepassing evalueren onder belasting. Metrische gegevens en logboekinformatie bieden u de gegevens die nodig zijn om trends te herkennen om fouten te voorkomen en hoofdoorzaakanalyse van fouten uit te voeren wanneer deze optreden.
Beveiliging
Beveiliging biedt garanties tegen opzettelijke aanvallen en misbruik van uw waardevolle gegevens en systemen. Zie Overzicht van de beveiligingspijler voor meer informatie.
Geheimen
- Uw container-app kan gevoelige waarden opslaan en ophalen als geheimen. Nadat een geheim is gedefinieerd voor de container-app, is het beschikbaar voor gebruik door de toepassing en eventuele bijbehorende schaalregels. Als u in de modus voor meerdere revisies werkt, delen alle revisies dezelfde geheimen. Omdat geheimen worden beschouwd als een wijziging in het toepassingsbereik, wordt er geen nieuwe revisie gemaakt als u de waarde van een geheim wijzigt. Voor actieve revisies om de nieuwe geheime waarde te laden, moet u deze echter opnieuw starten. In dit scenario worden waarden voor toepassings- en omgevingsvariabelen gebruikt.
- Omgevingsvariabelen: gevoelige waarden kunnen veilig worden opgeslagen op toepassingsniveau. Wanneer omgevingsvariabelen worden gewijzigd, zorgt de container-app voor een nieuwe revisie.
Netwerkbeveiliging
- Inkomend verkeer: als u externe toegang wilt beperken, wordt alleen de opnameservice geconfigureerd voor extern inkomend verkeer. De back-endservices zijn alleen toegankelijk via het interne virtuele netwerk in de Container Apps-omgeving. Maak waar nodig alleen services beschikbaar op internet. Omdat deze architectuur gebruikmaakt van de ingebouwde functie voor inkomend verkeer, biedt deze oplossing niet de mogelijkheid om uw inkomend punt achter een Web Application Firewall (WAF) volledig te positioneren of om deze op te nemen in DDoS Protection-plannen. Alle webgerichte workloads moeten worden voorzien van een webtoepassingsfirewall.
- Virtueel netwerk: wanneer u een omgeving maakt, kunt u een aangepast virtueel netwerk opgeven; anders wordt automatisch een virtueel netwerk gegenereerd en beheerd door Microsoft. U kunt dit door Microsoft beheerde virtuele netwerk niet manipuleren, bijvoorbeeld door netwerkbeveiligingsgroepen (NSG's) toe te voegen of tunneling van verkeer naar een uitgaande firewall af te dwingen. In dit voorbeeld wordt een automatisch gegenereerd virtueel netwerk gebruikt.
Zie Netwerkarchitectuur in Azure Container Apps voor meer opties voor netwerktopologie.
Workloadidentiteiten
- Container Apps ondersteunt door Microsoft Entra beheerde identiteiten, zodat uw app zichzelf kan verifiëren bij andere resources die worden beveiligd door Microsoft Entra-id, zoals Azure Key Vault, zonder referenties in uw container-app te beheren. Een container-app kan door het systeem toegewezen, door de gebruiker toegewezen of beide typen beheerde identiteiten gebruiken. Voor services die ad-verificatie niet ondersteunen, moet u geheimen opslaan in Azure Key Vault en een beheerde identiteit gebruiken om toegang te krijgen tot de geheimen.
- Beheerde identiteiten gebruiken voor toegang tot Azure Container Registry. Met Azure Container Apps kunt u een andere beheerde identiteit gebruiken voor uw workload dan voor toegang tot containerregisters. Deze aanpak wordt aanbevolen voor gedetailleerde toegangsbeheer voor uw beheerde identiteiten.
Kostenoptimalisatie
- In de sectie Kosten in het Microsoft Azure Well-Architected Framework worden kostenoverwegingen beschreven. Gebruik de Azure-prijscalculator om de kosten voor uw specifieke scenario te schatten.
- Azure Container Apps heeft een prijsmodel op basis van verbruik.
- Azure Container Apps biedt ondersteuning voor schalen naar nul. Wanneer een container-app naar nul wordt geschaald, worden er geen kosten in rekening gebracht.
- In dit scenario zijn Azure Cosmos DB en Azure Cache voor Redis de belangrijkste kostenfactoren.
Dit scenario implementeren
Volg de stappen in de README.md in de voorbeeldopslagplaats van Azure Container Apps.
Medewerkers
Microsoft onderhoudt dit artikel. De tekst is oorspronkelijk geschreven door de volgende Inzenders.
Hoofdauteur:
- Catherine Bundy | Technische schrijver
Volgende stappen
- Documentatie voor Azure Container Apps
- Azure Kubernetes Service (AKS) Fabrikam Drone Delivery GitHub-opslagplaats