Kurz – Příprava aplikace na Azure Kubernetes Service (AKS)

Tip

Stručná odpověď: Pro rychlé vytvoření základní kostry použijte Kompose, Move2Kube pro širší modernizaci, Docker Compose Bridge, pokud používáte Docker Desktop, a Podman k exportu ze spuštěných kontejnerů nebo podů. Pak výsledky zabalte pomocí Helm nebo Kustomize a opakujte postup s Skaffold nebo Tilt.

Hlavní nástroje: Kompose, Move2Kube, Docker Compose Bridge, Podman, Helm, Kustomize, Skaffold, Tilt a AI asistovaný převod.

V tomto kurzu připravíte vícekontenerovou aplikaci pro použití v Kubernetes. Tento kurz můžete použít bez ohledu na to, jestli začínáte s novou ukázkovou aplikací nebo přizpůsobujete koncepty Docker Compose pro aplikaci, kterou plánujete migrovat na Azure Kubernetes Service (AKS). K místnímu sestavení a otestování aplikace používáte existující vývojové nástroje, jako je Docker Compose. Naučíte se, jak:

  • Naklonujte ukázkový zdroj aplikace z GitHub.
  • Vytvořte image kontejneru z ukázkového zdroje aplikace.
  • Otestujte vícekontenerovou aplikaci v místním prostředí Dockeru.

Důležité

Začínáte znovu? V tomto kurzu můžete připravit a otestovat ukázkovou aplikaci pro AKS. Už používáte Docker Compose? Širší pokyny k plánování najdete v dokumentaci k Kubernetes pro migraci Docker Compose do Kubernetes a přehledu migrace AKS.

Po dokončení bude ve vašem místním vývojovém prostředí spuštěná následující aplikace:

Screenshot zobrazující aplikaci Front App Azure Store spuštěnou místně otevřenou v místním webovém prohlížeči.

V pozdějších kurzech nahrajete image kontejneru do Azure Container Registry (ACR) a pak ji nasadíte do clusteru AKS.

Než začnete

V tomto kurzu se předpokládá základní znalost klíčových konceptů Dockeru, jako jsou kontejnery, image kontejnerů a příkazy docker. Základní informace o kontejnerech najdete v článku Get started with Docker (Začínáme s Dockerem).

K dokončení tohoto kurzu potřebujete místní vývojové prostředí pro Docker se spuštěnými kontejnery Linuxu. Docker poskytuje balíčky, které konfigurují Docker na systému Mac, Windows nebo Linux.

Poznámka:

Azure Cloud Shell nezahrnuje komponenty Dockeru potřebné k dokončení každého kroku v těchto kurzech. Proto doporučujeme použít úplné vývojové prostředí pro Docker.


Získání kódu aplikace

Aplikace sample použitá v tomto kurzu je základní front app store, včetně následujících nasazení a služeb Kubernetes:

Screenshot ukázkové architektury Azure Store.

  • Store front: Webová aplikace pro zákazníky k zobrazení produktů a objednávání.
  • Produktová služba: Zobrazuje informace o produktu.
  • Služba objednávek: Vyřizuje objednávky.
  • RabbitMQ: Fronta zpráv pro zpracování fronty objednávek.
  1. Vytvořte v počítači adresář a přepněte do tohoto adresáře v příkazové řádce, například v relaci Bash. Tento příklad používá adresář s názvem demorepo , ale můžete použít libovolný název.

    mkdir demorepo
    cd demorepo
    
  2. Pomocí Gitu naklonujte ukázkovou aplikaci do vývojového prostředí.

    git clone https://github.com/Azure-Samples/aks-store-demo.git
    
  3. Přejděte do naklonovaného adresáře.

    cd aks-store-demo
    

Kontrola souboru Docker Compose

Ukázková aplikace, kterou vytvoříte v tomto kurzu, používá docker-compose-quickstart YAML soubor z úložiště, které jste naklonovali.

Následující tabulka shrnuje výchozí hodnoty klíče z ukázkového souboru Compose, abyste mohli rychle zjistit, které služby, porty a závislosti kurz používá:

Service Zdroj Vystavený port Klíčová nastavení
RabbitMQ rabbitmq:4.3.2-management-alpine Obrázek 15672, 5672 Výchozí uživatelské jméno username, heslo password
Služba objednávek src/order-service 3000 Připojí se k RabbitMQ na portu 5672 a používá frontu orders
Produktová služba src/product-service 3002 Používá AI_SERVICE_URL=http://ai-service:5001/
Výloha obchodu src/store-front 8080 Volá produktovou službu na 3002 a objednávkovou službu na 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

Vytvoření imagí kontejneru a spuštění aplikace

Docker Compose můžete použít k automatizaci vytváření imagí kontejnerů a nasazení vícekontenerových aplikací.

Před spuštěním následujících příkazů se ujistěte, že Docker běží v režimu kontejneru Linuxu.

  1. V kořenovém adresáři klonovaného aks-store-demo úložiště vytvořte image kontejneru, stáhněte image RabbitMQ a spusťte aplikaci pomocí docker compose příkazu:

    docker compose -f docker-compose-quickstart.yml up -d
    
  2. Pomocí příkazu zobrazte vytvořené obrázky docker images .

    docker images
    

    Následující zhuštěný ukázkový výstup ukazuje vytvořené image:

    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. Zobrazte spuštěné kontejnery pomocí docker ps příkazu.

    docker ps
    

    Následující zhuštěný ukázkový výstup ukazuje čtyři spuštěné kontejnery:

    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
    

Testování aplikace v místním prostředí

Pokud chcete zobrazit spuštěnou aplikaci, přejděte do http://localhost:8080 místního webového prohlížeče. Načte se ukázková aplikace, jak je znázorněno v následujícím příkladu:

Snímek obrazovky, který zobrazuje aplikaci Azure Store Front otevřenou v místním prohlížeči.

Na této stránce můžete zobrazit produkty, přidat je do košíku a pak zadat objednávku.

Migrujte své soubory Compose

Pokud už máte aplikaci definovanou v souboru Docker Compose, můžete tento kurz použít jako referenci pro místní ověření a pak převést stávající konfiguraci Compose na manifesty Kubernetes. Pomocí nástrojů, jako jsou Kompose, Move2Kube, Docker Compose Bridge nebo Podman , můžete převést definice Docker Compose na prostředky Kubernetes. Úplnou kompletní cestu převodu najdete v dokumentaci Kubernetes pro migraci Docker Compose do Kubernetes a přehled migrace AKS, pokud přecházíte také z jiného pracovního postupu orchestrace nebo modernizace.

Volba nástroje pro převod

Tuto tabulku použijte, když potřebujete rychlé porovnání nejběžnějších možností compose-to-Kubernetes.

nástroj Jednořádkový souhrn
Kompose Rychlá šablona Compose-to-Kubernetes; spusťte kompose convert; počítejte s ručním dočištěním konfigurace úložiště a sond.
Move2Kube Širší proces modernizace; vyžaduje spuštění move2kube plan -s ./path && move2kube transform; robustnější než jednosouborové převaděče.
Docker Compose Bridge Postup převodu pro Docker Desktop; spusťte docker compose bridge convert -o ./k8s/; aktuální informace o podpoře najdete v dokumentaci Dockeru.
Podman Export YAML ze spuštěných kontejnerů nebo podů; spusťte podman kube generate mypod > k8s.yaml; nejlepší pro pracovní postupy založené na nástroji Podman.
Helm Šablony a manifesty balíčků pro opakovaná nasazení; spusťte helm create mychart; nejlépe po převodu.
Kustomize Překryjte změny specifické pro dané prostředí; spusťte kubectl apply -k .; nejlépe po převodu.
Skaffold Vytvořte interní vývojovou smyčku pro Kubernetes; spusťte skaffold init; nejde o přímý převaděč.
Naklonění Průběžná aktualizace při místním vývoji pro Kubernetes; spustit tilt up; vyžaduje postup práce zaměřený na Kubernetes.
Převod s asistencí umělé inteligence Vytvářejte nebo porovnávejte manifesty pomocí AI a před nasazením pak ověřte výstup.

Který nástroj mám vybrat?

  • Pokud chcete rychlé ověření konceptu nebo výchozí manifesty, použijte Kompose.
  • Pokud používáte Docker Desktop a chcete nativní cestu Dockeru, použijte Docker Compose Bridge.
  • Pokud máte větší migraci nebo modernizaci s více službami, použijte Move2Kube.
  • Pokud chcete exportovat ze spuštěných kontejnerů nebo podů, použijte Podman.
  • Pokud už máte manifesty a potřebujete balení nebo překryvy, použijte Helm nebo Kustomize.
  • Pokud po převodu potřebujete místní vývojovou smyčku Kubernetes, použijte skaffold nebo Tilt.
  • Pokud chcete návrhy manifestů nebo vysvětlení migrace, využijte asistenci AI a výsledek ověřte podle oficiálních pokynů Kubernetes a AKS.

Další nástroje, které je potřeba vzít v úvahu:

  • 8gwifi.org převodník YAML pro Kubernetes: Užitečný pro rychlé online experimenty s malými soubory Compose.
  • Okteto: Užitečné, když chcete cloudovou nebo vzdálenou vývojovou smyčku Kubernetes pro aplikační týmy.
  • Devtron: Užitečné, pokud po migraci chcete platformu s workflow pro nasazování do Kubernetes.
  • Portainer: Užitečné v případech, kdy chcete mít prostředí pro správu kontejneru řízeného uživatelským rozhraním a prostředí pro správu Kubernetes.

Převeďte své soubory Compose

Jako výchozí bod použijte následující kopírovatelné příkazy:

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

Příklad převodu pomocí Kompose

Opensourcový nástroj Kompose převádí běžná nastavení Docker Compose na objekty Kubernetes, jako jsou nasazení a služby.

  1. Na Windows nainstalujtekompose pomocí následujícího příkazu:

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

    Další možnosti instalace najdete v pokynech k instalaci Kompose.

  2. Spusťte příkaz Kompose z adresáře, který obsahuje váš docker-compose.yml soubor.

    kompose convert
    
  3. Než je nasadíte do AKS, projděte si vygenerované soubory YAML Kubernetes.

Převod s asistencí umělé inteligence

Pomocí pomocníka s AI můžete vytvářet manifesty Kubernetes, porovnávat nastavení compose s ekvivalenty Kubernetes nebo vysvětlit, proč převod potřebuje ruční změny.

Obecný příklad výzvy:

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.

Ukázkový prompt pro 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.

Před použitím vždy zkontrolujte výstup AI. Ověřte hodnoty apiVersion, požadavky na prostředky a limity, třídy úložiště, způsob vystavení služby a sondy stavu.

Řešení běžných problémů s překladem

Jak se zpracovávají svazky?

Compose volumes často potřebuje persistentní svazky Kubernetes a třídu úložiště. V AKS nahraďte svazky připojené pouze místně službami, jako jsou Azure Disks nebo Azure Files.

Co nahrazuje depends_on?

Compose depends_on nevynucuje připravenost modulu runtime v Kubernetes. V případě potřeby ji nahraďte sondami připravenosti, spouštěcími sondami nebo logikou init kontejneru.

Jak mám zpracovávat tajné kódy a hodnoty prostředí?

Hodnoty prostředí v Compose se často převádějí na prostředky Kubernetes ConfigMap nebo Secret nebo na integrace se službou Azure Key Vault.

Co se stane s porty a příchozím provozem?

ports Vytvořte mapování na objekty Kubernetes Service a někdy prostředky rozhraní API příchozího přenosu dat nebo brány v závislosti na způsobu publikování aplikace.

Jak se překládají kontroly stavu?

Nastavení healthcheck Compose se obvykle převedou na sondy živosti a připravenosti Kubernetes.

Co se stane se sítěmi v Compose?

Sítě Compose obvykle odpovídají zjišťování služeb v Kubernetes prostřednictvím objektů Service a clusterového DNS, nikoli vlastním bridge sítím.

Jak můžu místně testovat pomocí Kubernetes?

Po převodu nasaďte vygenerované manifesty do místního prostředí Kubernetes, například kind nebo minikube, a pokud chcete zrychlit cyklus úprav, sestavení a nasazení, použijte Skaffold nebo Tilt.

Po konverzi použijte úpravy specifické pro AKS

Kompose vám poskytne výchozí bod, ale obvykle potřebujete provést ruční změny pro AKS:

  • Aktualizujte odkazy na image tak, aby směřovaly na vaši službu Azure Container Registry (ACR).
  • V závislosti na požadavcích vašich úloh nahraďte místní úložiště a připojení typu bind trvalým úložištěm, například Azure Disks nebo Azure Files.
  • Nahraďte secrets v Compose nebo hodnoty specifické pro dané prostředí pomocí Kubernetes Secrets, ConfigMapů nebo integrací Azure Key Vault.
  • Zkontrolujte nastavení sítě a zveřejnění, například LoadBalancer, ingress nebo konfiguraci brány, podle toho, jak chcete aplikaci publikovat v AKS.
  • Zkontrolujte, zda by stavové komponenty měly zůstat jako Deploymenty, nebo přejít na řešení, jako jsou StatefulSety, pokud potřebujete stabilní identitu nebo určitý způsob práce s úložištěm.
  • Ověřte požadavky na prostředky, sondy a veškeré předpoklady o pořadí spouštění, protože chování Compose, jako je depends_on, se nepřenáší přímo do běhového chování Kubernetes.

Pracovní postup po převodu

  1. Převeďte soubor Compose pomocí nástroje, například Kompose, Move2Kube, Docker Compose Bridge nebo Podman, případně návrhu zkontrolovaného AI.
  2. Zkontrolujte a zabezpečte manifesty opravou úložiště, tajných údajů, zpřístupnění služby, sond a odkazů na obrazy.
  3. Spravujte manifesty pomocí Helmu nebo vrstvěte změny specifické pro prostředí pomocí Kustomize.
  4. Nahrajte své image do registru, například ACR, a pak je nasaďte pomocí GitOps, CI/CD nebo přímých workflow kubectl.

Příklad sekvence: kompose convert –> revize manifestů –> nasdílení imagí do ACR –> aktualizace odkazů na image –>kubectl apply nebo helm install.

Vyčištění prostředků

Pokud jste postupovali podle pracovního postupu Docker Compose, můžete zastavit a odebrat spuštěné kontejnery. Neodstraňujte image kontejnerů, protože je použijete v dalším kurzu. Pokud jste postupovali podle pracovního postupu rozhraní příkazového řádku pro vývojáře Azure, použijte azd down místo docker compose down.

Pomocí příkazu docker compose down zastavte a odeberte instance kontejneru a prostředky.

docker compose down

příkazy rozhraní příkazového řádku pro vývojáře Azure

Při použití azd neexistují žádné ručně zadané závislosti kontejnerových image. azd zpracovává zřizování, nasazení a čištění vašich aplikací a clusterů pomocí azd up příkazů a azd down příkazů, podobně jako Docker.

Přípravné kroky si můžete přizpůsobit tak, aby používaly buď Terraform, nebo Bicep před nasazením clusteru v sekci infra vašeho azure.yaml. Ve výchozím nastavení tento projekt používá Terraform:

infra:
  provider: terraform
  path: infra/terraform

Pokud chcete změnit poskytovatele na Bicep, aktualizujte soubor azure.yaml následujícím způsobem:

infra:
  provider: bicep
  path: infra/bicep

Další kroky

Azure CLI

V tomto kurzu jste vytvořili ukázkovou aplikaci, vytvořili image kontejneru pro aplikaci a pak aplikaci otestovali. Naučili jste se:

  • Naklonujte ukázkový zdroj aplikace z GitHub.
  • Vytvořte image kontejneru z ukázkového zdroje aplikace.
  • Otestujte vícekontenerovou aplikaci v místním prostředí Dockeru.

V dalším kurzu se dozvíte, jak ukládat image kontejnerů do ACR.

Azure Developer CLI

V tomto kurzu jste naklonovali ukázkovou aplikaci pomocí azd. Naučili jste se:

  • Naklonujte ukázkovou šablonu azd z GitHub.
  • Podívejte se, kde se používají obrazy kontejnerů ze zdrojového kódu ukázkové aplikace.

V dalším kurzu se dozvíte, jak vytvořit cluster pomocí azd šablony, kterou jste naklonovali.