Zelfstudie: Een toepassing voorbereiden voor Azure Kubernetes Service (AKS)

Tip

Kort antwoord: Gebruik Kompose voor snelle scaffolding, Move2Kube voor bredere modernisering, Docker Compose Bridge als u Docker Desktop en Podman gebruikt om te exporteren vanuit actieve containers of pods. Pak vervolgens de resultaten in met Helm of Kustomize en herhaal met Skaffold of Tilt.

Belangrijkste hulpprogramma's: Kompose, Move2Kube, Docker Compose Bridge, Podman, Helm, Kustomize, Skaffold, Tilt en AI-ondersteunde conversie.

In deze zelfstudie bereidt u een toepassing met meerdere containers voor voor gebruik in Kubernetes. U kunt deze zelfstudie gebruiken, ongeacht of u begint met een nieuwe voorbeeld-app of docker Compose-concepten aanpast voor een app die u wilt migreren naar Azure Kubernetes Service (AKS). U gebruikt bestaande ontwikkelhulpprogramma's zoals Docker Compose om de toepassing lokaal te bouwen en te testen. U leert het volgende:

  • Kloon een voorbeeldtoepassingsbron uit GitHub.
  • Maak een containerafbeelding van de voorbeeldapplicatiebron.
  • Test de toepassing met meerdere containers in een lokale Docker-omgeving.

Important

Opnieuw beginnen? Gebruik deze zelfstudie om een voorbeeld-app voor AKS voor te bereiden en te testen. Gebruikt u Docker Compose al? Zie de Kubernetes-documentatie voor het migreren van Docker Compose naar Kubernetes en het overzicht van de AKS-migratie voor bredere planningsrichtlijnen.

Als u dit allemaal hebt gedaan, kunt u de volgende toepassing uitvoeren in uw lokale ontwikkelomgeving:

Schermopname met de Azure Store Front-app die lokaal wordt geopend in een lokale webbrowser.

In latere zelfstudies uploadt u de containerafbeelding naar een Azure Container Registry (ACR) en implementeert u deze vervolgens in een AKS-cluster.

Voordat u begint

In deze handleiding wordt ervan uitgegaan dat u een basiskennis hebt van de kernconcepten van Docker, zoals containers, containerimages en docker opdrachten. Zie Aan de slag met Docker voor een uitleg van de basisprincipes van containers.

Voor deze zelfstudie hebt u een lokale Docker-ontwikkelomgeving met Linux-containers nodig. Docker biedt pakketten die Docker configureren op een Mac, Windows of Linux systeem.

Notitie

Azure Cloud Shell bevat niet de Docker-onderdelen die nodig zijn om elke stap in deze zelfstudies te voltooien. Daarom raden wij u aan een volledige Docker-ontwikkelomgeving te gebruiken.


Toepassingscode ophalen

De sample-toepassing die in deze zelfstudie wordt gebruikt, is een eenvoudige store-front-app, waaronder de volgende Kubernetes-implementaties en -services:

Schermopname van Azure Store-voorbeeldarchitectuur.

  • Webwinkel: Webtoepassing voor klanten om producten te bekijken en bestellingen te plaatsen.
  • Productservice: toont productgegevens.
  • Orderservice: Orders plaatsen.
  • RabbitMQ: Berichtenwachtrij voor een orderwachtrij.
  1. Maak een map op uw computer en schakel over naar die map in uw terminalsessie, zoals Bash. In dit voorbeeld wordt een map met de naam demorepo gebruikt, maar u kunt elke gewenste naam gebruiken.

    mkdir demorepo
    cd demorepo
    
  2. Gebruik Git om de voorbeeldtoepassing te klonen naar uw ontwikkelomgeving.

    git clone https://github.com/Azure-Samples/aks-store-demo.git
    
  3. Navigeer naar de gekloonde map.

    cd aks-store-demo
    

Docker Compose-bestand controleren

De voorbeeldtoepassing die u in deze zelfstudie maakt, gebruikt het YAML-bestand docker-compose-quickstart YAML-bestand uit de repository die u hebt gekloond.

De volgende tabel bevat een overzicht van de standaardwaarden voor sleutels uit het voorbeeldbestand Opstellen, zodat u snel kunt zien welke services, poorten en afhankelijkheden in de zelfstudie worden gebruikt:

Dienst Bron Blootgestelde poort Sleutelinstellingen
RabbitMQ rabbitmq:4.3.2-management-alpine Afbeelding 15672, 5672 Standaardgebruikersnaam username, wachtwoord password
Bestelservice src/order-service 3000 Maakt verbinding met RabbitMQ op poort 5672 en maakt gebruik van wachtrij orders
Productdienst src/product-service 3002 Gebruikt AI_SERVICE_URL=http://ai-service:5001/
Winkelvoorzijde src/store-front 8080 Roept de productservice aan 3002 en bestelservice op 3000
services:
  rabbitmq:
    image: rabbitmq:4.3.2-management-alpine
    container_name: 'rabbitmq'
    restart: always
    environment:
      - "RABBITMQ_DEFAULT_USER=username"
      - "RABBITMQ_DEFAULT_PASS=password"
    ports:
      - 15672:15672
      - 5672:5672
    healthcheck:
      test: ["CMD", "rabbitmqctl", "status"]
      interval: 30s
      timeout: 10s
      retries: 5
    networks:
      - backend_services
  order-service:
    build: src/order-service
    container_name: 'order-service'
    restart: always
    ports:
      - 3000:3000
    healthcheck:
      test: ["CMD", "wget", "-O", "/dev/null", "-q", "http://order-service:3000/health"]
      interval: 30s
      timeout: 10s
      retries: 5
    environment:
      - ORDER_QUEUE_HOSTNAME=rabbitmq
      - ORDER_QUEUE_PORT=5672
      - ORDER_QUEUE_USERNAME=username
      - ORDER_QUEUE_PASSWORD=password
      - ORDER_QUEUE_NAME=orders
    networks:
      - backend_services
    depends_on:
      rabbitmq:
        condition: service_healthy
  product-service:
    build: src/product-service
    container_name: 'product-service'
    restart: always
    ports:
      - 3002:3002
    healthcheck:
      test: ["CMD", "wget", "-O", "/dev/null", "-q", "http://product-service:3002/health"]
      interval: 30s
      timeout: 10s
      retries: 5
    environment:
      - AI_SERVICE_URL=http://ai-service:5001/
    networks:
      - backend_services
  store-front:
    build: src/store-front
    container_name: 'store-front'
    restart: always
    ports:
      - 8080:8080
    healthcheck:
      test: ["CMD", "wget", "-O", "/dev/null", "-q", "http://store-front:80/health"]
      interval: 30s
      timeout: 10s
      retries: 5
    environment:
      - VUE_APP_PRODUCT_SERVICE_URL=http://product-service:3002/
      - VUE_APP_ORDER_SERVICE_URL=http://order-service:3000/
    networks:
      - backend_services
    depends_on:
      - product-service
      - order-service
networks:
  backend_services:
    driver: bridge

Containerinstallatiekopieën maken en toepassing uitvoeren

U kunt Docker Compose gebruiken om het bouwen van containerinstallatiekopieën en de implementatie van toepassingen met meerdere containers te automatiseren.

Zorg ervoor dat Docker wordt uitgevoerd in de Linux-containermodus voordat u de volgende opdrachten uitvoert.

  1. Maak vanuit de root van de gekloonde aks-store-demo-repository de containerimage, download de RabbitMQ-image en start de applicatie met de opdracht docker compose:

    docker compose -f docker-compose-quickstart.yml up -d
    
  2. Bekijk de gemaakte afbeeldingen met behulp van de docker images opdracht.

    docker images
    

    In de volgende ingekorte voorbeelduitvoer ziet u de aangemaakte afbeeldingen:

    REPOSITORY                        TAG                          IMAGE ID
    aks-store-demo-product-service    latest                       72f5cd7e6b84
    aks-store-demo-order-service      latest                       54ad5de546f9
    aks-store-demo-store-front        latest                       1125f85632ae
    ...
    
  3. Bekijk de actieve containers met behulp van de docker ps opdracht.

    docker ps
    

    In de volgende verkorte voorbeelduitvoer ziet u vier actieve containers:

    CONTAINER ID        IMAGE
    f27fe74cfd0a        aks-store-demo-product-service
    df1eaa137885        aks-store-demo-order-service
    b3ce9e496e96        aks-store-demo-store-front
    31df28627ffa        rabbitmq:4.3.2-management-alpine
    

Applicatie lokaal testen

Als u de actieve toepassing wilt zien, navigeer naar http://localhost:8080 in een lokale webbrowser. De voorbeeldtoepassing wordt dan geladen, zoals wordt weergegeven in het volgende voorbeeld:

Schermafbeelding met de Azure Store Front-app geopend in een lokale browser.

Op deze pagina kunt u producten bekijken, toevoegen aan uw winkelwagen en vervolgens een bestelling plaatsen.

Migreer uw eigen Compose-bestanden

Als u al een toepassing hebt gedefinieerd in een Docker Compose-bestand, kunt u deze zelfstudie gebruiken als referentie voor lokale validatie en vervolgens uw bestaande compose-configuratie converteren naar Kubernetes-manifesten. Gebruik hulpprogramma's zoals Kompose, Move2Kube, Docker Compose Bridge of Podman om Docker Compose-definities te converteren naar Kubernetes-resources. Zie de Kubernetes-documentatie voor het migreren van Docker Compose naar Kubernetes en het overzicht van de AKS-migratie als u ook overstapt van een andere orchestrator- of moderniseringswerkstroom voor het volledige end-to-end-conversiepad.

Een conversieprogramma kiezen

Gebruik deze tabel als u de meest voorkomende Compose-naar-Kubernetes-opties snel wilt vergelijken.

Tool Samenvatting in één regel
Kompose Snelle Compose-naar-Kubernetes-scaffold; voer kompose convert uit; reken op handmatige opschoning voor opslag en probes.
Move2Kube Bredere moderniseringswerkstroom; uitvoeren move2kube plan -s ./path && move2kube transform; zwaarder dan conversieprogramma's met één bestand.
Docker Compose Bridge Op Docker Desktop gericht conversietraject; voer docker compose bridge convert -o ./k8s/ uit; zie de Docker-documentatie voor actuele ondersteuningsdetails.
Podman YAML exporteren uit draaiende containers of pods; voer podman kube generate mypod > k8s.yaml uit; het meest geschikt voor op Podman gebaseerde workflows.
Helm Sjabloon- en pakketmanifesten voor herhaalde implementaties; voer helm create mychart uit; bij voorkeur na conversie.
Kustomize Leg omgevingsspecifieke wijzigingen over; voer kubectl apply -k . uit; bij voorkeur na de conversie.
Skaffold Bouw een Kubernetes inner dev-loop; voer skaffold init uit; geen directe converter.
Kantelen Lokale Kubernetes-ontwikkeling live bijwerken; uitvoeren tilt up; hiervoor is een werkstroom met Kubernetes-prioriteit vereist.
AI-ondersteunde conversie Stel manifesten op of vergelijk ze met AI en valideer vervolgens de uitvoer vóór de uitrol.

Welk hulpprogramma moet ik kiezen?

  • Als u een snel bewijs van concept of startersmanifesten wilt, gebruikt u Kompose.
  • Als u Docker Desktop gebruikt en een systeemeigen Docker-pad wilt, gebruikt u Docker Compose Bridge.
  • Als u een grotere migratie met meerdere services of modernisering hebt, gebruikt u Move2Kube.
  • Als u wilt exporteren vanuit actieve containers of pods, gebruikt u Podman.
  • Als u al manifesten heeft en pakketten of overlays nodig heeft, gebruik dan Helm of Kustomize.
  • Als u na de conversie een lokale Kubernetes-dev-lus nodig hebt, gebruikt u Skaffold of Tilt.
  • Als u conceptmanifesten of uitleg over migraties wilt, gebruikt u AI-hulp en valideert u het resultaat op basis van officiële Kubernetes- en AKS-richtlijnen.

Andere hulpprogramma's waarmee u rekening moet houden:

  • 8gwifi.org Kubernetes YAML Converter: handig voor snelle online experimenten met kleine Compose-bestanden.
  • Okteto: Handig als u een cloud- of externe Kubernetes-ontwikkelingslus wilt voor toepassingsteams.
  • Devtron: Handig als u een platformwerkstroom wilt rond Kubernetes-levering na conversie.
  • Portainer: handig als u een door gebruikersinterface gestuurde container en Kubernetes-beheerervaring wilt.

Uw compose-bestanden converteren

Gebruik de volgende kopieerbare opdrachten als uitgangspunt:

kompose convert
move2kube plan -s ./path && move2kube transform
docker compose bridge convert -o ./k8s/
podman kube generate mypod > k8s.yaml
skaffold init

Voorbeeld van een Kompose-conversie

Het opensource-hulpprogramma Kompose converteert algemene Docker Compose-instellingen naar Kubernetes-objecten, zoals Implementaties en Services.

  1. Installeer Kompose op Windows met de volgende opdracht:

    curl -L https://github.com/kubernetes/kompose/releases/latest/download/kompose-windows-amd64.exe -o kompose.exe
    

    Zie de installatie-instructies voor Kompose voor andere installatieopties.

  2. Voer Kompose uit vanuit de map die het docker-compose.yml bestand bevat.

    kompose convert
    
  3. Controleer de gegenereerde Kubernetes YAML-bestanden voordat u ze implementeert in AKS.

AI-ondersteunde conversie

U kunt een AI-assistent gebruiken om Kubernetes-manifesten te ontwerpen, compose-instellingen te vergelijken met Kubernetes-equivalenten of uit te leggen waarom een conversie handmatige wijzigingen vereist.

Algemene voorbeeldprompt:

Convert this docker-compose.yml into production-ready Kubernetes manifests. Use Apps/v1, move secrets to Kubernetes Secret objects, map local volumes to PersistentVolumeClaims, and add readiness and liveness probes for the web service.

Voorbeeldprompt gericht op AKS:

Convert this docker-compose.yml into AKS-ready Kubernetes manifests. Target an AKS cluster, push images to Azure Container Registry, use Apps/v1 objects, move secrets to Kubernetes Secret objects, map local volumes to Azure Files or Azure Disks-backed PersistentVolumeClaims, and add readiness and liveness probes for the web service.

Bekijk de AI-uitvoer altijd voordat u deze toepast. Valideer apiVersion waarden, resourceaanvragen en limieten, opslagklassen, serviceblootstelling en statustests.

Veelvoorkomende vertaalproblemen afhandelen

Hoe worden volumes verwerkt?

Compose vereist vaak persistente Kubernetes-volumes en een opslagklasse. Vervang in AKS lokale koppelingen door services zoals Azure Disks of Azure Files.

Wat vervangt depends_on?

Compose depends_on dwingt runtime-gereedheid in Kubernetes niet af. Vervang deze door gereedheidstests, opstarttests of init-containerlogica wanneer dat nodig is.

Hoe moet ik geheimen en omgevingswaarden afhandelen?

Compose-omgevingswaarden worden vaak Kubernetes-ConfigMap- of Secret-resources, of integraties met Azure Key Vault.

Wat gebeurt er met poorten en inkomend verkeer?

Stel ports een kaart op voor Kubernetes-objecten Service en soms toegangsbeheerobjecten of gateway-API-resources, afhankelijk van hoe u de toepassing publiceert.

Hoe worden health checks vertaald?

Compose-instellingen healthcheck worden meestal Kubernetes-liveness- en readiness-probes.

Wat gebeurt er met Compose networks?

Compose-netwerken worden doorgaans vertaald naar Kubernetes-servicediscovery via Services en cluster-DNS, in plaats van aangepaste bridge-netwerken.

Hoe test ik lokaal met Kubernetes?

Implementeer na de conversie de gegenereerde manifesten naar een lokale Kubernetes-omgeving, zoals soort of minikube, en gebruik vervolgens Skaffold of Tilt als u een snellere edit-build-deploy-lus wilt.

AKS-specifieke aanpassingen toepassen na conversie

Kompose biedt u een beginpunt, maar u moet meestal handmatige wijzigingen aanbrengen voor AKS:

  • Werk afbeeldingsverwijzingen bij om naar uw Azure Container Registry (ACR) te verwijzen.
  • Vervang uitsluitend lokale opslag en bind mounts door persistente opslag, zoals Azure Disks of Azure Files, afhankelijk van de vereisten van uw workload.
  • Vervang Compose-secrets of omgevingsspecifieke waarden door Kubernetes Secrets, ConfigMaps of Azure Key Vault-integraties.
  • Controleer de netwerkinstellingen en instellingen voor blootstelling, zoals LoadBalancer, ingress of gatewayconfiguratie, afhankelijk van hoe u de app in AKS wilt publiceren.
  • Controleer of stateful onderdelen als implementaties moeten blijven of moeten worden verplaatst naar patronen zoals StatefulSets wanneer u stabiele identiteit of opslaggedrag nodig hebt.
  • Valideer resourceaanvragen, tests en eventuele veronderstellingen voor opstartvolgordes, omdat compose-gedrag, zoals depends_on niet rechtstreeks vertaalt naar Kubernetes Runtime-gedrag.

Werkstroom na conversie

  1. Zet het Compose-bestand om met een hulpprogramma zoals Kompose, Move2Kube, Docker Compose Bridge, Podman of een door AI nagekeken conceptversie.
  2. Controleer en behard de manifesten door verwijzingen naar opslag, geheimen, serviceblootstelling, tests en afbeeldingsverwijzingen te herstellen.
  3. Verpak de manifesten met Helm of breng omgevingsspecifieke wijzigingen aan met Kustomize.
  4. Push uw images naar een registry zoals ACR en implementeer vervolgens met GitOps, CI/CD of rechtstreekse kubectl-workflows.

Voorbeeldvolgorde: kompose convert -> manifesten controleren -> images naar ACR pushen -> imageverwijzingen bijwerken ->kubectl apply of helm install.

Resources opschonen

Als u de Docker Compose-werkstroom hebt gevolgd, kunt u de actieve containers stoppen en verwijderen. Verwijder de containerimages niet omdat u deze in de volgende tutorial gebruikt. Als u de workflow van de Azure Developer CLI hebt gevolgd, gebruikt u azd down in plaats van docker compose down.

Stop en verwijder de containerinstanties en -resources met behulp van de docker compose down opdracht.

docker compose down

CLI-opdrachten voor ontwikkelaars Azure

Wanneer u azd gebruikt, zijn er geen handmatige containerimage-afhankelijkheden. azd verwerkt het inrichten, implementeren en opschonen van uw toepassingen en clusters met de azd up en azd down opdrachten, vergelijkbaar met Docker.

U kunt de voorbereidingsstappen aanpassen om Terraform of Bicep te gebruiken voordat u het cluster implementeert in de sectie infra van uw azure.yaml. Dit project maakt standaard gebruik van Terraform:

infra:
  provider: terraform
  path: infra/terraform

Als u de provider wilt wijzigen in Bicep, werkt u het bestand azure.yaml als volgt bij:

infra:
  provider: bicep
  path: infra/bicep

Volgende stappen

Azure CLI

In deze zelfstudie hebt u een voorbeeldtoepassing gemaakt, containerinstallatiekopieën voor de toepassing gemaakt en vervolgens de toepassing getest. U hebt geleerd hoe u:

  • Kloon een voorbeeldtoepassingsbron uit GitHub.
  • Maak een containerafbeelding van de voorbeeldapplicatiebron.
  • Test de toepassing met meerdere containers in een lokale Docker-omgeving.

In de volgende zelfstudie leert u hoe u containerafbeeldingen opslaat in een ACR.

Azure Developer CLI (Command Line Interface voor ontwikkelaars in Azure)

In deze zelfstudie hebt u een voorbeeldtoepassing gekloond met behulp van azd. U hebt geleerd hoe u:

  • Kloon een voorbeeldsjabloon azd uit GitHub.
  • Bekijk waar containerafbeeldingen worden gebruikt vanuit de bron van de voorbeeldtoepassing.

In de volgende zelfstudie leert u hoe u een cluster maakt met behulp van de azd sjabloon die u hebt gekloond.